📜  嵌入式系统-注册银行/堆栈

📅  最后修改于: 2021-01-07 05:47:56             🧑  作者: Mango


8051微控制器总共有128个字节的RAM。我们将讨论这128个字节的RAM的分配,并检查它们作为堆栈和寄存器的用法。

8051中的RAM内存空间分配

8051内部的128个RAM字节分配了地址00到7FH。它们可以作为存储位置直接访问,并分为以下三个不同的组:

  • 从00H到1FH位置保留32个字节用于寄存器组和堆栈。

  • 从20H到2FH位置保留16个字节用于位可寻址的读/写存储器。

  • 从30H到7FH位置的80个字节用于读写存储;它被称为便笺本。这80个位置的RAM被8051程序员广泛用于存储数据和参数。

ROM空间分配

在8051中注册银行

总共为寄存器组和堆栈预留了32个字节的RAM。这32个字节分为四个寄存器组,其中每个组有8个寄存器R0–R7。为R0–R7的存储区0预留了0到7的RAM位置,其中R0是RAM位置0,R1是RAM位置1,R2是位置2,依此类推,直到属于存储区R7的存储位置7 0。

寄存器R0–R7的第二组从RAM位置08开始,并到达OFH位置。 R0–R7的第三个存储区从内存位置10H开始,然后转到位置17H。最后,将RAM地址18H至1FH留给R0–R7的第四组。

默认注册银行

如果为四个寄存器组预留了RAM位置00–1F,那么8051上电时我们可以访问哪个寄存器组R0–R7?答案是寄存器组0;也就是说,在对8051进行编程时,可以使用名称R0至R7访问0至7的RAM位置。因为用诸如R0至R7之类的名称而不是通过它们的存储位置来引用这些RAM位置要容易得多。

如何切换注册银行

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

堆栈及其操作

堆叠在8051中

堆栈是RAM的一部分,CPU用来临时存储诸如数据或内存地址之类的信息。考虑到寄存器数量有限,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压入堆栈。

从堆栈中弹出

将堆栈的内容弹出回给定的寄存器与压入过程相反。每次弹出操作时,堆栈的最高字节将被复制到指令指定的寄存器中,并且堆栈指针将递减一次。