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

時間 2021-08-30 10:34:40

1樓:老友記愛學習

我是一名微控制器工程師,很多人都有類似的問題發生,其實弄懂一個sfr,其它的也就懂了,我已經用通俗易懂的方法把它寫在了一個貼子上,感興趣的可以瀏覽一下。

sfr到底是什麼:http://tieba.baidu.com/p/5004194830

2樓:匿名使用者

p0~p3、psw、acc等這些暫存器在sfr中的地址,是intel設計mcs-51微控制器時就定下的。後來許多廠家生產51微控制器時都沿用了這定義,以保證程式的相容性。

至於如下的暫存器

sfr clk_div = 0x97; //為stc微控制器定義,系統時鐘分頻

sfr p0m1 = 0x93;

sfr p0m0 = 0x94;

sfr p1m1 = 0x91;

sfr p1m0 = 0x92;

sfrp2m1 = 0x95;

sfrp2m0 = 0x96;

是stc生產的微控制器,因為加入了自己設計的功能選項,所以就增加了這些暫存器。

3樓:

地址是由微控制器硬體(晶片設計)決定的,前面的p0、p1等只是定義的名稱,代表該地址的暫存器,也可以用其他字串代替。

4樓:沁芳蕭然

對於sfr是固定的,這些地址是微控制器設計時定義的。

這些不需要自己去定義,加入相應的標頭檔案如reg51.h就可以了。在使用中可以直接使用。

也不用管這些地址是怎麼來的。

5樓:看x磺

sfr   1.sfr是special function register(特殊功能暫存器)的縮寫。   sfr是80c51微控制器中各功能部件對應的暫存器,用於存放相應功能部件的控制命令,狀態或資料。

它是80c51微控制器中最具有特殊的部分,現在所有80c51系列功能的增加和擴充套件幾乎都是通過增加特殊功能暫存器sfr來達到目的的。   對於80c51系列中的80c51,共定義了26個特殊功能暫存器。在80c52中,除了80c51的26個特殊功能暫存器,還增加了5個,共計31個。

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

6樓:墨汁諾

一、含義不同:

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個(帶星號的為特殊功能暫存器)。

7樓:俊馳_燕

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

8樓:匿名使用者

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

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

9樓:納蘭性急

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

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

這些只在c51中可用

10樓:吶喊狠明顯

相同點:

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是什麼意思,求通俗易懂的講解

11樓:匿名使用者

sfr是英文special function register是縮寫,中文意思是"特殊功能暫存器",用來記錄多項資料,以備cpu執行時取用,亦可讓使用者檢視,如程式指標(pc),堆疊指標(sp),累加器(acc)的內容,程式狀態字元(psw)等等。

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

墨汁諾 一 含義不同 bit位標量是c51編譯器的一種擴充資料型別,利用它可定義一個位標量,但不能定義位指標,也不能定義位陣列。它的值是一個二進位制位,不是0就是1,類似一些高階語言中的boolean型別中的true和false。sfr也是一種擴充資料型別,點用一個記憶體單元,值域為0 255。利用...

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

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

微控制器c語言中定義,微控制器C語言中 定義a1 P0 1 a2 P0 2 a8 P0 7 b P2 0 。a1 a8不斷隨機為1。

這樣實現 sbit p20 p2 0 char consum 0 char i,bitflag 0x01 for i 0 i 8 i if consum 3 p20 1 希望我的回答對你有幫助,有什麼問題歡迎一起 謝謝。 如果是c51微控制器 include void main 如果找完一次p0口後...