在單片機中有一些獨立的存儲單元是用來控制這些器件的,被稱之為特殊功能寄存器(SFR)。
<特殊功能寄存器地址映象表(一)>
<特殊功能寄存器地址映象表(二)>
<特殊功能寄存器地址映象表(三)>
幾個常用的SFR
1、ACC:累加器,常常用A表示。這是個什麼東西,可不能從名字上理解,它是一個寄存器,而不是一個做加法的東西,為什麼給它這麼一個名字呢?或許是因為在運算器做運算時其中一個數一定是在ACC中的緣故吧。它的名字特殊,身份也特殊,稍後我們將學到指令,能發現,所有的運算類指令都離不開它。
2、B:一個寄存器。在做乘、除法時放乘數或除數,不做乘除法時,隨你怎麼用。
3、PSW:程序狀態字。這是一個很重要的東西,裡面放了CPU工作時的很多狀態,藉此,我們能了解CPU的當前狀態,並作出對應的處理。它的各位功能請看下表。
PSW也稱為標誌寄存器,了解這個對於了解單片機原理非常的重要,存放各有關標誌。其結構和定義如下:
sfr各位的用途
(1)CY:進位標誌。用於表示Acc.7有否向更高位進位。8051中的運算器是一種8位的運算器,我們知道,8位運算器只能表示到0-255,如果做加法的話,兩數相加可能會超過255,這樣最高位就會丟失,造成運算的錯誤,怎麼辦?最高位就進到這裡來。這樣就沒事了。
例:78H+97H(01111000+10010111)
(2)AC:輔助進位標誌也叫半進位標誌。 用於表示Acc.3有否向Acc.4進位
例:57H+3AH(01010111+00111010)
(3)F0:用戶標誌位,由我們(編程人員)決定什麼時候用,什麼時候不用。
(4)RS1、RS0:工作寄存器組選擇位。這個我們已知了。
RS1、RS0 = 00 —— 0區(00H~07H)
RS1、RS0 = 01 —— 1區(08H~0FH)
RS1、RS0 = 10 —— 2區(10H~17H)
RS1、RS0 = 11 —— 3區(18H~1FH)
(5)0V:溢出標誌位。 表示Acc在有符號數算術運算中的溢出,什麼是溢出我們稍後再談吧。
(6)P:奇偶校驗位:它用來表示ALU運算結果中二進位數位「1」的個數的奇偶性。若為奇數,則P=1,不然為0。
例:某運算結果是78H(01111000),顯然1的個數為偶數,所以P=0。
4、DPTR(DPH、DPL):數據指針,能用它來訪問外部數據存儲器中的任一單元,如果不用,也能作為通用寄存器來用,由我們自已決定如何使用。16位,由兩個8位寄存器DPH、DPL組成。主要用於存放一個16位地址,作為訪問外部存儲器(外RAM和ROM)的地址指針。
5、P0、P1、P2、P3:這個我們已經知道,是四個並行輸入/輸出口的寄存器。它裡面的內容對應著管腳的輸出。
6、SP:堆棧指針。(專用於指出堆棧頂部數據的地址。)
【學習建議】其實並不需要把上面的這些東西都死記硬背在腦子裡面,這是很難的,我們只需要理解工作原理,一次看不懂就要多看幾次,等到要寫程序的時候,我們再把這些表格拿出來查閱。
以上所有信息僅作為學習交流使用,不作為任何學習和商業標準。若您對文中任何信息有異議,歡迎隨時提出,謝謝!
關於雲創硬見
雲創硬見是國內最具特色的電子工程師社區,融合了行業資訊、社群互動、培訓學習、活動交流、設計與製造分包等服務,以開放式硬體創新技術交流和培訓服務為核心,連接了超過30萬工程師和產業鏈上下遊企業,聚焦電子行業的科技創新,聚合最值得關注的產業鏈資源, 致力於為百萬工程師和創新創業型企業打造一站式公共設計與製造服務平臺。