在单片机应用系统设计中,经常是既要扩展程序存储器(EPROM)也要扩展数据存储器(RAM),即存储器的综合扩展。下面介绍如何进行综合扩展。
【例6-5】 采用线选法扩展2片8KB的RAM和2片8KB的EPROM。RAM芯片选用2片6264,EPROM芯片选用2片2764,共扩展4片存储器芯片。扩展接口电路见图6-29。
图6-29 采用线选法的综合扩展电路
(1)控制信号及片选信号
地址线P2.5直接接到IC1(2764)和IC3(6264)的片选端,P2.6直接接到IC2(2764)和IC4(6264)的片选端。当P2.6=0,P2.5=1,IC2和IC4的片选端为低电平,ICl和IC3的端全为高电平。当P2.6=1,P2.5=0时IC1和IC3的端都是低电平,每次同时选中两个芯片,具体哪个芯片工作还要通过控制线控制。当片外程序存储区读选通信号为低电平,肯定到EPROM中读程序;当读、写信号或为低电平则到RAM中读数据或向RAM写入数据。 3个信号是在执行指令时产生的,但任一时刻,只能执行一条指令,所以只能一个信号有效,其他信号不可能同时有效。
(2)各芯片地址空间分配
硬件电路一旦确定,各芯片的地址范围实际就已确定,编程时只要给出要选择芯片的地址,就能准确地选中该芯片。结合图6-29,介绍ICl、IC2、IC3、IC4地址范围的确定方法。
程序和数据存储器地址均用16位,P0口确定低8位,P2口确定高8位地址。
如P2.6=0、P2.5=1选中IC2、IC4。地址线A0~A15与P0、P2对应关系见表6-13。
表6-13 例6-5中各芯片地址空间分配
除P2.6、P2.5固定外,其他“×”位均可变。设无用位P2.7=0,“×”各位全为“0”则为最小地址2000H;若“×”位均变为“1”则为最大地址3FFFH,所以IC2和IC4占用地址空间为:2000H~3FFFH共8KB。同理IC1、IC3地址范围4000H~5FFFH(P2.6=1、P2.5=0、P2.7=0),IC2与IC4占用相同的地址空间,由于二者一个为程序存储器,一个为数据存储器,在控制线或控制下,不同时工作。因此,地址空间重叠也无关系。IC1与IC3也同样。
从此例看出,线选法地址不连续,地址空间利用也不充分,而且地址有重叠。
【例6-6】 采用译码器法扩展2片8 KB EPROM,2片8 KB RAM。EPROM选用2764,RAM选用6264。共扩展4片芯片的扩展接口电路见图6-30,图中74 LSl39的4个输出端,Y0~Y3分别连接4个芯片IC1、IC2、IC3、IC4的片选端。Y0~Y3每次只能有一位是“0”,其他三位全为“1”,输出为“0”的一端所连接的芯片被选中。
译码法地址分配,首先要根据译码芯片真值表确定译码芯片的输入状态,由此再判断其输出端选中芯片的地址。
如图6-30所示,74LS139的输入端A、B、分别接P2接口的P2.5、P2.6、P2.7三端,为使能端,低电平有效。根据表6-2中74LS139的真值表可见当=0、A=0、B=0时,输出端只有Y0为“0”,Y1~Y3全为“1”,选中IC1。这样、P2.7、P2.6、P2.5全为“0”其他地址线任意状态都能选中IC1。当其他全为“0”最小地址0000H,其他位全为“l”最大地址为1FFFH。所以IC1地址范围0000 H~1FFFH。同理可确定其他芯片地址范围如下:
图6-30 采用译码器法的综合扩展电路
IC2:2000 H~3FFFH;
IC3:4000H~5FFFH;
IC4:6000 H~7FFFH。(www.daowen.com)
显然地址空间是连续的。
2.外扩存储器电路的工作原理及软件设计
为了使读者弄清单片机与扩展的存储器软、硬件芯片之间的关系,结合图6-30所示译码电路,说明片外读指令和从片外读、写数据的过程。
(1)单片机从片外程序区读指令过程
当接通电源,单片机上电复位。复位后程序计数器PC=0000H,CPU就从0000H地址开始取指令,执行程序。在取指令期间,PC地址低8位送往P0口,经锁存器锁存到A0~A7地址线上。PC高8位地址送往P2口,直接由P2.0~P2.4锁存到A8~A12地址线上,P2.5~P2.7输入给74LS139选片。这样,根据P2、P0接口状态则选中了第一个程序存储器芯片IC1(2764)的第一个地址0000 H。然后当PSEN变为低电平,把0000 H中的指令代码经P0接口读入内部RAM中,进行译码从而决定进行何种操作。取出一个指令字节后PC自动加1,然后取第2个字节,依次类推。当PC=1FFFH时,从IC1最后一个单元取指令.然后PC=2000 H,CPU向P0、P2送出2000 H地址时则选中第2个程序存储器IC2,IC2的地址范围2000 H~3FFFH,读指令过程同IC1。
(2)单片机片外数据区读写数据过程
当执行程序中,遇到“MOV”类指令时,表示与片内RAM交换数据;当遇到“MOVX”类指令时,表示从片外数据区寻址。片外数据区只能间接寻址。
例如,把片外4000H单元的数据送到片内RAM 40H单元中,程序如下:
MOV DPTR,#4000H
MOVX A,@DPTR
MOV 40H,A
先把寻址地址4000 H送到数据指针寄存器DPTR中.当执行MOVX A,@DPTR时,DPTR的低8位(00 H)经P0接口输出并锁存,高8位(40 H)经P2直接输出,根据P0、P2状态选中IC3(6264)的4000H单元。当读选通信号为低电平时,片外4000H单元的数据经P0接口送往A累加器。当执行指令MOV 40H,A时则把该数据存入片内40H单元。向片外数据区写数据的过程与读数据的过程类似。
例如,把片内50H单元的数据送到片外5000H单元中,程序如下:
MOV A,50H
MOV DPTR,#5000H
MOVX@DPTR,A
先把片内RAM 50H单元的数据送到A中,再把寻址地址5000H送到数据指针寄存器DPTR中,当执行MOVX@DPTR,A时,DPTR的低8位(00H)由P0口输出并锁存,高8位(50 H)由P2口直接输出,根据P0、P2状态选中IC3(6264)的5000 H单元。当写选通信号为低电平时,A中的内容送往片外5000 H单元中。
MCS-51单片机读写片外数据存储器中的内容,除了使用MOVX A,@DPTR和MOVX@DPTR,A外,还可以使用MOVX A,@Ri和MOVX@Ri,A。这时通过P0口传送给Ri中的内容(低8位地址),而把P2口原有的内容作为高8位地址输出。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。