购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 存储器结构

存储器是单片机的三大主要部件之一,主要用来储存信息(即数据和程序)。存储器按配置方法分为主存和外存。“主存”又称为“内存”,用于存放当前执行的数据和程序;“外存”用于存放暂不执行的数据和程序。目前单片机主要配置内存。

存储器结构分为独立的两部分,即数据存储器(RAM)和程序存储器(ROM)。8051单片机的存储器可分为4个存储空间,即片内程序存储器(片内ROM)、片外程序存储器(片外ROM)、片内数据存储器(片内RAM)、片外数据存储器(片外RAM)。

这4类存储器与其对应的地址关系,如表2-2所示。

表2-2 RS 1 、RS 0 与寄存器R0~R7间的对应关系

8051单片机片内有4KB的程序存储器和256B的数据存储器,还可以片外扩展至64KB程序存储器和64KB数据存储器。关于这部分内容,将在系统扩展部分介绍。

2.4.1 程序存储器及其扩展

程序设计人员编写的程序代码就存放在单片机的程序存储器中,也称为“只读程序存储器”(ROM)。程序和数据一样,都是由机器码组成的代码串,只是程序代码存放于程序存储器中。

1.程序存储器

51系列单片机具有64KB程序存储器寻址空间,这64KB的地址空间是统一编址的,没有采用片内、片外分区的方式。区分片内、片外是由 EA span>引脚上的电平来指示,具体如下:

EA =1,即接高电平时,CPU从片内的程序存储器中读取程序,当PC值超过片内ROM的容量时,才会转向外部的程序存储器读取程序。

EA =0,即接低电平时,CPU从片外的程序存储器中读取程序,并输出 PSEN 选通信号。对于内部无ROM的8031单片机,其ROM只能外接,必须使 EA =0。

●程序存储器是由16位的程序计数器PC指示当前地址。片内ROM的地址为0000H~0FFFH。单片机启动复位后,程序计数器PC的内容为0000H,系统将从0000H单元开始执行程序。

在程序存储器中的0003H~0032H,共48B被保留专用于中断处理程序,称为中断矢量区,系统必须跳过这一区域。其中,

●0000H~0002H单元:系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始执行,则应在这三个单元中存放一条无条件转移指令,让系统必须跳过这一区域,直接去执行用户指定的程序。

●0003H~002AH:这40个单元各有用途,被均匀地分为6段,其定义如表2-3所示。

表2-3 中断入口地址

以上地址单元被专门用于存放中断处理程序。中断响应后,按中断的类型自动转到各自的中断区去执行程序。这些地址单元不能用于存放程序的其他内容,只能存放中断服务程序。通常情况下,每段只有8个地址单元不能保存完整的中断服务程序,因而,一般在中断响应的地址区存放一条无条件转移指令,指向程序存储器中真正存放中断服务程序的空间。这样中断响应后,CPU读到这条转移指令,便转向真正存放中断服务程序的空间,继续执行中断服务程序。

2.程序存储器的扩展

51系列单片机为了满足不同应用的需要,除了设置有内部程序存储器外,还可以根据需要进行外部程序存储器扩展。外部程序存储器扩展时,采用P0和P2作为16位地址总线的低8位和高8位,另外,P0口还分时复用为8位数据总线。

与普通的8051单片机不同,AT89S52内部设有8KB的可擦写Flash存储器。这个程序存储器可以外部扩展至56KB,这时需要将单片机的 EA 引脚接高电平。在外部扩展程序存储器情况下,程序可以首先从片内的程序存储器开始顺序执行,访问时CPU会自动转向外部程序存储器。

当CPU访问外部程序存储器的时候,程序存储器指针PC的低8位地址由P0口输出,PC的高8位地址由P2口输出。P2口和P1口共同组成16位地址总线。外部程序存储器中的指令代码由P0口输入,即P0口是低8位地址线和8位数据线的分时复用。

为了保证在访问外部程序存储器期间,16位的地址码不变,并且能正确地从P0口读入程序代码,应该将P0口输出的低8位地址在ALE信号的控制下存入地址锁存器,这样便可以将P0口空出来读取8位的程序代码。

如果 EA 引脚接低电平,则CPU直接从片外程序存储器的0000H地址开始执行,而不管片内8KB的Flash是否含有程序代码。

2.4.2 数据存储器及其扩展

