sfr用於將乙個微控制器的特殊功能暫存器(special function register)賦值給乙個變數,這樣在後面的程式中就可以中這個變數指引(refer to)該暫存器。
sbit與sfr用法類似,只是sbit是位操作,用於將某個sfr中具體位賦值給乙個變數,這樣後面程式就可用通過該變數為該位清0或置1。
stc該系列微控制器的特殊功能暫存器布局如下:
看過圖1這麼多特殊功能暫存器之後可能會產生一些困擾,我們用sfr p0 = 0×80表示p0,用sfr sp = 0×81表示sp,這個沒有歧義。有困擾的是:假如用sbit p0_1 = 0×81表示p0口的第一位,那麼我想表示sp暫存器的第0位怎麼辦呢?如果也是定義成sbit sp_0 = 0×81那麼明顯會有二義性,編譯器理解不了。其實這個問題是不存在的,從圖1中可以看出,sfr又可以分為兩個區域:可位定址區和不可位定址區。可位定址區的暫存器位址能夠被8整除,而不可位定址區的暫存器位址不滿足這一要求。因此例子中的sbit sp_0 = 0×81對於sp暫存器這是無效的應該寫成sfr sp=0x81。
例如:sbit p1^1=0x81;sfr sp=0x81;
它們雖然都引用了同乙個位址0×81,但是對於編譯器來說,這兩者的含義完全不同,前者因為有sfr關鍵字,所以是位元組位址。後者因為是sbit關鍵字,所以是位定址,表示的是乙個bit。
微控制器關鍵字sfr和sbit的理解
在微控制器c語言程式設計中,擴充了兩個關鍵字sfr和sbit。sfr special function register特殊功能暫存器的縮寫 sbit 特殊功能暫存器位 與定義一般的int char型變數不同,這兩個字定義的並不是變數,而作為特殊功能暫存器的引用,或許可以叫做別名。微控制器標頭檔案中...
微控制器關鍵字sfr和sbit的理解
在微控制器c語言程式設計中,擴充了兩個關鍵字sfr和sbit。sfr special function register特殊功能暫存器的縮寫 sbit 特殊功能暫存器位 與定義一般的int char型變數不同,這兩個字定義的並不是變數,而作為特殊功能暫存器的引用,或許可以叫做別名。微控制器標頭檔案中...
sfr與sbit的理解,及微控制器中斷
sfr special function register 定義的變數是將微控制器的特殊功能暫存器賦值給乙個變數,在程式設計中就能引用這個暫存器。sbit 是對暫存器進行位操作,可對暫存器中某位置1或者清0.stc圖中這麼多特殊功能暫存器之後可能會產生一些困擾,我們用sfr p0 0 80表示p0,...