登录
首页 单片机论坛
回帖 发帖
正文

主题:请教 位地址 与 字节地址 的区别?

点击:9216 回复:2

例如:
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是一样的,这是怎么回事?
11-03-28 17:02
sfr是特殊功能寄存器,离散地址(80H-FFH);
sbit是特殊功能寄存器映射的位地址128个bit地址(80H-FFH);
你可以看作sfr与sbit不是在同一个地址;
把可以位寻址特殊功能寄存器映射到,位地址(16个字节)中;
我们使用的时候用sbit与sfr区定义;
这样编译器(如keil)根据你的sbit与sfr操作对应的地址;
所以sfr TMOD = 0x89;跟sbit IE0  = 0x89;
没有关系;
TMOD不是可位寻址特殊功能寄存器,在位寻址地址中没有映射到;
11-03-30 19:48
单片机中的存储器通常以字节(8bit)为单位来进行组织,即每一个字节有一个地址,通过“字节”地址可以访问到存储器中的任何一个字节,这是最常见的形式。你的问题中以“sfr”开头的,就是在定义字节地址,相当于给指定的地址又起了一个别名,以后可以通过这个别名访问字节存储单元。
   针对开关控制之类的应用MCS-51单片机内部集成了一个一位的处理器,这个处理器的操作对象是单个的比特位(并非字节),为了对位的情况进行存储,在原字节形式的存储器上又叠加了一个位存储区,针对每一个比特位给定一个地址,这样就构成了位地址空间。由于是叠加设计的位存储区,形式上就表现为:存储器中的某些存储单元即可以通过字节地址访问,也可以通过位地址访问(具体是访问该字节中的某个比特位)。在MCS-51单片机中被叠加设计的这些字节存储单元的字节地址有一个点,就是:字节地址的最低位要么是十六进制的0,要么是十六进制的8,而且位地址当中的00H对应的是字节20H中的D0位。
   你问题中的sbit就是给位地址定义别名,以后可以通过这个别名,直接访问相应的比特位。
   尽管你所举的例子中位地址和字节地址是同一个数值,但它们之间没有必然的联系。单片机拿到这个地址后,到底是访问单个比特位还是访问字节,要看指令中体现出的数据宽度而定。
11-03-31 09:07

工控新闻

更多新闻资讯