
嵌入式系統 - 暫存器組/堆疊
8051 微控制器共有 128 位元組的 RAM。我們將討論這 128 位元組 RAM 的分配,並檢查它們作為堆疊和暫存器的使用情況。
8051 中 RAM 記憶體空間分配
8051 內部的 128 位元組 RAM 被分配地址 00 到 7FH。它們可以直接作為記憶體位置訪問,並被分成三個不同的組,如下所示:
從 00H 到 1FH 的 32 位元組位置留給暫存器組和堆疊。
從 20H 到 2FH 的 16 位元組位置留給位定址讀/寫記憶體。
從 30H 到 7FH 的 80 位元組位置用於讀寫儲存;它被稱為暫存區。這 80 個位置的 RAM 被 8051 程式設計師廣泛用於儲存資料和引數。

8051 中的暫存器組
總共 32 位元組的 RAM 留給暫存器組和堆疊。這 32 位元組被分成四個暫存器組,每個組有 8 個暫存器,R0-R7。RAM 位置 0 到 7 留給 R0-R7 的組 0,其中 R0 是 RAM 位置 0,R1 是 RAM 位置 1,R2 是位置 2,依此類推,直到記憶體位置 7,它屬於組 0 的 R7。
暫存器 R0-R7 的第二個組從 RAM 位置 08 開始,到位置 OFH。R0-R7 的第三個組從記憶體位置 10H 開始,到位置 17H。最後,RAM 位置 18H 到 1FH 留給 R0-R7 的第四個組。
預設暫存器組
如果 RAM 位置 00-1F 留給四個暫存器組,那麼當 8051 上電時,我們能夠訪問哪個 R0-R7 暫存器組?答案是暫存器組 0;也就是說,在程式設計 8051 時,RAM 位置 0 到 7 使用 R0 到 R7 的名稱進行訪問。因為用 R0 到 R7 等名稱引用這些 RAM 位置比用它們的記憶體位置引用更容易。
如何切換暫存器組
當 8051 上電時,暫存器組 0 是預設的。我們可以使用 PSW 暫存器切換到其他組。PSW 的 D4 和 D3 位用於選擇所需的暫存器組,因為它們可以透過位定址指令 SETB 和 CLR 進行訪問。例如,“SETB PSW.3”將設定 PSW.3 = 1 並選擇暫存器組 1。
RS1 | RS2 | 選擇的組 |
---|---|---|
0 | 0 | 組 0 |
0 | 1 | 組 1 |
1 | 0 | 組 2 |
1 | 1 | 組 3 |
堆疊及其操作
8051 中的堆疊
堆疊是 CPU 使用的 RAM 的一部分,用於臨時儲存資訊,例如資料或記憶體地址。考慮到暫存器的數量有限,CPU 需要此儲存區域。
如何訪問堆疊
由於堆疊是 RAM 的一部分,因此 CPU 內部有暫存器指向它。用於訪問堆疊的暫存器稱為堆疊指標暫存器。8051 中的堆疊指標為 8 位寬,其值可以為 00 到 FFH。當 8051 初始化時,SP 暫存器包含值 07H。這意味著 RAM 位置 08 是堆疊使用的第一個位置。將 CPU 暫存器儲存到堆疊中的操作稱為PUSH,從堆疊中獲取內容返回到 CPU 暫存器稱為POP。
壓入堆疊
在 8051 中,堆疊指標 (SP) 指向堆疊的最後一個使用位置。當資料被壓入堆疊時,堆疊指標 (SP) 增加 1。當執行 PUSH 時,暫存器的內容儲存在堆疊中,SP 增加 1。要將暫存器壓入堆疊,必須使用它們的 RAM 地址。例如,指令“PUSH 1”將暫存器 R1 壓入堆疊。
彈出堆疊
將堆疊的內容彈出回給定暫存器與壓入過程相反。對於每個彈出操作,堆疊的頂部位元組都被複制到指令指定的暫存器中,並且堆疊指標遞減一次。