MCS-51存储器扩展技术详解
外部扩展的基本知识
片内的资源如不满足需要,需外扩存储器和I/O功能部件。
系统扩展主要内容有:
(1)外部存储器的扩展(外部RAM、ROM)
(2)I/O接口部件的扩展
最小应用系统:晶振、复位系统、程序存储器和I/O口。
MCS-51单片机外部存储器结构:哈佛结构:程序空间与数据空间是分开的。
MCS-51 RAM和ROM的最大扩展空间各为64KB。
系统扩展首先要构造系统总线。
按功能吧系统总线分为三组:
-
地址总线(Address Bus,简写AB)
-
数据总线(Data Bus,简写DB)
-
控制总线(Control Bus,简写CB)
系统总线:是连接计算机各部件的一组公共信号线,MCS51的系统总线可分为地址总线、数据总线和控制总线。
地址总线:它是用来传输单片机所发出的地址信号,以便进行存储单元和I/O端口的选择。地址总线的数目决定着可直接访问的存储单元及I/O端口的数目。
数据总线:单片机与存储单元及I/O口之间传输数据信号。
控制总线:是一组控制信号线,包括单片机发出的也包括从外部存储单元或者I/O端口发送给单片机的。
优点:总线结构大大减小了单片机系统中传输线的数目,增加了系统的可靠性。
-
以P0口作为数据总线(8位)。
-
以P0口经8位锁存器锁存后的信号作为地址总线的低8位。
-
以P2口作为地址总线高8位。
-
控制信号线。
*ALE——-低8位地址锁存信号
*PSEN*—-扩展程序存储读选通信号
*EA*——-内外程序存储器选择信号
*RD*和WR*—–扩展RAM和I/O口的读选通、写选通信号。
优点:串行接口器件体积小,与单片机接口时需要的I/O口线少,可靠性提高。
缺点:串行接口器件速度较慢。
存储器扩展的读写控制
RAM芯片:读写控制引脚OE*和WE*,与MCS51的RD*和WR*引脚相连。
EPROM芯片:只有读出引脚OE*,与MCS51的PSEN*引脚相连。
存储器分类介绍
只读存储器
–ROM
–PROM
–EPROM
可读写存储器
–SRAM静态数据存储器(不断电的情况下可一直保存数据)
–DRAM动态数据存储器(需要不断定时刷新才能保存数据)
不挥发性读写存储器
–E²PROM
–NOVRAM:不挥发随机访问存储器,如背装锂电池的SRAM(当有外部电源时切换到外部电源,没有外接电源时切换到电池)
特殊存储器:
–加密型ROM:双端口RAM;先进先出RAM;
–快擦写型存储器
程序存储器扩展所使用的芯片
采用只读存储器,非易失性。
(1)掩膜ROM:在制造过程中编程,值适合于大批量生产。
(2)可编程ROM(PROM):用独立的编程器写入,只能写入一次。
(3)EPROM:电信号编程,紫外线擦除的只读存储器芯片。
(4)E²PROM(EEPROM):电信号编程,电擦除。读写操作与RAM相似,写入速度稍慢。断电后能够保存信息。
(5)Flash Rom:又称闪烁存储器,简称闪存。电改写,电擦除,读写速度快(70ns),读写次数多(1万次)。
常用EPROM介绍
2764 (8KB * 8)
27128 (16KB * 8)
27256 (32KB * 8)
27512 (64KB * 8)
27后面的数字表示其位存储量。扩展程序存储器时,应尽量用大容量的芯片。
-
常用的EPROM芯片
引脚功能如下:
A0~A15:地址线引脚。数目决定存储容量。
D7~D0:数据线引脚。
CE*:片选输入端。
OE*:输出允许控制端。
PGM*:编程时,加编程脉冲的输入端。
Vpp:编程时,编程电压(+12V或+25V)
Vcc:+5V,芯片的工作电压。
GND:数字地。
NC:无用端。
-
EPROM芯片的工作方式
(1)读出方式
片选控制线CE为低,输出允许OE为低,Vpp为+5V,指定地址单元的内容从D7~D0上读出。
(2)未选中方式
片选控制线为高电平。
(3)编程方式
Vpp端加规定高压,CE*和OE*端加合适电平,就能将数据线上的数据写入到指定的地址单元。
(4)编程校验方式
(5)编程禁止方式
输出呈高阻状态,不写入程序。
3. EPROM使用的一点注意事项
工作电压为5V,但不同厂家的芯片编程电压会有所不同。
存储器的扩展方法
扩展存储器即分配地址空间给每个芯片,注意要避免地址和数据的冲突。
芯片的片选端口为避免数据的冲突提供了方便,如何通过MCS51的地址线产生片选信号是避免地址冲突的有效途径。
片选控制
–线选法
适用于系统芯片数目较少
利用高端地址线(未用到的地址线)直接作为外扩芯片的片选线,线路简单
地址空间有重叠,即同一存储空间可能对应多个地址
–译码选通法
适用于多片存储器扩展
高端地址线经译码器译码后作为存储器片选线,线路需增加译码器芯片
地址空间连续,存储芯片空间对应地址唯一。
芯片译码选通法的分类
全译码方式:所有片选地址线(高端地址线)全部参加译码。
部分译码方式:片选地址线(高端地址线)部分参加译码,剩下部分悬空。
2 * 16 * 16 * 16 = 2^13
程序存储器的外扩
74L139的输出在0000H~3FFFH之间时,控制的是第一个27128芯片,C000H~FFFFH对应的是第四个27128芯片。每个27128芯片有不同的地址。
数据存储器的外扩
RAM芯片6264的相关总线介绍
控制总线
–存储器读选通OE
–存储器写选通WE
–存储器片选控制CS1(CE)CS2(CS)
数据总线
–数据接口D0~D7
地址总线
–地址总线接口A0~A12
用线选法扩展多片外部数据存储器6264的电路
地址线位A0~A12,故剩余地址线为三根。用线选法可扩展3片6264.3片6264对应的地址空间如下:
译码法扩展
数据存储器扩展
上图中各片62128地址分配
单片62256与8031的接口电路,地址范围为0000H~7FFFH
E²PROM芯片的外扩
保留信息时间长
程序存储器和数据存储器的地址是可以重叠的,通过不同的控制线和不同的指令加以区分。
编程举例
例1 编写程序将片外RAM中5000H~50FFH单元全部清“0”
方法1:用DPTR作为数据区地址指针,同时使用字节计数器。
MOV DPTR, #5000H; 设置数据块指针的初值
MOV R7, #00H; 设置块长度计数器初值
CLR A
LOOP: MOVX @DPTR, A; 把某一单元清0
INC DPTR; 地址指针加1
DJNZ R7, LOOP; 数据块长度减1,0则继续清0
HERE: SJMP HEREL; 执行完毕,原地踏步
方法2: 用DPTR作为数据区地址指针,但不使用字节计数器,而是比较特征地址。
MOV DPTR, #5000H
CLR A
LOOP: MOVX #DPTR, A
INC DPTR
MOV R7, DPL
CJNE R7, #0, LOOP; 与末地址加1比较
HERE: SJMP HERE
外扩存储器的软件设计
-
单片机片外程序区读指令过程(MOVC指令)
-
单片机片外数据区读写数据过程(MOVX指令)
例如,把片外程序存储器1000H单元的数送到片内RAM 50H单元,程序如下:
MOV A, #00H
MOV DPTR, #1000H
MOVC A, @A+DPTR
MOC 50H, A
例如,把片内50H单元的数据送到片外数据存储器1000H单元中。
MOV A, 50H
MOV DPTR, #1000H
MOVX @DPTR, A
提高: MCS-51单片机读写片外数据存储器中的内容,除用MOVX A, @DPTR和MOVX @DPTR, A外,还可使用MOVX A, @Ri和MOVX @Ri, A。这时通过P0口输出Ri中的内容(低8位地址),而把P2口原有的内容作为高8位地址输出。