sbit和sfr到底是什么?

sbit是用来给特殊寄存器某个位取一个名字。sfr就是特殊寄存器。

下图就是51单片机所有的特殊寄存器

每个寄存器的位我们都可以给它取一个名字,专业术语叫 标识符,通过这个标识符可以操作对应的数据。每个寄存器的位也都拥有一个地址,通过寄存器的地址也可以访问到对应的数据。

但是地址只能做右值,不能做左值。也就是

sbit led =0xA0^1//0xA0是P2这个寄存器的地址

是可以的

0xA0^1=0//这是错误的,编译会提示语法错误。

为了让我们更方便的操作寄存器中的位数据,引入了sbit

sbit常用的两种方法

//sbit led =0xA0^1; //A0是P2这个寄存器的地址
//sbit ledD2=P2^0; //P2寄存器的名字

0xA0^1是什么?

STC80C52是一个8位CPU,所以P2这个寄存器是8位的,而P2这个寄存器的地址是0xA0,这个寄存器的位地址是这样的,从第0位到第7位

 第一位     第二位    第三位    .。。。  第七位  

1010 0000    1010 0001    1010 0010       1010 0111

^是异或的意思

0xA0^1=

1010 0000

XOR  0001

1010 0001

这个1010 0001 正好就是寄存器A0的第1个位地址(从0开始数的),以此类推,0xA0^7的结果是1010 0111 ,也就是A0的第七个位地址。

每个寄存器都有一个名字,专业术语叫标识符,每个寄存器都有一个地址。

因为地址不能做左值只能做右值,所以我们用寄存器的标识符操作寄存器的数据。

寄存器的用法

P2=0xFF;

P1=0x55;

参考资料:http://www.keil.com/support/man/docs/c51/c51_le_sbit.htm

原文地址:https://www.cnblogs.com/yfish/p/10855744.html