微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 单片机设计经验技巧精华集锦(五)

单片机设计经验技巧精华集锦(五)

时间:05-27 来源:互联网 点击:

C51单片机常见问题

  笔者在工作中实际使用过AT89C2051、AT89C51、AT89C52等51单片机,后来应用台湾新茂、华邦等厂家的51单片机。实践中遇到许多问题,都是书本上没有的。我印象中,书本上的知识只有一页插图了,就是cpu的时序图。最初直接用汇编写程序,然后是C51嵌套汇编。编译器曾用伟福系列编译器,后来使用keil等,感觉这些编译器大同小异。需要熟练的C语言基础,加上单片机应用的特殊性。

  本文就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不会变化。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top