哈佛结构与普林斯顿结构

80C51存储器(哈佛结构)映像图

- 在物理上有 4 个存储器空间:
- 程序存储器(ROM):
- 片内程序存储器、
- 片外程序存储器。
- 数据存储器(RAM):
- 片内数据存储器、
- 片外数据存储器。
- 在逻辑上有 3 个存储器地址空间:
- 片内、片外统一的 64 KB 程序存储器地址空间。
- 片内 256 B 数据存储器地址空间
- 片外64KB的数据储存器地址空间
2.4.1 程序储存器
片内片外两部分
CPU访问片内和片外存储器,可由EA引脚所接的电平来确定:
- *EA引脚接高电平时:**程序从片内程序存储器0000H开始执行,即访问片内存储器;当PC值超出片内ROM容量时,会自动转向片外程序存储器空间执行。
- 当PC值超出片内ROM容量时,8051单片机会从片外程序存储器中与超出值相对应的地址开始执行,而不是从片外的0000H开始执行
- *EA引脚接低电平时:**迫使系统全部执行片外程序存储器0000H开始存放的程序。
程序存储器的某些单元被保留用作特定程序的入口地址
- *系统复位:**PC地址为0000H,系统从0000H单元开始取指,执行程序。通常在该单元设置一条绝对转移指令,转向用户主程序。
- *初始单元:**0000H~0002H单元保留用于初始化。
- *中断服务程序入口地址:**0003H~002DH单元保留用于5个中断源的入口地址,共6个特定地址:
- 复位:0000H
- 外部中断0:0003H
- 计时器T0溢出:000BH
- 外部中断1:0013H
- 计时器T1溢出:001BH
- 串行口中断:0023H
因此,一个8051程序典型结构如下:
内存布局示意图:
片内程序存储器


2.4.2内部数据储存器(RAM)
- 数据存储器分类:
- 片内数据存储器(IRAM):由随机存储器RAM构成,存放随机数据。
- 片外数据存储器(ERAM):扩展的数据存储器。
- 片内数据存储器特点:
- 地址为8位,最大寻址范围为256个字节。
- 片外数据存储器特点:
- 通过数据指针DPTR访问,DPTR为16位寄存器。
- 可扩展至64KB的存储器容量。
片内数据存储器
工作寄存器区
0-31(00H-0FH),共32个单元,是4个通用寄存器组,每组包含8个通用寄存器
在某一时刻,只能选用一个寄存器组使用。其选择是通过软件对程序状态字
(PSW)中的RSO、RS1两位的设置来实现的。设置RSO、RS1时,可以对PSW字节寻址,也可用位寻址方式,间接或直接修改RSO、RS1的内容。通常采用后者较方便。
字节寻址方式:
这段代码展示了如何通过字节寻址方式修改PSW。
位寻址方式:
位寻址区
片内数据存储器区的32~47(20H~2FH)的16个字节单元,共包含128位,是可位寻址的存储器区。这16个字节单元既可以进行字节寻址,又可位寻址。
这16个位寻址单元,再加上可位寻址的特殊功能寄存器一起构成了布尔(位)处理器的数据存储器空间。在这一存储器空间所有位都是可直接寻址的,即它们都具有位地址。
这样我们就可以直接操作20H字节中的任意一位。注意,位地址00H和工作寄存器区的字节地址00H在数值上重复,但是可以通过指令加以区分(对字节的指令/对位的指令)

字节寻址区
从片内数据存储器区的48~127(30H~7FH),共80个字节单元,(只)可以采用直接字节寻址的方法访问。
特殊功能寄存器SFR区

在80C51系列单片机的128B特殊功能寄存器(SFR)空间中,虽然只定义了20个特殊功能寄存器,但这些寄存器大都被有意地安排在以8结尾的地址上(例如:A0H、B0H、D0H等)。其余未使用的地址是保留的,这样做有两个主要目的:
- 为未来扩展预留空间,便于后续开发新的功能寄存器
- 简化了硬件译码电路的设计,因为所有特殊功能寄存器的地址最低三位都是0
从图片中可以看到,SFR区域占用80H-FFH的地址空间,但只有少数特定地址被实际使用,其他地址是不可访问的。如果程序试图访问这些未定义的地址,将会得到未定义的结果。


从表中可以看出,一些可以位寻址的位还有自己的特殊名称,例如:PSW.7(按位访问)=D7H(位地址)=CY(特殊名称)
2.4.3片外数据存储器
- 在外部存放数据的区域
- 只能用寄存器间接寻址的方法访问
- 所用寄存器为:DRTR,R1,R0
