您现在所在的是:

单片机论坛

回帖:2个,阅读:9071 [上一页] [1] [下一页]
706
haidao1984
文章数:1
年度积分:50
历史总积分:706
注册时间:2011/3/25
发站内信
发表于:2011/3/28 17:02:10
#0楼
例如:

sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;





sbit TF1  = 0x8F;
sbit TR1  = 0x8E;
sbit TF0  = 0x8D;
sbit TR0  = 0x8C;
sbit IE1  = 0x8B;
sbit IT1  = 0x8A;
sbit IE0  = 0x89;
sbit IT0  = 0x88;



这其中如TMOD=0x89与IE0=0x89是一样的,这是怎么回事?
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/3/30 19:48:02
#1楼
sfr是特殊功能寄存器,离散地址(80H-FFH);
sbit是特殊功能寄存器映射的位地址128个bit地址(80H-FFH);
你可以看作sfr与sbit不是在同一个地址;
把可以位寻址特殊功能寄存器映射到,位地址(16个字节)中;
我们使用的时候用sbit与sfr区定义;
这样编译器(如keil)根据你的sbit与sfr操作对应的地址;

所以sfr TMOD = 0x89;跟sbit IE0  = 0x89;
没有关系;



TMOD不是可位寻址特殊功能寄存器,在位寻址地址中没有映射到;
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
758
hDragon
文章数:19
年度积分:50
历史总积分:758
注册时间:2011/3/30
发站内信
发表于:2011/3/31 9:07:29
#2楼
字节地址与位地址
单片机中的存储器通常以字节(8bit)为单位来进行组织,即每一个字节有一个地址,通过“字节”地址可以访问到存储器中的任何一个字节,这是最常见的形式。你的问题中以“sfr”开头的,就是在定义字节地址,相当于给指定的地址又起了一个别名,以后可以通过这个别名访问字节存储单元。
   针对开关控制之类的应用MCS-51单片机内部集成了一个一位的处理器,这个处理器的操作对象是单个的比特位(并非字节),为了对位的情况进行存储,在原字节形式的存储器上又叠加了一个位存储区,针对每一个比特位给定一个地址,这样就构成了位地址空间。由于是叠加设计的位存储区,形式上就表现为:存储器中的某些存储单元即可以通过字节地址访问,也可以通过位地址访问(具体是访问该字节中的某个比特位)。在MCS-51单片机中被叠加设计的这些字节存储单元的字节地址有一个点,就是:字节地址的最低位要么是十六进制的0,要么是十六进制的8,而且位地址当中的00H对应的是字节20H中的D0位。
   你问题中的sbit就是给位地址定义别名,以后可以通过这个别名,直接访问相应的比特位。
   尽管你所举的例子中位地址和字节地址是同一个数值,但它们之间没有必然的联系。单片机拿到这个地址后,到底是访问单个比特位还是访问字节,要看指令中体现出的数据宽度而定。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004