特殊功能寄存器(SFR)詳解 ——以8051單片機為例

51/52系列單片機片內有21/26個特殊功能寄存器。特殊功能寄存器(SFR,Special Function Register),又稱專用寄存器,位於80H~FFH,但僅有21個字節(MCS-51系列)或26個字節(MCS-52子系列)作為SFR離散分佈在這128個字節范圍內,每個字節對應一個SFR。其餘字節無定義,用戶不能對這些單元進行讀/寫操作。

概覽

26個SFR中,有12個的地址可被8整除,支持位尋址(bit-addressable)。

註:後 5 個帶*的寄存器與定時器/計數器 2 有關,僅在 52 子系列芯片中存在。

特殊功能寄存器反映瞭單片機的狀態,是單片機的狀態及控制字寄存器。可分為兩類:

  • 芯片內部功能的控制用寄存器:運算部件寄存器A、B、PSW、堆棧指針SP、數據指針DPTR、各種定時/計數器控制、中斷控制、串行口控制等;
  • 與芯片引腳有關的寄存器:P0、P1、P2、P3,它們實際上是4個鎖存器,每個鎖存器再附加上相應的一個輸出驅動器和一個輸入緩沖器就構成瞭一個並行口。

1. 累加器ACC

Accumulator Register,應用最廣泛的專用寄存器。許多單操作數指令的操作數、雙操作數指令的一個操作數取自累加器。加、減、乘、除算術運算指令的結果都存放在累加器A或寄存器B中。累加器ACC的助記符是A,當對累加器的位進行操作時,常用符號是ACC,比如累加器D0位是“ACC.0”。

2. 寄存器B

B Register,用於乘除運算或作為一般寄存器。

  • 乘:兩個操作數一個是累加器A,另一個必須是寄存器B,結果存在A和B中;
  • 除:被除數是累加器A,除數是寄存器B,商存在A中,餘數存在B中。

3. 程序狀態字PSW

Program State Word,存放著當前ALU的操作狀態特征,其內部定義如下表。

4. 堆棧及堆棧指針SP

Stack Pointer,堆棧的特點是“先進後出”,是為程序調用和中斷操作而設立的,主要是保護斷點和保護現場。單片機中,CPU無論是執行子程序調用操作還是執行中斷操作,最終都要返回,因此需預先把主程序的被中斷的地方(稱為斷點)保護起來,為正確返回做準備,實現保護現場的功能。為使CPU能進行多級中斷嵌套及多重子程序調用,堆棧必須有足夠容量。

堆棧指針SP,就是棧頂的存儲單元地址。當堆棧無數據時,棧頂地址與棧底地址重合。51單片機的堆棧指針SP為8位寄存器,系統復位後,SP初值為07H,實際應用中通常根據需要在主程序開始處對堆棧指針SP進行初始化,一般在片內RAM的30H~7FH區域中開辟堆棧區,一般將SP設置為60H。

堆棧有向上生長型和向下生長型。MCS-51單片機的堆棧結構屬於向上生長型,遵循“先加後壓”規則:入棧時,先SP加1,然後數據寫入棧;出棧時,先讀出數據,再SP減1。

堆棧的使用方式有兩種:

  • 自動方式,在調用子程序或斷點時,斷點地址自動進入棧,程序返回時,斷點地址再自動彈回PC,不需要用戶幹涉。
  • 指令方式,使用專用的堆棧操作指令進行入、出棧操作。例如保護現場、恢復現場。需要保護的數據單元量由用戶設定。

5. 數據指針DPTR

Data Pointer,既可是一個16位專用寄存器(DPTR),有16位數加“1”功能;也可拆開作為兩個8位寄存器(高位字節寄存器DPH、低位字節寄存器DPL)。DPTR是繼程序計數器(PC)以外的第二個16位寄存器,主要用途是保存16位地址信息,常用於基址加變址間接寄存器尋址方式使用,尋址片外64KB的數據存儲器或程序存儲器空間。

7. 端口寄存器P0~P3

專用寄存器P0~P3分別是I/O端口P0~P3的8位鎖存器,均為可位尋址寄存器。

15. 定時/計數器TL0~TH1

51單片機有兩個16位定時/計數器T0和T1,52比51多一個16位定時/計數器T2。它們都是由兩個獨立的8位寄存器TH和TL組成的16位寄存器。

11. 中斷允許寄存器IE

Interrupt Enable Register,字節地址為A8H。每一位對應不同的中斷源,可設定為“允許(1)”或“禁止(0)”中斷。單片機復位後會被清0。欲使某中斷源允許中斷,設置IE對應位的同時還必須設置IE中的最高位EA,使EA=1(CPU開放中斷)。EA相當於中斷允許的“總開關”。

12. 中斷優先級寄存器IP

Interrupt Priority Register,字節地址為B8H。每一位對應不同的中斷源,其復位清“0”會把對應中斷源設置為低優先級中斷;置“1”將把對應中斷源設置為高優先級。例如要使T0中斷的優先級高於外部中斷請求0中斷,可將PX0清“0”、PTO置“1”。單片機復位後會被清0。

13. 定時器工作方式寄存器TMOD

Timer Mode,D0~D3管理T0,D4~D7管理T1。

14. 定時器控制寄存器TCON

Timer Control Register,屬於中斷標志位寄存器。字節地址為88H,主要用來控制2個定時/計數器溢出中斷標志及2個外部中斷INT0和INT1請求標志。

19. 串行口控制寄存器SCON

Serial Control Register,屬於中斷標志位寄存器。字節地址為98H。與中斷相關是SCON的低2位,用來鎖存串行口的發送(Transmit)中斷和接收(Receive)中斷標志。

20. 串行數據寄存器SBUF

Serial Buffer,用於串行通信,存放發送和接收數據。邏輯上是一個寄存器,物理上是兩個寄存器:發送緩沖寄存器、接收緩沖寄存器,使用同一個邏輯地址,寫入時SBUF指向發送數據緩沖器、讀入時SBUF取自接收緩沖寄存器。

串行口對外有兩條獨立的收、發信號線:RXD和TXD,可以同時發送和接收數據,實現全雙工傳送。例:

21. 電源控制寄存器PCON

Power Control Register,電源控制及波特率選擇寄存器,字節地址為87H。

赞(0)