8051微控制器總共有128位元組的RAM。我們將討論這128位元組RAM的分配,並檢查它們作爲堆棧和寄存器的使用。
RAM Memory Space Allocation in 8051
8051內部128位元組的RAM被分配到地址00到7FH。它們可以作爲內存位置直接訪問,並分爲三個不同的組,如下所示;
從00H到1FH的32位元組被預留給寄存器組和堆棧。
從20H到2FH位置的16位元組被預留給位尋址讀/寫存儲器。
從30H到7FH位置的80位元組用於讀寫存儲;它被稱爲記事本。這80位RAM被廣泛應用於8051編程器存儲數據和參數。
Register Banks in 8051
總共爲寄存器組和堆棧留出32位元組的RAM。這32個字節被分成4個寄存器組,每個寄存器組有8個寄存器R0–R7。從0到7的RAM位置預留給R0–R7的第0列,其中R0是RAM位置0,R1是RAM位置1,R2是位置2,依此類推,直到屬於第0列的R7的存儲器位置7。
寄存器R0–R7的第二組從RAM位置08開始,到h位置。第三組R0–R7從內存位置10H開始,到位置17H。最後,爲第四組R0–R7預留內存位置18H到1FH。
Default Register Bank
如果爲四個寄存器組預留了RAM位置00–1F,那麼當8051通電時,我們可以訪問R0–R7的哪個寄存器組?答案是寄存器組0;也就是說,在編程8051時,可以使用名稱R0到R7訪問0到7之間的RAM位置。因爲用諸如R0到R7之類的名稱來引用這些RAM位置比用它們的內存位置來引用要容易得多。
How to Switch Register Banks
當8051通電時,寄存器組0是默認值。我們可以使用PSW寄存器切換到其他銀行。PSW的D4和D3位用於選擇所需的寄存器組,因爲它們可以由位可尋址指令SETB和CLR訪問。例如,「SETB PSW.3」將設置PSW.3=1並選擇銀行寄存器1。
RS1 | RS2 | Bank Selected |
---|---|---|
0 | 0 | Bank0 |
0 | 1 | Bank1 |
1 | 0 | Bank2 |
1 | 1 | Bank3 |
Stack and its Operations
Stack in the 8051
堆棧是CPU用來臨時存儲數據或內存地址等信息的RAM的一部分。考慮到寄存器的數量有限,CPU需要這個存儲區域。
How Stacks are Accessed
由於堆棧是RAM的一部分,CPU內部有寄存器指向它。用於訪問堆棧的寄存器稱爲堆棧指針寄存器。8051中的堆棧指針寬8位,可以從00到FFH。當8051初始化時,SP寄存器包含值07H。這意味著RAM位置08是用於堆棧的第一個位置。CPU寄存器在堆棧中的存儲操作稱爲aPUSH,將堆棧中的內容返回到CPU寄存器中稱爲aPOP。
Pushing into the Stack
在8051中,堆棧指針(SP)指向堆棧的最後使用位置。當數據被推送到堆棧上時,堆棧指針(SP)將遞增1。當執行PUSH時,寄存器的內容保存在堆棧中,SP遞增1。要將寄存器推送到堆棧上,我們必須使用它們的RAM地址。例如,指令「PUSH 1」將寄存器R1推送到堆棧上。
Popping from the Stack
將堆棧的內容彈出到給定的寄存器中與推送過程相反。每次pop操作時,堆棧的頂字節都會複製到指令指定的寄存器中,堆棧指針也會減少一次。