微控制器sfr和sbit有什麼區別

時間 2021-07-22 08:45:03

1樓:墨汁諾

一、含義不同:

bit位標量是c51編譯器的一種擴充資料型別,利用它可定義一個位標量,但不能定義位指標,也不能定義位陣列。它的值是一個二進位制位,不是0就是1,類似一些高階語言中的boolean型別中的true和false。

sfr也是一種擴充資料型別,點用一個記憶體單元,值域為0~255。利用它可以訪問51微控制器內部的所有特殊功能暫存器。

二、作用不同:

bit=1位而已。都是變數,編譯器在編譯過程中分配地址。除非指定,否則這個地址是隨機的。

這個地址是整個可定址空間,ram+flash+擴充套件空間。bit只有0和1兩種值,意義有點像windows下vc中的bool。

sbit是對應可位定址空間的一個位,可位定址區:20h~2fh。一旦用了sbi***=rege^6這樣的定義,這個sbit量就確定地址了。

sbit大部分是用在暫存器中的,方便對暫存器的某位進行操作的。

微控制器名詞

sfr是special function register特殊功能暫存器

sfr是80c51微控制器中各功能部件對應的暫存器,用於存放相應功能部件的控制命令,狀態或資料。它是80c51微控制器中最具有特殊的部分,所有80c51系列功能的增加和擴充套件幾乎都是通過增加特殊功能暫存器sfr來達到目的的。

對於80c51系列中的80c51,共定義了21個特殊功能暫存器。在80c52中,除了80c51的21個特殊功能暫存器,還增加了5個,共計26個(帶星號的為特殊功能暫存器)。

2樓:俊馳_燕

1.bit和sbit都是c51擴充套件的變數型別。 bit和int char之類的差不多,只不過char=8位, bit=1位而已。都是變數,編譯器在編譯過程中分配地址。

除非你指定,否則這個地址是隨機的。這個地址是整個可定址空間,ram+flash+擴充套件空間。bit只有0和1兩種值,意義有點像windows下vc中的bool。

sbit是對應可位定址空間的一個位,可位定址區:20h~2fh。一旦用了sbi *** = rege^6這樣的定義,這個sbit量就確定地址了。

sbit大部分是用在暫存器中的,方便對暫存器的某位進行操作的。

2.bit位標量 bit位標量是c51編譯器的一種擴充資料型別,利用它可定義一個位標量,但不能定義位指標,也不能定義位陣列。它的值是一個二進位制位,不是0就是1,類似一些高階語言中的boolean型別中的true和false。

3.sfr特殊功能暫存器 sfr也是一種擴充資料型別,點用一個記憶體單元,值域為0~255。利用它可以訪問51微控制器內部的所有特殊功能暫存器。如用sfr p1 = 0x90這一句定p1為p1埠在片內的暫存器,在後面的語句中我們用以用p1 = 255(對p1埠的所有引腳置高電平)之類的語句來操作特殊功能暫存器。

sfr p1 = 0x90; //定義p1 i/o 口,其地址90h sfr 關鍵定後面是一個要定義的名字,可任意選取,但要符合識別符號的命名規則,名字最好有一定的含義如p1 口可以用p1 為名,這樣程式會變的好讀好多.等號後面必須是常數,不允許有帶運算子的表示式,而且該常數必須在特殊功能暫存器的地址範圍之內(80h-ffh),具體可檢視附錄中的相關表. sfr 是定義8 位的特殊功能暫存器而sfr16 則是用來定義16 位特殊功能暫存器, 如8052 的t2 定時器,可以定義為:

sfr16 t2 = 0xcc; //這裡定義8052 定時器2,地址為t2l=cch,t2h=cdh

3樓:匿名使用者

在8位微控制器c語言程式設計中,sfr用來定義特殊功能暫存器,一般佔一個位元組,8位;sbit用來定義特殊功能暫存器中可以位定址的位,佔1位。

在51微控制器中,特殊功能暫存器只有16進位制地址尾數為0或者8,其包含的各個位才可以位定址。

4樓:納蘭性急

sbit 用來定義一個一位的指標。只是少了*號,不過51編譯器認識用sbit定義的變數用setb來操作

sfr用來定義一個八位的指標。只是少了*號,不過51編譯器認識用sfr定義的變數用mov來操作

這些只在c51中可用

5樓:吶喊狠明顯

相同點:

sbit是變數型別。sbit和bit都是c51擴充套件的變數型別。sfr是特殊功能暫存器,也是一種擴充資料型別。

不同點:

sfr:而sfr可以分配製定地址。sfr p1 = 0x90; //定義p1口,其地址90h。

sfr關鍵定後面是一個要定義的名字,可任意選取,但要符合識別符號的命名規則。等號後面必須是常數,不允許有帶運算子的表示式,而且該常數必須在特殊功能暫存器的地址範圍之內(80h-ffh)。

2、資料寬度和取值範圍不同:

sbit: sbit佔用1位資料寬度,sbit的取值範圍只有0和1兩種值。

sfr:用一個記憶體單元,8位資料寬度,值域為0~255

3、定義內容不同:

sbit:sbit是對應可位定址空間的一個位,可位定址區:20h~2fh。

一旦用了sbi *** = rege^6這樣的定義,這個sbit量就確定地址了。sbit大部分是用在暫存器中的,方便對暫存器的某位進行操作的。

sfr:sfr可以訪問51微控制器內部的所有特殊功能暫存器。如用sfr p1 = 0x90這一句定p1為p1埠在片內的暫存器,在後面的語句中就可以用p1 = 0xff,對p1埠的所有引腳置高電平)之類的語句來操作特殊功能暫存器。

微控制器 sfr定義,微控制器sfr和sbit有什麼區別

老友記愛學習 我是一名微控制器工程師,很多人都有類似的問題發生,其實弄懂一個sfr,其它的也就懂了,我已經用通俗易懂的方法把它寫在了一個貼子上,感興趣的可以瀏覽一下。sfr到底是什麼 http tieba.baidu.com p 5004194830 p0 p3 psw acc等這些暫存器在sfr中...

微控制器,sbit什麼意思,微控制器C程式設計sbit指令是什麼意思

sbit是c51擴充套件的變數型別,是定義特殊功能暫存器的位變數。典型應用是 sbit p0 1 p0 1 即定義p0 1為p0口的第2位,以便進行位操作。在c語言裡,如果直接寫p1.1,c編譯器並不能識別,而且p1.1也不是一個合法的c語言變數名,所以得給它另起一個名字,這裡起的名為p1 1,可是...

51微控制器stm32中sfr和define的定義問題求解

在stm32中有個韌體庫,已經把那些埠的位址全部儲存在乙個向量表中,你用的那個define就是內部已經定義好的。你本來就是使用的韌體庫就可以對埠的位址進行正確的埠操作,然而在51中,這些埠是不能這樣操作的,只能把它都當做特殊的暫存器給他附位址。 因為平台不同,c語言大的框架是相通的,但細節上有所區別...