您的位置 首页 观点

地址转化-51单片机C编程

80C51单片机C编程时中,用sbit定义可位寻址的特殊功能寄存器的位变量(感觉说是常量更确切)时,编译器会进行处理,把sbit后面给的地址值

80C51单片机C编程时中,用sbit界说可位寻址的特别功用寄存器的位变量(感觉说是常量更切当)时,编译器会进行处理,把sbit 后边给的地址值 转化成 相应的可进行位寻址的特别功用寄存器 bit位 的位地址。转化不了时uVision报错,编译不通过。

比方,在头文件reg51.h中,界说了 sfr P0 = 0x80,该地址标识的是51芯片的P0端口的8个引脚。(一个字节)。
一起reg51.h中还界说了 sfr SP = 0x81。

假如自己界说 sbit TEST1 = 0x81;试验时会发现:TEST1实践表明的是0x80标识的8bits中的第二个bit位,表明成0x80.1。

依照一般的了解:TEST1应该是地址0x81对应的8bit的第一个bit位(0x81.0),可是现实不是这样的;

假如界说 sbit TEST4 = 0x84,表明的是0x80.4;
sbit TEST7 = 0x87,表明的是0x80.7。

可是当结尾大于7后,比方 sbit TEST8 = 0x88,表明的是0x88.0, 而不是0x81.0;
sbit TEST9 = 0x89;表明的是0x88.1; 顺次类推到0x8f表明0x88.7。

开端是用试验板上的LED来查看,后来在uVision里边软调试,看Parallel Port0。看Memory是没用的,特别功用寄存器的地址和内存空间地址是两个东西;后来看Symbols,总算把sbit界说的操控位的实践地址看清楚,可是没想理解,为甚么是这样,规则是怎样的。

查了一下材料,本来特别功用寄存器中不是一切字节都可进行位寻址,支撑位寻址字节地址的是:
0x80,0x88,0x90, 0x98, 0xA0, 0xA0, 0xA8, 0xB0, 0xB8, 0xC0, 0xC8, 0xD0, 0xD8, 0xE0, 0xE8, 0xF0, 0xF8
共16个,这些地址不连是续,能被8整除, 即字节地址是以8或0为尾数的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/255420.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部