随着生产工艺的提高,大部分单片机片内都集成了大容量的程序存储器和数据存储器。因此,存储器扩展的需求正在降低。但是,学习存储器的扩展方法,将对更好地掌握单片机的时序和单片机系统设计技巧有很大的帮助。接下来,本节将首先介绍程序存储器的扩展方法。
程序存储器用于存放程序和一些程序执行过程中的常数。当单片机没有片内程序存储器(如8031单片机)或片内程序存储器容量不够时,则需要利用单片机的片外总线进行片外程序存储器的扩展。
一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
在图5-2a所示的单片机系统中,扩展了一片程序存储器芯片2764EPROM(引脚如图5-3所示,引脚功能见表5-1)。该图主要用于说明单片机与存储器间的连接方法,因此图中没有给出单片机的复位电路和时钟电路等辅助电路,在本书的其他电路图中也会进行类似的简化处理。
由图5-2a可知:
1)8051单片机P2.4~P2.0引脚是地址总线的高5位,未经过锁存器直接到2764的地址引脚A12~A8上。
2)单片机P2.5~P2.7引脚未被使用,引脚上的电平状态与2764的访问无关。
3)单片机P0.7~P0.0引脚未经过锁存器74LS373,是数据总线,直接与2764的数据引脚D7~D0相连。
4)单片机P0.7~P0.0引脚经过锁存器74LS373后的Q7~Q0是低8位的地址总线,与2764的地址总线A7~A0相连。
5)单片机EA引脚接地,该单片机仅使用片外扩展的程序存储器。
6)ALE连接至74LS373的锁存器触发引脚G,当ALE出现下降沿信号的时候将触发74LS373锁存P0口上的地址信息。
图5-2单片程序存储器芯片2764的扩展电路图
a)实际连线图b)总线式简化连线图
图5-3常用程序存储器芯片引脚图
7)8051的PSEN与2764的选通信号引脚OE相连,当PSEN出现低电平时,允许2764输出。
图5-2b给出的是图5-2a的几种常用简化绘制方法。简化绘制方法以总线方式显示单片机与片外扩展存储器(或I/O接口)的连接关系,常用于复杂电路的绘制。
通常,存储器芯片的地址线根数M确定了存储器芯片的存储单元个数为2M,因为一个地址对应于一个存储单元;而数据线的个数N决定了每个存储单元能存放N位二进制数。显然,存储器芯片的容量,即所能存放的二进制数的位数为2M×N。根据这一思路,可以确定2764的存储容量。2764 EPROM有13根地址线和8根数据线,可知:2764有213=8K=8192个存储单元,每个存储单元能存放8位二进制数,即2764的存储容量为213×8位,即8K×8bit=64Kbit=8KB。
单片机访问片外存储器芯片时,由单片机的地址总线A15~A0送出存储单元的地址,通过地址选中存储器芯片上被访问的存储单元。在图5-2中,单片机地址总线中的低13位A12~A0与2764的片内地址线A12~A0对应相连,而单片机地址总线中的高3位A15~A13并未用到,由此可得2764的地址范围(见表5-2)。这里需要特别注意的是,访问2764时仅片内地址线(A12~A0)起作用,未用到的地址总线高3位A15~A13与2764的访问无关,因此A15~A13的取值可以是000~111中的任意一个。这使得图5-2中2764芯片的每个存储单元都有23=8个不同的地址。
若要从图5-2中2764芯片的地址为2000H的存储单元读取数据,并送入单片机的累加器A,可以采用如下的程序段:
由表5-2可知,在上面的程序段中,地址2000H还可以替换为0000H、4000H、6000H、8000H、0A000H、0C000H和0E000H。