1 首先區(qū)分bit 和sbit bit和int char之類的差不多,只不過char=8位, bit=1位而已。都是變量,編譯器在編譯過程中分配地址。除非你指定,否則這個地址是隨機的。這個地址是整個可尋址空間,RAM+FLASH+擴展空間。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ì)代表的是異或運算,可以算一下,恰好符合。 2.Sfr用法 sfr 似乎不是標(biāo)準(zhǔn)C 語言的關(guān)鍵字,而是Keil 為能直接訪問80C51 中的SFR 而提供了一個新的關(guān)鍵詞,其用法是:sfrt 變量名=地址值。 例:sfr P1 = 0x90; 這樣的一行即定義P1 與地址0x90 對應(yīng),P1 口的地址就是0x90. SFR的定義在頭文件reg51.h或reg52.h中。
|