为什么要进行存储器的扩展呢?就是因为单片机自带的储存空间不够。本文将以80C31单片机来举例讲解存储器的扩展,80C31内置128字节数据存储器(RAM),片内并无程序存储器(ROM),需外接ROM。 所谓的存储器扩展其实就是构建系统总线。
1.总线的基本概念
系统总线是连接计算机各部件的一组公共信号线,MCS-51的系统总线可分为地址总线、数据总线和控制总线。
1.1 地址总线
地址总线(Adress Bus,简写AB)他用来传输单片机所发出的地址信号,以便进行存储单元和I/O端口的选择。地址总线的数目决定着可直接访问的存储单元及I/O口的数目。MCS-51系类单片机在扩展存储器时是由P0与P2端口作为地址总线。
1.2 数据总线
数据总线(Data Bus,简写DB)单片机与存储单元及I/O口之间传输数据信号。MCS-51系类单片机在扩展存储器时是由P0端口作为数据总线,P0口即做地址总线又做数据总线,后续将会讲解如何将地址信息与数据信息分离出来。
1.3 控制总线
控制总线(Control Bus,简写CB)是一组控制信号线,包括单片机发出的也包括从外部存储单元或者I/O口发送给单片机的。
也可以这样理解系统总线,比如要读取一字节信息我们都需要什么?首先需要这一字节信息的地址,那么我们就可以把这个地址放到所谓的地址总线上面,然后告诉存储器我要读取信息并且把读取信息的地址告诉他,告诉存储器这个行为就是运用控制总线来进行的,最后存储器知道了要读取数据以及读取的地址,就将该地址的信息放到数据总线上面再由单片机读取。
总线结构大大减小了单片机系统中传输线的数目,增加了系统的可靠性。
2. 扩展程序存储器
上面我们明白了系统总线的相关概念,现在我们来对8031单片机访问是的时序问题以及片选问题进行讨论。
2.1 访问片外程序存储器的时序
8031单片机的P0与P2端口是用来构建地址总线的,其中P0是地址的低8位,P2是地址的高8位。在介绍数据总线部分我们也提到P0口也是用作数据总线的,也就是说P0口是分时复用的,其功能是由ALE信号控制,ALE为下跳沿时P0口数据为地址信息。
在运行MOVC A,@DPTR(读取外部存储器指令)后,当ALE为下降沿时P0口输出的为稳定的地址信号,其内容由锁存器进行存储,P0口地址信号完整的锁存之后,P0端口就变成了8位的数据总线,紧接着PSEN*为低电平时,其说明可以从存储器上面读取数据,外部存储器将数据放入到数据总线上面(即P0口,P0都把低8位地址放入到锁存器后就变为数据总线),再将数据总线的内容放入到累加器A中。
2.2 访问片外数据存储器的时序
对于扩展片外的数据存储器与程序存储器其地址总线与数据总线是没有区别的,只是应用的控制线不同,扩展片外程序存储器时,使用的是PSEN来控制读选通信号,扩展程序存储器时,使用RD来控制读选通信号、WR来控制写选通信号。
下图红线以前为读程序存储器的时序图,在运行MOVC指令时(读程序存储器时)RD与WR均保持高电平;红线之后为运行MOVX指令时(存取数据存储器时)PSEN始终保持高电平。
在运行MOVX A,@DPTR (读片外数据存储器)后,首先P0发送低8位地址信息,P2口发送高8位地址信息,待P0口地址信息稳定后ALE发生下跳沿,将P0口低8位地址信息送入到锁存器中,紧接着P0口转变为数据总线,待RD变为低电平时,数据存储器将该地址的内容放入到数据总线上,最后将数据总线内容放入到累加器A当中,RD变为高电平。
在运行MOVX @DPTR,A(写片外数据存储器)后,首先P0发送低8位地址信息,P2口发送高8位地址信息,待P0口地址信息稳定后ALE发生下跳沿,将P0口低8位地址信息送入到锁存器中,紧接着P0口转变为数据总线,待WR变为低电平时,累加器A将数据内容放入到数据总线上,待存储器将数据总线内容保存后WR转换为高电平。
2.3 线选法扩展
该部分运用扩展EPROM2764进行介绍,首先我们了解了解2764存储器,2764为8K程序存储器,8K = 23 *210= 213,所以需要有13条地址总线接口,地址总线接口为A0-A12,8位的数据接口位DO-D7。存储器读选通OE,低电平选通,存储器片选控制CE,低电平选通,存储器编程脉冲PGM,编程电压输入VPP,在对其进行扩展时PGM与VPP接电源即可。
所谓的线选法扩展,即使用高端地址线(P0与P2端口未用到的地址线)作为外扩存储器的片选线(连接存储器的CE接口)。使用线选法进行连接,地址空间有重叠,即同一存储空间有多个地址空间。如下图原理图,单片机的P2.5与P2.6有四种输出电平(0,0)、(0,1)、(1,0)和(1,1)但是这4种输出电平与选取存储器的地址毫无关系,也就是说该存储器可以用4组地址来表示。
第一组:0 00 0000000000000B~0 00 1111111111111B(0000H~1FFFH)
第二组:0 01 0000000000000B~0 01 1111111111111B(2000H~3FFFH)
第三组:0 10 0000000000000B~0 10 1111111111111B(4000H~5FFFH)
第四组:0 11 000000000000B~0 11 1111111111111B(6000H~7FFFH)
访问该存储器时不管用任何一组地址均可访问。
CE接口理论上也是可以接单片机其他端口(P1 or P3),则P2.5、P2.6与P2.7与选取存储器的地址毫无关系,存储器可以由8组地址来表示,空间重叠更严重,一般不建议使用。
2.4 译码法扩展
该部分使用74LS138译码器传输片选信号,使用高端地址线(P2.5、P2.6与P2.7)做为译码器的输入。下图为译码器的真值表。
可以看出在正常工作状态下一共有8组输出,也就是2.3最后部分说的8组地址。下图原理图OE端连接的是Y1端,其有效地址为: 001 0000000000000B~001 1111111111111B(2000H~3FFFH),运用译码法扩展时就消除了空间重叠这一问题,每一块存储器对应的地址唯一。
2.5 数据存储器的扩展
以上我们了解了有关时序以及片选的相关内容,这部分根据以上内容展示几种数据存储器扩展的电路原理图,请读者自行分析,相关内容可以在评论区共同探讨。
2.5.1 线选法片选
2.5.2 译码器片选
2.5.3 EPROM与RAM综合扩展——线选法
文章来源:https://www.toymoban.com/news/detail-507461.html
2.5.4 EPROM与RAM综合扩展——译码法
文章来源地址https://www.toymoban.com/news/detail-507461.html
到了这里,关于51单片机自学笔记(4)——MCS-51存储器的扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!