嵌入式学习笔记 - SH79F6441芯片之8051的寻址空间,位寻址与字节地址寻址
首先看下图

由上图可见,
① 8051单片机的可位寻址以及不可位寻址的寄存器的地址是混在一起的
② 能被8整除的寄存器字节地址可以进行位寻址,其他字节地址不可以位寻址
以上图中字节地址A8H为例,字节A8H地址的寄存器名称为IEN0,这个寄存器如下所示

这个寄存器是可以位寻址的,8051特意把它的地址设置为8可以整除,既可以用字节地址去寻址它,也可以用位寻址去寻址它,
使用sfr IEN0 = A8H 能寻址到这个寄存器的所有位,
或者使用sbit EX0 = A8H,sbit EPCA0 =A9H, 。。。也能寻址到这个寄存器的所有位
这里就会出现一个问题,那么A9H岂不是有两个寄存器地址,一个是A8H的第2位EPCA0,一个是IEN1起始地址, 那么A9H到底访问的是那个地址?
这时候就要靠编译器根据8051的寻址方式的特殊性来自动区分:
使用 sfr A9H 只能寻址到IEN1,这时候编译器将其判断为字节寻址
使用sbit A9H,这时候编译器将其判断为位寻址,而且只能寻址到EPCA0,因为A9H不可以位寻址,
这也就是8051只设置能被8整除的地址可位寻址的原因,就是使用A9H这种地址位寻址的时候,防止编译器编译的时候出现不同的物理地址,只可能有一个物理地址,因为字节地址A9H不能位寻址。
使用A9H位寻址时,被编译器编译为位寻址后,单片机的物理设计通路,只能通到EPCA0这个寄存器物理地址。
