0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机应用中5个常见问题总结

GReq_mcu168 2017-12-06 09:53 次阅读

本文就51单片机应用中一些常见问题作个总结,这都是我实际碰到过的,因为文章篇幅所限,这些问题远远不足以表达单片机的常见问题。希望对初学者有所帮助,文中不完善的地方务请指点。谢谢!

1:C51编译器如何区分位地址和字节地址

是靠预定义实现的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者声明了P0端口地址位于0x80,后者说明了P0端口的bit0,即P0.0位于位地址空间0x80处。这2个0x80具有完全不同的含义,靠关键字sfr和sbit来区别。这样当程序被编译时,编译器会依此编译成相应的汇编语言。例如:

C51语句: P0 = 1;

P0声明为sfr,因此编译成:mov 80h,01h,将把0x01数据送入0x80单元,由于0x80单元物理上对应P0端口,因此,P0.0脚将输出高电平(其实是呈现高阻态,P0口独有的),其他.1-.7脚输出低电平。

C51语句: P0_0 = 1;

P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。

2:C51为什么要嵌套汇编

51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:

汇编程序单独保存一个文件,加入到工程中,函数如下:

_proc_a:

mov a, r7

inc a

mov r7, a

ret

c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);

调用时形如: retvalue = proc_a(0x11);

说明:

a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。

b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。

d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。

3:51单片机的P0口特殊之处

许多新手都碰到这个问题,其实很简单,这涉及到芯片的io脚是怎么做出来的。这对硬件工程师来说十分重要。TTL的io脚模型:

P1,P2,P3口都可以理解成左图,注意vcc下面有个电阻,因此可以理解成:引脚输出1的能力弱。地那边没有电阻,可以理解成引脚吸入电流能力强。而P0口,可以理解成右图。这就是集电极开路输出,也叫OC输出。可以看出,当CTR=1时,三极管导通,引脚被接地;当ctr=0时,三极管截止,引脚浮空,也叫三态。这个端口这么做的目的是考虑P0口肩负读写数据和地址复用,这个关系要仔细看懂cpu时序图。因此,P0口要加合适的上拉电阻,绝不要加下拉电阻。上拉电阻的选择要看外部负载情况。

4:P1-3口如何输入输出

从上节的左图可以看出。做输出时,ctr=1则输出强信号0,ctr=0则输出弱信号1。当io脚做输入时,应使ctr=0,这样三极管截止。外部信号如果是1,则上拉电阻加强了这个1,单片机就会读到1。当外部信号为0时,注意,必须将上拉电阻的上拉作用全部抵消,才能在引脚上得到0。

因此,对于程序来说,把io脚置1就处于接收状态,当然也是输出1状态。程序置io口为1,读取的信号是不是1就依靠外部电路了,如果外部电路没有“吃掉”上拉电阻的电流,则读取得到1,反之,虽然程序置io脚为1,但是读取得到的就是0。

因此,如果用io脚的高电平驱动外部电路时,要小心外部电路把这个1“吃掉”从而输出不了1。而作为输入时,为0电平的外设必须足够有能力将io脚拉低。所以,用io脚直接点亮led的时候,最好用反逻辑,就是输出0,让led亮。这样能保证驱动能力。就是io脚接led的负端,led的正端过电阻接vcc。

因此,io脚输出1时,外部电路将它强行接地是没有关系的,而io脚输出0的时候,外部电路强行接电源就会把io脚损坏。所以,程序加电之后,一般把所有io口都写成1:MOV P0,0FFH。

P3口引脚复用,必须引脚都处于输出1状态。例如,把RXD脚输出0,则它什么数据都读不进来了,笔者早期曾调试一整天才发现串口收不到数据是没有把RXD置1的原因,把时间都浪费在外围了,当时很是汗颜。

5:有关晶振

单片机的晶振在内部可以简化成一个反向器。当晶振输入脚XI刚过坎压、被认为是1的一瞬间,输出脚XO就输出0,这个0会带动晶振使XI电压下降,当降低到坎压被认为是0的一瞬间,输出脚XO就输出1。这样周而复始。

