文件下載

第四章 暫存器與資料記憶體

§4-1 累加器

    累加器(Accumulator)一般以AAcc簡稱,是使用頻率最高的暫存器,許多算數運算、邏輯運算及資料搬移等工作,都需要藉由累加器來完成。

 

§4-2 工作暫存器

    8051中共有88位元(bits)工作暫存器,分別為01234567。這些工作暫存器可用以輔助累加器在運算上的不足,如儲存即將被處理的資料,或已完成的結果及迴圈數值控制等。

    由於在撰寫較複雜程式尤其是呼叫副程式時,為了避免工作暫存器之內容遭到破壞,在8051中提供四個暫存器庫,分別為RBRB1RBRB3,每一個暫存器庫均有個8位元工作暫存器,並可經由工作暫存器07來存取,但程式執行中只能選擇四個暫存器庫中的一個暫存器來使用,而其選擇方法則可透過設定RS1RS0此兩位元來選擇:

                                      RS1   RS0  暫存器庫     位址

                                           0     0     RB0      00H~07H

                                           0     1     RB1      08H~0FH

                                           1     0     RB2      10H~17H

                                           1     1     RB3      18H~1FH

    當8051選擇使用RB0時,程式中存取R0R7暫存器的值,實際上是在存取資料記憶體位址00H07H的內容;而使用RB1時,程式中存取R0R7暫存器的值,實際上是在存取資料記憶體位址08H0FH的內容;而使用RB2時,程式中存取R0R7暫存器的值,實際上是在存取資料記憶體位址10H17H的內容;而使用RB3時,程式中存取R0R7暫存器的值,實際上是在存取資料記憶體位址18H1FH的內容。所以在複雜程式中,主程式與副程式可分配使用不同暫存器庫,即可避免暫存器的值被破壞。

 

§4-3 輸出/輸入埠暫存器

    8051具有48位元(bits)的輸出輸入埠,經由這四個輸出輸入埠與外界進行資料交換因此在8051內部用個暫存器來記錄輸出/輸入接腳的狀態,分別為資料記憶體80H90HA0HB0H等四個位元組(byte),並一輸出/輸入埠分別命名為P0P1P2P3。當軟體程式對輸出輸入埠P03作輸出/輸入的動作,即是對80H90HA0HB0H等四個位元組作寫入/讀出的動作。

 

§4-4 資料記憶體

    8051的記憶體可分為兩大部份,一是程式記憶體,即是使用者撰寫軟體程式的存放記憶體區塊;另一是資料記憶體,是用以存放程式執行結果所使用的記憶體。而在8051中暫存器與資料記憶體則是結合在一起,均存放在資料記憶體中,及結構如下圖所示:

SFR的內部結構

F8

 

 

 

 

 

 

 

 

FF

F0

B

 

 

 

 

 

 

 

F7

E8

 

 

 

 

 

 

 

 

EF

E0

ACC

 

 

 

 

 

 

 

E7

D8

 

 

 

 

 

 

 

 

DF

D0

PSW

 

 

 

 

 

 

 

D7

C8

 

 

 

 

 

 

 

 

CF

C0

 

 

 

 

 

 

 

 

C7

B8

IP

 

 

 

 

 

 

 

BF

B0

P3

 

 

 

 

 

 

 

B7

A8

IE

 

 

 

 

 

 

 

AF

A0

P2

 

 

 

 

 

 

 

A7

98

SCON

SBUF

 

 

 

 

 

 

9F

90

P1

 

 

 

 

 

 

 

97

88

TCON

TMOD

TLO

TL1

TH0

TH1

 

 

8F

80

P0

SP

DPL

 

 

 

 

PCON

87

                          此行記憶體位元組可做位元定址。

SFR內部結構圖中可以發現累加器Acc、四個輸出/輸入暫存器012P3

其他暫存器的功能簡介如下:

B:用於乘、除法中所使用到之暫存器。

PSWProgram Status Word):程式狀態字元暫存器。

IPInterrupt Priority Register):中斷優先暫存器。

IEInterrupt Enable Register):中斷致能暫存器。

SCONSerial Port Control Register):串列埠控制暫存器。

SBUFSerial Port Buffer):串列埠資料緩衝器。

TCONTimer/Counter Control Register):計時/計數控制暫存器。

TMODTimer/Counter Mode Control Register):計時/計數模式控制暫存器。

TL0Timer 0 16位元計時/計數直之低8位元

TL1Timer 1 16位元計時/計數直之低8位元

TH0Timer 0 16位元計時/計數直之高8位元

TH1Timer 1 16位元計時/計數直之高8位元

SPStack Pointer):堆疊指標暫存器。

DPLDPTRData Pointer)資料指標暫存器16位元值之低8位元值

DPHDPTRData Pointer)資料指標暫存器16位元值之高8位元值

PCONPower Control Register):電源控制暫存器。

SFR內各暫存器的值在8051重置(Reset)後,會自動設如下:

暫存器