MCS-51和外部存储器连接时应充分考虑如下4个问题。
只读存储器常用于固化固定程序和常数,以便系统一开机就可按照预定程序工作。只读存储器有掩膜ROM、PROM和EPROM 3种:若所设计系统是小批量生产或研制中产品,则建议采用EPROM型器件;若为定型的大批量产品,则应采用PROM或掩膜ROM,以降低生产成本和提高系统的可靠性。
随机存取存储器有静态RAM和动态RAM两类,常用来存放实时数据、变量和运算结果,若所用RAM容量较小,则宜采用静态RAM,以简化硬件电路设计;若所设计RAM容量很大,则应采用动态RAM,以降低生产成本。
MCS-51所需要的存储容量和存储芯片本身的存储容量不是同一概念。MCS-51所需要的存储容量由实际单片机应用系统的实时数据和应用程序的数量决定,每个存储单元必须为二进制8位,而且受所选单片机寻址能力制约;存储器芯片本身的存储容量由所选存储器芯片型号决定,且每个存储单元的二进制位数不一定是8位。因此,所设计系统需要的存储器芯片数量必须从存储单元数量和位数两方面考虑同时满足系统的要求。例如:某一单片机应用系统需要32KB RAM存储器,若采用6264仅需4块,若改用2116就需要16块。这就是说,在MCS-51实际所需存储容量不变的前提下,若所选存储芯片本身存储容量越大,则所用芯片数量就越少。
MCS-51对外部存储器进行读/写所需要的时间称为MCS-51的访存时间,是指从它向外部存储器发出地址码和读写信号到P0口选通读出数据或保持写入数据所需要的时间,这个时间需要两个时钟周期以上。存储器最大存取时间是存储器固有的时间,这个时间参数可以从有关手册或实际测量中获得。为了使MCS-51和外部存储器同步而可靠地工作,MCS-51的访存时间必须大于所用外部存储器的最大存取时间。例如:若8031的主脉冲为6MHz,则它的访存时间应大于400ns,故所选存储器芯片的最大存取时间必须小于这个数。
在确定外部RAM和ROM容量和所选存储器芯片的型号和数量以后,我们还必须给每块芯片划定一个地址分配范围,因为所分存储器的地址范围不同,它和地址译码器的连接就不一样。
8031和2764的连接如图5-21所示。由于2764存储容量为8KB,故8031片内地址线为P2.4~P2.0和P0.7~P0.0(P2.4~P2.0直接和2764的A12~A8相接,P0.7~P0.0经74LS373输出后接到2764的A7~A0),共13条。片选地址线共3条,其中P2.5直接和2764的 相接,P2.7和P2.6悬空(或作其他功能芯片的片选线)。和2764的相接,以便8031执行MOVC指令时产生低电平而选中2764,其他引脚连接如图5-21所示。
图5-21 8031和2764的连接
根据基本地址范围的定义,即未参加译码的片选线P2.7和P2.6上以低电平“0”计算时的地址范围,2764的基本地址范围应为0000H~1FFFH。重叠地址范围定义为未参加译码的片选地址和片内地址从全“0”变到全“1”时的地址范围,2764的重叠地址范围为:
0000H~1FFFH 8KB 8000H~9FFFH 8KB
4000H~5FFFH 8KB C000H~DFFFH 8KB
显然,2764共有32KB重叠地址范围,它们在整个64KB区域中是不连续的。使用该硬件电路时,应注意把程序和常数放在基本地址范围内。
2817是Intel公司的E2PROM,是一种存储容量为2KB的省去全部硬件接口电路也能执行数据写入的固件。2817可以通过RDY/引脚在系统环境中避免总线冲突。图5-22列出了它和8031的连接关系。它的基本地址范围为0000H~07FFH;重叠地址范围为0000H~7FFFH,共32KB。这就是说,只要8031在P2.7上发出低电平“0”,其余地址线无论怎样变化均可选中2817。
图5-22 8031对2817的连接
其工作过程为:
(1)8031先通过程序向2817发出“字节写入”命令,然后对P1.0进行程序查询,若它为低电平,则表明2817字节写入操作尚未完成,8031继续查询等待。
(2)2817接受8031的“字节写入”命令后16ms便可完成一个存储单元的字节写入操作,然后使RDY/变为高电平。
(3)8031查询到RDY/变为高电平就意味着本次字节写入操作已经完成,可以准备下一次的“字节写入”操作。
8031进行下次字节写入操作只需重复上述各步骤。
图5-23列出了8031对6116(2KB)的连接。图中,8031的和分别连到6116的和,以便8031执行MOVX指令时选中6116工作。片选线P2.7~P2.5参加译码(P2.7连到二-四译码器控制端G),片选线P2.4和P2.3未参加译码,故为部分译码方式。
图5-23 8031对6116的连接
6116的重叠地址范围为:
1#6116 0000H~1FFFH 8KB
2#6116 2000H~3FFFH 8KB
显然,重叠地址范围是连续的。其中,基本地址范围为:
1#6116 0000H~07FFH 2KB
2#6116 2000H~27FFH 2KB
2186是全集成化的8KB动态RAM,把全部刷新控制电路集成在基片的平面上,使系统设计者既能利用动态RAM的密度、功耗和价格方面的优点,又不必为设计刷新控制接口而增加硬件成本。图5-24列出了8031对2186的连接。由图可见,8031通过下降沿把出现在P0口低8位地址锁存到2186内部地址锁存器,故P0口可以和2186的A7~A0直接相连而无需外接地址锁存器。8031的P2.4~P2.0和2186的A12~A8相连,由P2口提供高5位地址码。8031的连到2186的,以提供2186所需的读/写选通信号。
图5-24 8031对2186的连接
2186的基本地址范围为0000H~1FFFH。此外,P2.6和P2.5未参加译码而悬空,其重叠地址范围为0000H~7FFFH,共32KB。
8031对外部ROM和RAM的连接如图5-25所示。由图可见,8031的地址采用全译码方式,片选线P2.7用于控制二—四译码器工作,片选线P2.6和P2.5参加译码,且无悬空的片选线。因此,存储器所有地址都是唯一的,地址无重叠。各存储器芯片的基本地址范围为:
1#2764 0000H~1FFFH 8KB
2#6264 2000H~3FFFH 8KB
3#6264 4000H~5FFFH 8KB
应当指出,由于8031的和经低电位或门后接到2#和3#存储器位置上的引脚,直接和相应相接,因此2#和3#存储器位置上的芯片插座既可以安装6264也可以插上2764。如果安装6264,那么6264既可以作为8031的外部RAM又可以作为外部ROM来存放数据和程序。
图5-25 8031对外部ROM/RAM的连接
(1)单片机存储器的主要功能是存储 和 。
(2)试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H、2002H单元中,按顺序拼装后的单字节数放入2002H单元。
(3)假设外部数据存储器2000H单元的内容为80H,执行下列指令后
MOV P2,#20H
MOV R0,#00H
MOVX A,@R0
累加器A中的内容为 。
(4)编写程序,将外部数据存储器中的4000H~40FFH单元全部清零。
(5)在MCS-51单片机系统中,外接程序存储器和数据存储器的16位地址线和8位数据线为何不会发生冲突?
(6)区分MCS-51单片机片外程序存储器和片外数据存储器的最可靠的方法是 。
① 看其位于地址范围的低端还是高端。
② 看其离MCS-51芯片的远近。
③ 看其芯片的型号是ROM还是RAM。
④ 看其是与信号连接还是与信号连接。
(7)在存储器扩展中,无论是线选法还是译码法,最终都是为扩展芯片的 端提供信号。
(8)起止范围为0000H~3FFFH的存储器的容量是 KB。
(9)在MCS-51中,PC和DPTR都用于提供地址,但PC是为访问 存储器提供地址,而DPTR是为访问 存储器提供地址。
(10)11根地址线可选 存储单元,16KB存储单元需要 根地址线。
(11)32KB RAM的首地址若为2000H,则末地址为 H。
(12)现有8031单片机、74LS373锁存器、1片2764EPROM和2片6116RAM,请使用它们组成一个单片机系统,要求:
① 画出硬件电路连线图,并标注主要引脚。
② 指出该应用系统程序存储器空间和数据存储器空间各自的地址范围。