1首先區(qū)分bit和sbit
bit和int char之類的差不多,只不過char=8位, bit=1位而已。都是變量,編譯器在編譯過程中分配地址。除非你指定,否則這個地址是隨機(jī)的。這個地址是整個可尋址空間,RAM+FLASH+擴(kuò)展空間。bit只有0和1兩種值,意義有點像Windows下VC中的BOOL。
sbit是對應(yīng)可位尋址空間的一個位,可位尋址區(qū):20H~2FH。一旦用了sbi xxx = REGE^6這樣的定義,這個sbit量就確定地址了。sbit大部分是用在寄存器中的,方便對寄存器的某位進(jìn)行操作的。
sbit的用法有三種:
第一種方法:sbit位變量名=地址值
第二種方法:sbit位變量名=SFR名稱^變量位地址值
第三種方法:sbit位變量名=SFR地址值^變量位地址值
如定義PSW中的OV可以用以下三種方法:
sbit OV=0xd2(1)說明:0xd2是OV的位地址值
sbit OV=PSW^2(2)說明:其中PSW必須先用sfr定義好
sbit OV=0xD0^2(3)說明:0xD0就是PSW的地址值
因此這里用sfr P1_0=P1^0;就是定義用符號P1_0來表示P1.0引腳,如果你愿意也可以起P10一類的名字,只要下面程序中也隨之更改就行了。
注意:"^"實質(zhì)代表的是異或運(yùn)算,可以算一下,恰好符合。
2.Sfr用法
sfr似乎不是標(biāo)準(zhǔn)C語言的關(guān)鍵字,而是Keil為能直接訪問
例:sfr P1 = 0x90;
這樣的一行即定義P1與地址0x90對應(yīng),P1口的地址就是0x90.
SFR的定義在頭文件reg51.h或reg52.h中。