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