[翻译]嵌入式系统

您所在的位置:网站首页 不支持的系统寄存器LB9036 [翻译]嵌入式系统

[翻译]嵌入式系统

2024-07-12 17:25| 来源: 网络整理| 查看: 265

一、蹩脚的译者的话

笔者最近在读用于51单片机的实时操作系统RTX51-Tiny的用户文档《RTX51 Tiny User’s Guide》时,见文档内多次提到了 “register bank”这个字眼,想了想应该就是刚学51时接触的寄存器组了。以下引用说明了寄存器组的主要用处:

通常的用法是,0组寄存器(PSW中RS0/RS1 = 0),用于程序。其它三组寄存器可用于中断等特殊用途,那样可以减少中断的压栈等现场保护的开销。

https://zhidao.baidu.com/question/511829486.html

如果程序中有多个中断源,可以考虑使用多个寄存器组,可以减少系统在中断时的开销!

https://zhidao.baidu.com/question/367905652901116324.html

在查资料过程中,发现了一篇英文文献对register bank做了很好的解释说明,为了加强自己的理解,于是笔者尝试翻译了下原文,原文链接为:https://www.tutorialspoint.com/embedded_systems/es_register_bank.htm,英语好的同学阅读原文去吧,别看我这蹩脚的译文了,哈哈。

二、原文译文

8051微控制器总共含有128字节的随机读写内存(RAM)。接下来我们将探讨这128字节随机读写内存的分配方式并且列举它们作为栈(stack)和寄存器(register)时的用法。

【8051的随机读写内存分布】

8051的128字节片内随机读写内存分布于地址00h到7Fh。它们被分为如下的三个不同部分,并且可以作为内存区域被直接访问:

从地址00h到1Fh的32字节区域被划拨为寄存器组和栈。从地址20h到2Fh的16字节区域被划拨为可位寻址区(bit-addressable)。从地址30h到7Fh的80字节区域作为可读写存储区域使用,其称之为高速暂存区(scratch pad)。这80字节经常被8051的程序用于存储数据与各种参数。 片内随机读写内存区域划分方式

 

【8051的寄存器组】

总计32字节的随机读写内存被划分为了寄存器组(register bank)与栈。这32字节被分为了4个寄存器组,其中每一个内含8个寄存器,称为R0~R7。从地址00h到07h的地址区域被划分为寄存器组0(bank 0),内含寄存器R0~R7,其中R0位于地址00h、R1位于地址01h、R2位于地址02h、以此类推下去,直到存储寄存器R7的地址07h。

第二组寄存器组(译者注:即寄存器组1,bank 1)内含的R0~R7分布于地址08h到0Fh。第三组寄存器组 (译者注:即寄存器组2 ,bank 2) 内含的R0~R7分布于地址10h到17h。最后,第四个寄存器组 (译者注:即寄存器组3 ,bank 3) 分布于地址18h到1Fh。

【默认寄存器组】

既然随机读写内存区域的地址00h~1Fh被划分为了4个寄存器组,那么8051刚上电时会2使用哪一组寄存器组中的R0~R7呢?答案是寄存器组0;也就是说,当我们为8051编写程序时,随机读写内存中的地址00h到地址07h被命名为R0~R7,并且可以通过访问R0~R7的方式对相应地址进行访问(译者注:即编写程序时,当我们想访问地址00h时,直接在汇编代码里敲R0就可以啦,当然处理中断时情况会有所变化,感兴趣的可以去查询相关资料)。相比于直接通过它们的内存地址进行访问,通过R0到R7进行访问显然是更加直观的。

【如何切换寄存器组】

寄存器组0是8051上电时默认使用的寄存器组。我们可以通过PSW寄存器来切换到其他寄存器组。PSW寄存器的位4和位3用于切换不同寄存器组,由于它们可以通过位寻址指令SETB与CLR访问,举例来说,“SETB PSW.3”将会将PSW.3设置为1(译者注:默认PSW寄存器的位4为0,PSW.3表示PSW寄存器的位3)并且选择寄存器组1。

RS1(PWS寄存器位4)RS2 (PWS寄存器位3)寄存器组选择00寄存器组001寄存器组110寄存器组211寄存器组3 【栈和它的操作】

[8051的栈]

栈是CPU用来临时存储诸如:数据、内存地址等信息的一片区域。鉴于CPU有限的寄存器数量,其需要这样一片存储区域用于暂时存储信息。

[栈是如何被访问的]

由于栈是随机读写内存的一片区域,因此CPU内有一个寄存器专门用来指向栈的地址以方便访问,这个寄存器被称为栈指针寄存器(stack pointer register)。8051的栈指针寄存器(以下简称SP寄存器)有8位位宽,因此可以存储的地址范围为00h到FFh。当8051初始化时,SP寄存器中的值被设置为07h。这意味着随机读写内存中处于地址08h的位置是栈的起始位置(译者注:也就是说,栈底位于08h,栈的第一个数据从08h开始存储)。向栈中存储CPU的某个寄存器值被称为“入栈”(Push),从栈中取出值并写回CPU的寄存器称为“出栈”(Pop)。

[入栈操作]

在8051中,栈指针(stack pointer,SP)(译者注:其实和栈指针寄存器是一个东西)指向栈中最后使用的区域(译者注:也就是栈顶)。当数据入栈时,栈指针加1。当入栈操作发生,寄存器中的内容被存储到栈并且栈指针加1。在将寄存器们入栈时,我们必须使用它们在随机读写内存中的地址。举个例子,“PUSH 1”这条指令可以将寄存器R1中的内容入栈。

[出栈操作]

将栈中的内容放回原先对应的寄存器是入栈操作的反向操作。伴随着每一次出栈操作,栈顶的字节被复制到指令指定的寄存器,与此同时栈指针自减1一次。

三、关键字中英对照

microcontroller 微控制器 RAM 随机读写内存 bit-addressable 可位寻址 scratch pad 高速暂存区 register bank 寄存器组 stack pointer register 栈指针寄存器 Push 入栈 Pop 出栈 stack pointer 栈指针



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3