因此,用示波器观察正常工作的晶振输入脚XI时,得到的是一个不高不低的近似水平线。而XO则是幅值很大的正弦波。测量晶振输入脚XI时,示波器表笔要打在X10档上,否则,表笔就能把晶振弄停。

因此布线时,晶振输入脚XI要尽量靠近晶振,而XO脚可稍远。同时XO具有一定的驱动能力,某些芯片可以用它驱动其它时序电路(不推荐这么做,因为系统可靠性下降)。

写到这里,才发觉51单片机的问题太多了,这篇文字简直就是沧海一粟。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44514

    浏览量

    632980
  • 晶振
    +关注

    关注

    34

    文章

    2824

    浏览量

    67902
  • 51单片机
    +关注

    关注

    273

    文章

    5697

    浏览量

    123186

原文标题:电子设计之C51单片机常见问题

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电子电路设计之C51单片机常见问题

    笔者在工作实际使用过AT89C2051、AT89C51、AT89C52等51单片机,本文就51单片机
    发表于 11-22 11:28 1w次阅读
    电子电路设计之C<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>常见问题</b>

    单片机开发过程常见问题

    单片机在组装与开发过程总是会出现一些问题,导致过程不是那么顺利的完成。今日分享一些单片机常见问题的解决办法1.单片机EN8F609兼容PI
    发表于 09-11 16:33

    单片机的这5常见问题,你能解决吗?

    单片机学习、考试,甚至在面试过程,有各种问题等待着我们,当然,常见的问题其实也不少,今天就梳理了5比较
    发表于 12-12 17:03

    单片机学习常见问题(持续更新) 精选资料分享

    单片机学习常见问题记录
    发表于 07-16 06:14

    单片机面试常见问题及答案

    单片机面试常见问题及答案,单片机IO口开漏输出和推挽输出有什么区别?推挽输出:既可以输出低电平,也可以输出高电平,可以直接驱动功耗不大的数字器件。导通损耗小、效率高、既提高电路的负载能力,又提高开关
    发表于 07-19 06:48

    51单片机串口中断使用总结

    51单片机串口中断使用总结,有程序,可以参考。
    发表于 03-28 10:00 13次下载

    有关51单片机有关晶振的问题总结(干货)

    在初学51单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就是如同人的心脏,是血液的脉搏,把单片机的晶振问题搞明白了,51单片机的其他问
    的头像 发表于 02-10 11:02 9136次阅读

    51单片机经常使用的寄存器功能总结

    本文档的主要内容详细介绍的是51单片机经常使用的寄存器功能总结
    发表于 08-29 17:29 12次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>经常使用的寄存器功能<b class='flag-5'>总结</b>

    51单片机是什么?应该如何学习51单片机

    51 单片机是目前使用最多的单片机之一,那么什么是 51 单片机呢?作为新手,又该如何自学 51
    发表于 12-23 07:57 73次下载

    51单片机学习 基础知识总结

    51单片机学习 基础知识总结
    发表于 11-11 19:21 39次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>学习    基础知识<b class='flag-5'>总结</b>

    keil uvsion551单片机的学习总结(不定时更新)

    keil uvsion551单片机的学习总结(不定时更新)
    发表于 11-21 14:51 10次下载
    keil uvsion<b class='flag-5'>5</b>与<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的学习<b class='flag-5'>总结</b>(不定时更新)

    总结:30单片机常见问题解决办法!

    总结:30单片机常见问题解决办法!
    的头像 发表于 10-17 17:46 3048次阅读
    <b class='flag-5'>总结</b>:30<b class='flag-5'>个</b><b class='flag-5'>单片机</b><b class='flag-5'>常见问题</b>解决办法!

    单片机常见问题的解决思路和解决办法

    30单片机常见问题解决办法!
    的头像 发表于 09-18 16:51 2364次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>常见问题</b>的解决思路和解决办法

    stc51单片机怎么烧录

    步骤 常见问题与解决方法 STC51单片机是一种常见的8位单片机,广泛应用于各种嵌入式系统。它具有高性能、低成本、易于学习和使用等优点。ST
    的头像 发表于 01-02 17:41 3059次阅读

    51单片机晶振的问题总结

    电子发烧友网站提供《51单片机晶振的问题总结.doc》资料免费下载
    发表于 09-07 09:32 0次下载