1、第四章 暫存器與資料記憶體4-1 累加器累加器(Accumulator)一般以 A 或 Acc 簡稱,是使用頻率最高的暫存器,許多算數運算、邏輯運算及資料搬移等工作,都需要藉由累加器來完成。4-2 工作暫存器在 8051 中共有 8 個 8 位元(bits)工作暫存器,分別為R0、R1、R2、R3、R4、 R5、R6 及 R7。這些工作暫存器可用以輔助累加器在運算上的不足,如儲存即將被處理的資料,或已完成的結果及迴圈數值控制等。由於在撰寫較複雜程式,尤其是呼叫副程式時,為了避免工作暫存器之內容遭到破壞,在 8051 中提供四個暫存器庫,分別為 RB0、RB1、RB 及 RB3,每一個暫存器庫均
2、有個 8 位元工作暫存器,並可經由工作暫存器 R0R7 來存取,但程式執行中只能選擇四個暫存器庫中的一個暫存器來使用,而其選擇方法則可透過設定 RS1 與 RS0 此兩位元來選擇,其設定如下:RS1 RS0 暫存器庫 位址0 0 RB0 00H07H0 1 RB1 08H0FH1 0 RB2 10H17H1 1 RB3 18H1FH當 8051 選擇使用 RB0 時,程式中存取 R0R7 暫存器的值,實際上是在存取資料記憶體位址 00H07H 的內容;而使用 RB1 時,程式中存取 R0R7 暫存器的值,實際上是在存取資料記憶體位址 08H0FH 的內容;而使用 RB2 時,程式中存取 R0R
3、7 暫存器的值,實際上是在存取資料記憶體位址 10H17H的內容;而使用 RB3 時,程式中存取 R0R7 暫存器的值,實際上是在存取資料記憶體位址 18H1FH 的內容。所以在複雜程式中,主程式與副程式可分配使用不同暫存器庫,即可避免暫存器的值被破壞。4-3 輸出 /輸入埠暫存器8051 具有 4 個 8 位元(bits)的輸出輸入埠,經由這四個輸出輸入埠與外界進行資料交換因此在 8051 內部用個暫存器來記錄輸出/輸入接腳的狀態,分別為資料記憶體 80H、90H、A0H、B0H 等四個位元組 (byte),並一輸出/輸入埠分別命名為 P0、P1、P2 及 P3。當軟體程式對輸出輸入埠 P0
4、3 作輸出/輸入的動作,即是對 80、90、AH 及 0 等四個位元組作寫入/讀出的動作。4-4 資料記憶體8051 的記憶體可分為兩大部份,一是程式記憶體,即是使用者撰寫軟體程式的存放記憶體區塊;另一是資料記憶體,是用以存放程式執行結果所使用的記憶體。而在 8051 中暫存器與資料記憶體則是結合在一起,均存放在資料記憶體中,及結構如下圖所示:SFR 的內部結構FFH 直接定址記憶體為特殊功能暫存器(Special Function Register,即 SFR)所使用。80H 但不可作為一般資料記憶體使用,其內容如下圖所示。7FH 可直接或間接定址記憶體00HF8 FFF0 B F7E8 E
5、FE0 ACC E7D8 DFD0 PSW D7C8 CFC0 C7B8 IP BFB0 P3 B7A8 IE AFA0 P2 A798 SCON SBUF 9F90 P1 9788 TCON TMOD TLO TL1 TH0 TH1 8F80 P0 SP DPL DPH PCON 87此行記憶體位元組可做位元定址。在 SFR 內部結構圖中可以發現累加器 Acc、四個輸出 /輸入暫存器 P0、P1 、P2及 P3。其他暫存器的功能簡介如下:B:用於乘、除法中所使用到之暫存器。PSW(Program Status Word):程式狀態字元暫存器。IP(Interrupt Priority Reg
6、ister):中斷優先暫存器。IE(Interrupt Enable Register):中斷致能暫存器。SCON(Serial Port Control Register):串列埠控制暫存器。SBUF( Serial Port Buffer):串列埠資料緩衝器。TCON(Timer/Counter Control Register):計時/計數控制暫存器。TMOD(Timer/Counter Mode Control Register):計時/計數模式控制暫存器。TL0:Timer 0 16 位元計時 /計數直之低 8 位元TL1:Timer 1 16 位元計時 /計數直之低 8 位元TH0
7、: Timer 0 16 位元計時 /計數直之高 8 位元TH1: Timer 1 16 位元計時 /計數直之高 8 位元SP(Stack Pointer):堆疊指標暫存器。DPL:DPTR (Data Pointer)資料指標暫存器 16 位元值之低 8 位元值DPH:DPTR(Data Pointer)資料指標暫存器 16 位元值之高 8 位元值PCON(Power Control Register):電源控制暫存器。SFR 內各暫存器的值在 8051 重置(Reset )後,會自動設如下:暫存器 二進位表示值*Acc 00000000*B 00000000*PSW 00000000SP
8、0000011100000000DPTRDPHDPL 00000000*P0 11111111*P1 11111111*P2 11111111*P3 11111111IP XXXX0000IE 0XX00000TMOD 00000000*TCOM 00000000TH0 00000000TL0 00000000TH1 00000000TL1 00000000*SCON 00000000SBUF XXXXXXXXHMOS 0XXXXXXXPCONCHMOS 0XXX0000X:未定*:可位元定址另外在資料記憶體中,亦可以位元定址 00H7 共 248 個位元位址,其在記憶中之位址如下圖:F0H
9、F7 F6 F5 F4 F3 F2 F1 F0 BE0H E7 E6 E5 E4 E3 E2 E1 E0 AccD0H CYD7 ACD6 F0D5 RS1D4 RS0D3 0VD2 D1 PD0 PSWB8H PSBC PT1BB PX1BA PT0B9 PX0B8 IPB0H B7 B6 B5 B4 B3 B2 B1 B0 P3A8H AF ESAC ET1AB EX1AA ET0A9 EX0A8 IEA0H A7 A6 A5 A4 A3 A2 A1 A0 P298H SM09F SM19E SM29D REN9C TB89B RB89A TI99 RI98 SCON90H 97 96 9
10、5 94 93 92 91 90 P188H TF18F TR18E TF08D TR08C IE18B IT18A IE089 IT088 TCON80H 87 86 85 84 83 82 81 80 P07FH30H一般資料存放區或堆疊區2FH 7F 7E 7D 7C 7B 7A 79 782EH | |2DH | |2CH | |2BH | |2AH | |29H | |28H | |27H | |26H | |25H 2F 2824H 27 2023H 1F 1E 1D 1C 1B 1A 19 1822H 17 1021H 0F 0820H 07 06 05 04 03 02 01
11、00RB3RB2RB1RB0在上圖表中,最左側為可位元定址記憶體的位址;中間數字代表可畏原定址的位元位址,其中位元位址上之文字即為該位元的名稱;最右側為暫存器的名稱。在位原定址使用上,8051 提供具彈性的使用方法,例如:1. 將位址 20H 的第 0 Bit 設定為 1,可以寫成下面兩種方式:SETP 00H ;位元定址SETB 20H.0 ;第 20H 位元組的第 0 位元2. 將 P0 的第 3 Bit 清除為 0,可以寫成下面三種方式:CLR 83H ;位元位址CLR 80H.3 ;第 80H 位元組的第 3 位元CLR P0.3 ;P0 暫存暫存器的第 3 位元3. 將 IT0 位元的值反相,可以寫成下面四種方式:CPL 88H ;位元位址 CPL 88H.0 ;第 88 位元組的第 0 位元CPL IT0 ;位元名稱CPL TCON.0;TCON 暫存器的第 0 位元