sfr (special function register)定義的變數是將微控制器的特殊功能暫存器賦值給乙個變數,在程式設計中就能引用這個暫存器。
sbit 是對暫存器進行位操作,可對暫存器中某位置1或者清0.
stc圖中這麼多特殊功能暫存器之後可能會產生一些困擾,我們用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。
中斷 概論。
void int0()interrupt 0 using 1
interrupt 0 指明是外部中斷0;
interrupt 1 指明是定時器中斷0;
interrupt 2 指明是外部中斷1;
interrupt 3 指明是定時器中斷1;
interrupt 4 指明是序列口中斷;
using 0 是第0組暫存器;
using 1 是第1組暫存器;
using 2 是第2組暫存器;
using 3 是第3組暫存器;
51微控制器內的暫存器是r0--r7(不是r0-r3)
r0-r7在資料儲存器裡的實際位址是由特殊功能暫存器psw裡的rs1、rs0位決定的。
using 0時設定 rs1=0,rs0 =0,用第0組暫存器,r0--r7的在資料儲存區里的實際位址是00h-07h。r0(00h)....r7(07h)
using 1時設定 rs1=0,rs0 =1,用第1組暫存器,r0--r7的在資料儲存區里的實際位址是00h-07h。r0(08h)....r7(0fh)
using 2時設定 rs1=1,rs0 =0,用第2組暫存器,r0--r7的在資料儲存區里的實際位址是08h-0fh。r0(10h)....r7(17h)
using 3時設定 rs1=1,rs0 =1,用第3組暫存器,r0--r7的在資料儲存區里的實際位址是00h-07h。r0(18h)....r7(1fh)
序列口傳輸過程是一位一位的二進位制進行傳輸,傳輸完乙個位元組才會產生中斷或者事件。所以從程式設計角度上看,是一整個字元進行傳輸的。
從物理訊號層面看,還是一位一位傳輸的。
187500波特率 每位元組需要0.043毫秒
115200波特率 每位元組需要0.069毫秒
19200波特率 每位元組需要0.417毫秒
9600波特率 每位元組需要0.83毫秒
微控制器sfr和sbit關鍵字,詳解
sfr用於將乙個微控制器的特殊功能暫存器 special function register 賦值給乙個變數,這樣在後面的程式中就可以中這個變數指引 refer to 該暫存器。sbit與sfr用法類似,只是sbit是位操作,用於將某個sfr中具體位賦值給乙個變數,這樣後面程式就可用通過該變數為該位...
微控制器關鍵字sfr和sbit的理解
在微控制器c語言程式設計中,擴充了兩個關鍵字sfr和sbit。sfr special function register特殊功能暫存器的縮寫 sbit 特殊功能暫存器位 與定義一般的int char型變數不同,這兩個字定義的並不是變數,而作為特殊功能暫存器的引用,或許可以叫做別名。微控制器標頭檔案中...
微控制器關鍵字sfr和sbit的理解
在微控制器c語言程式設計中,擴充了兩個關鍵字sfr和sbit。sfr special function register特殊功能暫存器的縮寫 sbit 特殊功能暫存器位 與定義一般的int char型變數不同,這兩個字定義的並不是變數,而作為特殊功能暫存器的引用,或許可以叫做別名。微控制器標頭檔案中...