sbit是定義特殊功能寄存器的位變量。bit和sbit都是C51擴(kuò)展的變量類型。
典型應(yīng)用是:sbit P0_0=P0^0;//即定義P0_0為P0口的第1位,以便進(jìn)行位操作。(推薦學(xué)習(xí):PHP視頻教程)
bit和int char之類的差不多,只不過char=8位, bit=1位而已。都是變量,編譯器在編譯過程中分配地址。
用法
在C語(yǔ)言里,如果直接寫P1.0,C編譯器并不能識(shí)別,而且P1.0也不是一個(gè)合法的C語(yǔ)言變量名,所以得給它另起一個(gè)名字,這里起的名為P1_0,可是P1_0是不是就是P1.0呢?你這么認(rèn)為,C編譯器可不這么認(rèn)為,所以必須給它們建立聯(lián)系,這里使用了Keil C的關(guān)鍵字sbit來(lái)定義,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的地址值
因此這里用sbit P1_0=P1^0;就是定義用符號(hào)P1_0來(lái)表示P1.0引腳,如果你愿意也可以起P10一類的名字,只要下面程序中也隨之更改就行了。
sbit 要在最外面定義,就是說(shuō)必須定義成外部變量.sbit定義的是SFR(特殊功能寄存器)的bit
sbit是對(duì)應(yīng)可位尋址空間的一個(gè)位,可位尋址區(qū):20H~2FH。一旦用了sbit xxx = REGE^6這樣的定義,這個(gè)sbit量就確定地址了。sbit大部分是用在寄存器中的,方便對(duì)寄存器的某位進(jìn)行操作的。
sbit位寄存器是可位尋址的絕對(duì)地址目標(biāo),定義后編譯器是不會(huì)改變位置的。