数据存储器也称为“随机存取数据存储器”。51系列单片机的数据存储器在物理逻辑上分为两个地址空间,即片内数据存储区和片外数据存储区。片内RAM有256B的用户数据存储区域(不同的型号有区别),是用于存放执行的中间结果和过程数据的51系列单片机的。数据存储器均可读写,部分单元还可以位寻址,其结构示意图如图2-5所示。

图2-5 数据存储器结构示意图

51系列单片机内部RAM共有256个单元(不同的型号有区别),这256个单元按其功能分为低128B片内RAM和高128B片内RAM两部分。

1.低128B片内RAM

低128B片内RAM:地址空间为00H~7FH单元,为用

户数据RAM,可以存放运算结果和标志位等。该区域按其功能还可分为以下三个区域。

●00H~1FH:通用寄存器区,开辟了4组通用寄存器,每组R0~R7,在前面寄存器一节中已进行过详细介绍。

●20H~2FH:位寻址区,共16B,128位。布尔处理的存储空间就是位寻址区。既可作为一般单元用字节寻址,也可以进行寻址。该区域除了作为一般RAM进行读写外,还可进行执行置“1”、清“0”、求反、转移,传送和逻辑等位操作。位寻址区地址表如表2-4所示。

●30H~7FH:字节寻址区,共80B,用户使用的一般RAM,可在此区域开辟堆栈。

表2-4 位寻址区位地址表

续表

2.高128B片内RAM

高128B片内RAM的地址空间为80H~FFH地址单元,是特殊功能寄存器(SFR)区。8051内部有21个特殊寄存器,AT89S52有32个特殊寄存器,如表2-5所示。

表2-5 特殊功能寄存器(SFR)

续表

说明 :带*号的特殊功能寄存器都是可以位寻址的寄存器。

特殊功能寄存器分散在30H~7FH片内RAM区,其中有部分地址单元未定义,不能使用。访问特殊功能寄存器使用直接寻址方式,其中有一部分(表中带*号)特殊功能寄存器也可以采用位寻址,其特征是地址能被8整除。访问这些寄存器中的各位时,在位寻址指令中,可以用“寄存器名。位”、“字节地址。位”、“位地址”、“位名称”等来表示。例如,“B.5”表示寄存器B的第5位。可位寻址的特殊功能寄存器及其位地址如表2-6所示。

表2-6 可位寻址的特殊功能寄存器及其位地址

3.外部数据存储器扩展

51系列单片机为了满足不同应用的需要,除了设置有内部数据存储器外,还可以根据需要进行外部数据存储器扩展。外部数据存储器扩展时,采用P0和P2作为16位地址总线的低8位和高8位,另外,P0口还分时复用为8位数据总线。

对于AT89S52单片机,如果其内部256B的RAM不够用,外部还可以扩展64KB的数据存储器空间。

由于访问外部数据存储器是随机的,因此,其访问地址可由工作寄存器R0或R1来寻址256B单元或由数据指针DPTR寻址54KB的空间。

访问外部数据存储器的硬件结构和访问外部程序存储器相同。R0或R1的8位地址由P0口送入地址锁存器输出,DPTR的16位地址则由P0口输出低8位地址到锁存器中,P2口则输出高8位地址。读写的数据由P0口输入/输出,因此P0口仍然是地址/数据分时复用的。

访问外部数据MOVX类指令是单字节双周期指令,因此,在第二个机器周期ALE信号将减少一次。

访问外部数据存储器的读写选通信号为 RD / WR ,均为低电平有效。访问外部程序和数据存储器各有不同的地址指针PC、Ri、DPTR,各指针又有不同的读或读写选通信号 PSEN RD / WR 。这就从结构上把程序存储器和数据存储器的访问截然分开。两者虽然共用16位地址总线,由于使用两套完全不同的地址指针和读、读写选通信号,从而保证了指令的执行不会出错,为单片机的应用提供了方便。

访问内部RAM用MOV类指令,是访问片内RAM还是特殊功能寄存器,则由寻址方式来区分。

●访问特殊功能寄存器只能用直接寻址方式;

●访问外部数据存储器则需选用MOVX类指令;

●对于只需寻址256B单元的可采用R i 进行8位地址间接寻址,否则选用DPTR16位地址指针,寻址64KB地址空间;

●读取程序存储器中的固定数据,则需选用MOVC类指令。

可见,访问不同地址空间的数据需要采用不同的指令类型。 DsTTqrX6zNpFgVc8naK5l54k1KORmnbn8nLsajqHklc137wINKjlxBARTGp3TRkn

点击中间区域
呼出菜单
上一章
目录
下一章
×