8051软核处理器设计实战
上QQ阅读APP看书,第一时间看更新

1.5 8051的存储器架构

通过上面的讲述,我们大抵知道8051的重要元素,现在让我们回过头来,重新审视图1.1所示的8051处理器架构的基本模型图。我们在上面介绍的寄存器TMOD、TL0、IE、IP等位于数据池,但它们和数据池到底有什么关系,到底如何访问,才能让整个硬件运转起来?这就涉及对处理器地址的梳理。

8051的存储器架构如图1.3所示。这里的指令池还是一块完整的区域,它的地址位有1bit,因此它的地址范围是0000H~FFFFH。对于图中指令池的访问有两种情况:一种是读指令,除了跳转或中断以外,每执行完一条指令即取下一条指令;另外一种是该指令指定加载CODE区的某地址,如MOVC指令会访问到CODE区。

图1.3 8051的存储架构组织

由于不存在对CODE区写的情况,因此CODE区可用ROM(只读存储器)来实现。CODE区在理论上最大是64KB,读者在有了软核处理器后,可以将这个CODE区的ROM配置为小于64KB的大小。

CODE区比较简单,而数据池则复杂多了,下面我们将分门别类地对其进行介绍。

1.XDATA区

XDATA(externaldatamemoryspace)区位于图1.3最右边区域。访问它也需要提供16bit的地址,因此理论上它的最大空间是64KB,地址范围是0000H~FFFFH。XDATA表示外部数据存储空间,它一般映射在单片机芯片之外。在后面学习指令时可以知道,访问它需要使用MOVX类指令。

在进行8051的软核处理器设计时,已经不再分单片机片内和片外存储空间了,因此如果需要扩大存储空间,XDATA区也可以如同DATA区一样被访问。

2.SFR区

SFR(specialfunctionregisters)指的是存放特殊控制寄存器的区域。它的地址范围是80H~FFH。图1.4是它所包含的寄存器分布。

图1.4 SFR区的寄存器分布图

这里面零散地分布着各种控制器,其中包括四个接口P0、P1、P2、P3;串口SCON与SBUF;中断IE和IP;计数器TCON、TMOD、TL0、TL1、TH0和TH1。剩下的B、ACC、PSW、SP、DPL和DPH在后面会专门讲述。最后一个PCON用作功耗控制。

单片机指令会通过给出的相应地址来访问对应的特殊寄存器。

最左边一栏,即从80H到F8H、以0、8结尾的特殊寄存器,可以对它们进行位寻址。它们的每一个位都可以被取出并进行置位操作。

单片机厂商为了扩展8051的功能,通常会选择在SFR区域增加新的特殊寄存器。读者如果需要扩展功能,也可以对SFR区进行拓展。

图中空白的区域表示没有放置特殊寄存器,从而单片机则不能对它们进行访问和读写。

3.IDATA区(8052专有)

IDATA区是8051的变种8052专有的,它是通用RAM空间,即开发者可以往IDATA区里任意写数据或读出数据,如同使用普通的RAM一样。这样,8052和普通的8051相比,相当于增加了128Byte的内存。

IDATA区的地址段也是从80H到FFH,与SFR区的地址段相同。不过不用担心混淆的问题,有些指令提供80H~FFH的地址,硬件会访问到SFR区,有些指令提供同样的地址信息,但硬件会将其引导到IDATA区。这两段区域公用同样的地址,但可通过使用不同的指令访问来区分。

4.DATA区

DATA区对于8051来说,相当于它的内存,大小为128Byte,地址范围为00H~7FH。它的使用方法同RAM。但它的00H~1FH以及20H~2FH地址段具有特殊的含义,具体如下文。

(1)寄存器组区

它的地址范围为00H~1FH,总共有32个字节大小。根据特殊寄存器PSW的RS[1:0]又可以分成四组,每组有8个字节。

RS[1:0]==2'b00时,00H~07H用作8个寄存器R0~R7;

RS[1:0]==2'b01时,08H~0FH用作8个寄存器R0~R7;

RS[1:0]==2'b10时,10H~17H用作8个寄存器R0~R7;

RS[1:0]==2'b11时,18H~1FH用作8个寄存器R0~R7。

因此,后面可使用符号Rn来指代R0~R7。硬件在确定Rn的具体位置时,它首先会确定PSW的RS段。或者也可使用Ri来指代R0和R1,且只需要1bit即可表征寄存器到底是R0还是R1。

(2)可位寻址区

我们对数据池的访问都是以字节为基础的,每给出一个地址,数据池即返回一字节数据。但8051规定了位寻址,也就是它会通知数据池:我只需要某地址的某位即可,数据池无须返回8bit而只是1bit。打个比方,如果地址是8bit的,那么规定[7:3]是该字节的地址,[2:0]作为位的地址,数据池接收信息后,立即首先使用[7:3]定位到该字节,然后使用[2:0]定位到这8个位的哪一个位,读取之后进行返回。使用位寻址写也是同样道理,8051处理器会送出一个位的写数据,且只希望数据池对该字节的该位进行改写,其他字节、其他位都无须改变。

这块位寻址的范围是20H~2FH,也包含了32Byte的空间。开发者的控制位可以存放在该区域,这样处理器可以迅速获取该位值。如果不存放在该区域,获取某特定位值的方式只有首先读到整个字节,然后“与”操作上的某定值,最后再移位,只有通过这三个步骤才能确定该特定位的数值。可位寻址区对于迅速读写位数据非常有帮助。

(3)通用RAM区

DATA区剩下的部分(地址范围为30H~FFH)可以用作通用RAM进行操作。