C51编程中sfr、sbit的用法及位地址与字节单元地址的区别详解
这里写目录标题
1. sfr用法
特殊功能寄存器定义:以P0为例。
在c51的官方头文件中,P0口是这样定义的
可见sfr的定义方式为:sfr 变量名=字节单元地址;
这里的P0也可以换成其他变量名。
在后续的使用中,如:P0=0x00;就是把0x80为地址的字节单元的8位的数据赋值为0000 0000B
2. sbit用法
特殊功能位定义:以P0_0为例。
在c51的官方头文件中,P0_0口是这样定义的
可见sbit的定义方式为:sbit 变量名=位地址;
这里的P0_0也可以换成其他变量名。
sbit 还有其他定义方式,如:
sbit P0_0 = P0^0
sbit P0_0 = 0x80^0
可见P0 ^0,0x80 ^0都可以表示位地址;
3. ^的用法
通过上面的例子,我们可以得到 ^的作用: ^用于得到一个可位寻址字节单元的某一位;
^ 的具体用法为:位变量名=(可位寻址字节单元地址/变量名)^(第几位)。(如:sbit VAR1 = P0 ^0)
在后续的使用中,如:VAR1=0;就是把0x80为地址的字节单元的第0位(即P0口的第0位)的数据置0。
4. 可位寻址的字节单元地址

5. 区分位地址和字节单元地址
如:字节单元地址P0=0x80,位地址P0_0=0x80,两者虽然地址是重叠的,但是使用时不用担心混用,如:指令对位数据进行操作时,0x80代表位地址;指令对字节数据进行操作时,0x80代表单元地址。