打印

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

[复制链接]
1425|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
autor|  楼主 | 2012-10-10 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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不会变化。

相关帖子

沙发
comeon201208| | 2012-10-11 09:27 | 只看该作者
sfr P0 = 0x80; sbit P0_0 = 0x80,这种预定义毕业后就忘的差不多了,跟着楼主在学习了

使用特权

评论回复
板凳
airwill| | 2012-10-11 11:52 | 只看该作者
由于标准的 C 没有提供这样的定义, Keil 扩展了sfr, sbit 来定义 字节地址和位地址.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

227

帖子

0

粉丝