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