第 8章 MCS-51单片机扩展存储器的设计
8.1 概述片内的资源如不满足需要,需外扩存储器和 I/O功能部件,系统扩展 问题,内容主要有:
(1)外部存储器的扩展 (外部存储器又分为外部程序存储器和外部数据存储器)
(2) I/O接口部件的扩展 。
本章介绍 MCS – 51单片机如何扩展外部存储器,I/O接口部件的扩展下一章介绍。
系统扩展结构如下图,
MCS-51单片机外部存储器结构,哈佛结构 。
MCS-96单片机的存储器结构,普林斯顿结构 。
MCS-51数据存储器和程序存储器的 最大扩展空间各为
64KB。
系统扩展首先要 构造系统总线 。
8.2 系统总线及总线构造
8.2.1 系统总线按其功能通常把系统总线分为三组:
1.地址总线 ( Adress Bus,简写 AB)
2.数据总线 (Data Bus,简写 DB)
3.控制总线 ( Control Bus,简写 CB)
8.2.2 构造系统总线系统扩展的首要问题,
构造系统总线,然后再往系统总线上,挂,存储器芯片或 I/O接口芯片,,挂,存储器芯片就是存储器扩展,,挂,I/O接口芯片就是 I/O扩展。
MCS-51由于受引脚数目的限制,数据线和低 8位地址线复用。
为了将它们分离出来,需要 外加地址锁存器,从而构成与一般 CPU相类似的片外三总线,见图 8-2。
地址锁存器一般采用 74LS373,采用 74LS373的地址总线的扩展电路如下图 (图 8-3)。
1.以 P0口作为低 8位地址 /数据总线。
2.以 P2口的口线作高位地址线。
3.控制信号线。
*使用 ALE信号作为低 8位地址的锁存控制信号。
*以 PSEN*信号作为扩展程序存储器的读选通信号 。
*以 EA*信号作为内外程序存储器的选择控制信号 。
*由 RD*和 WR*信号作为扩展数据存储器和 I/O口的读选通、写选通信号。
尽管 MCS-51有 4个并行 I/O口,共 32条口线,但由于系统扩展需要,真正作为数据 I/O使用的,就剩下 P1
口和 P3口的部分口线。
8.2.3 单片机系统的串行扩展技术优点,串行接口器件体积小,与单片机接口时需要的
I/O口线很少(仅需 3-4根),提高可靠性。
串行扩展可以 减少芯片的封装引脚,降低成本,简化了系统结构,增加了系统扩展的灵活性 。为实现串行扩展,一些公司(例如 PHILIPS和 ATMEL公司等)
已经推出了 非总线型单片机芯片,并且具有 SPI
( Serial Periperal Interface) 三线总线 和 I2C
公用双总线的两种串行总线形式。与此相配套,也推出了 相应的串行外围接口芯片 。
缺点,串行接口器件速度较慢在大多数应用的场合,还是并行扩展占主导地位。
8.3 读写控制、地址空间分配和外部地址锁存器
8.3.1 存储器扩展的读写控制
RAM芯片,读写控制引脚,记为 OE*和 WE*,与 MCS-51
的 RD*和 WR*相连。
EPROM芯片,只能读出,故只有读出引脚,记为 OE*,
该引脚与 MCS-51的 PSEN*相连。
8.3.2 存储器地址空间分配
MCS-51发出的地址 是用来 选择某个存储器单元进行读写,
要完成这种功能,必须进行两种选择:,片选,和
,单元选择,。
存储器空间分配除考虑地址线连接外,还讨论 各存储器芯片在整个存储空间中所占据的地址范围,
常用的存储器地址分配的方法有两种,线性选择法
(简称线选法)和 地址译码法 (简称译码法)。
1,线选法直接利用 系统的高位地址线 作为存储器芯片(或 I/O接口芯片)的片选信号。
优点,电路简单,不需要地址译码器硬件,体积小,
成本低。
缺点,可寻址的器件数目受到限制,地址空间不连续,地址不唯一。
例 某一系统,需要外扩 8KB的 EPROM( 2片 2732),4KB
的 RAM( 2片 6116),这些芯片与 MCS-51单片机地址分配有关的地址线连线,电路如下图。
2732:4KB程序存储器,有 12根地址线 A0~ A11,分别与单片机的 P0口及 P2.0~ P2.3口相连。 2732( 1)的片选端接 A15( P2.7),2732( 2) 的片选端接 A14
( P2.6)。
当要选中某个芯片时,单片机 P2口对应的片选信号引脚应为低电平,其它引脚一定要为高电平 。
6116:2KB数据存储器,需要 11根地址线作为单元的选择,而剩下的 P2口线( P2.4~ P2.7) 作为片选线。
两片程序存储器的地址范围:
2732( 1)的地址范围,7000H~ 7FFFH;
2732( 2)的地址范围,B000H~ BFFFH;
6116( 1)的地址范围,E800H~ EFFFH;
6116( 2)的地址范围,D800H~ DFFFH。
线选法特点,简单明了,不需另外增加硬件电路 。 只适于外扩芯片不多,规模不大的单片机系统 。
2,译码法最常用的译码器芯片,74LS138( 3-8译码器 ) 74LS139
( 双 2-4译码器 ) 74LS154( 4-16译码器 ) 。 可根据设计任务的要求,产生片选信号 。
全译码,全部高位地址线都参加译码;
部分译码,仅部分高位地址线参加译码 。
(1)74LS138( 3~ 8译码器 )
引脚如图 8-5,译码功能如表 8-1( P167) 所示 。 当译码器的 输入为某一个固定编码时,其输出只有某一个固定的引脚输出为低电平,其余的为高电平 。
74LS138译码器真值表输 入 输 出
G1 G2A* G2B* C B A Y7* Y6* Y5* Y4* Y3* Y2* Y1* Y0*
( 2) 74LS139( 双 2-4译码器)
引脚如下图。真值表如表 8-2( P168) 所示。
下面以 74LS138为例,介绍如何进行地址分配。
例 要扩 8片 8KB的 RAM 6264,如何通过 74LS138把 64KB
空间分配给各个芯片?
采用的是全地址译码方式,单片机发地址码时,每次只能选中一个存储单元。同类存储器间不会产生地址重叠的问题。
如果 用 74LS138把 64K空间全部划分为每块 4KB,如何划分呢?见下图。
8.3.3 外部地址锁存器常用的 地址锁存器芯片有,74LS373,8282,74LS573
等。
1,锁存器 74LS373
带有三态门的 8D锁存器,其引脚其内部结构如下图。
引脚说明如下,
D7~ D0,8位数据输入线 。
Q7~ Q0,8位数据输出线 。
G:数据输入锁存选通信号,
OE*,数据输出允许信号
2,锁存器 8282
功能及内部结构与 74LS373完全一样,只是其引脚的排列与 74LS373不同,8282的引脚如下图。
引脚的排列 为绘制印刷电路板时的布线提供了方便。
3.锁存器 74LS573
输入的 D端和输出的 Q端也是依次排在芯片的两侧,
与锁存器 8282一样,为绘制印刷电路板时的布线提供了方便。
8.4 程序存储器 EPROM的扩展采用只读存储器,非易失性。
( 1)掩膜 ROM
在制造过程中编程。成本较高,因此只适合于大批量生产。
( 2)可编程 ROM( PROM)
用独立的编程器写入。但 PROM只能写入一次,
且不能再修改。
( 3) EPROM
电信号编程,紫外线擦除的只读存储器芯片。
( 4) E2PROM( EEPROM)
电信号编程,电信号擦除的 ROM芯片。读写操作与 RAM
几乎没有什么差别,只是写入的速度慢一些。但断电后能够保存信息。
( 5) Flash ROM
又称闪烁存储器,简称闪存。 大有取代 E2PROM的趋势。
8.4.1 常用 EPROM芯片介绍典型芯片是 27系 列 产品,例如,2764( 8KB× 8)、
27128( 16KB× 8),27256( 32KB× 8),27512
( 64KB× 8)。,27” 后面的数字表示其位存储容量。
扩展程序存储器时,应尽量用大容量的芯片。
1.常用的 EPROM芯片参数见表 8-4( P123)。 引脚如下图。
引脚功能如下:
A0~ A15,地址线引脚。数目决定存储容量来定,用来进行单元选择。
D7~ D0,数据线引脚
CE*,片选输入端
OE*,输出允许控制端
PGM*,编程时,加编程脉冲的输入端
Vpp,编程时,编程电压( +12V或 +25V) 输入端
Vcc,+5V,芯片的 工作 电压。
GND,数字地。
NC,无用端
2,EPROM芯片的工作方式
( 1)读出方式片选控制线为低,同时输出允许控制线为低,Vpp
为 +5V,指定地址单元的内容从 D7~ D0上读出。
( 2)未选中方式片选控制线为高电平。
( 3)编程方式
Vpp端加上规定高压,CE*和 OE*端加合适电平
(不同的芯片要求不同 ),就能将数据线上的数据写入到指定的地址单元。
( 4)编程校验方式
( 5)编程禁止方式输出呈高阻状态,不写入程序。
8.4.2 程序存储器的操作时序
1,访问程序存储器的控制信号
( 1) ALE
( 2) PSEN*
( 3) EA*
如果指令是从片外 EPROM中读取,ALE用于低 8位地址锁存,PSEN*接外扩 EPROM的 OE*脚。
P0口,分时低 8位地址总线和数据总线,P2口,高 8位地址线。
2,操作时序
(1) 应用系统中无片外 RAM
(2) 应用系统中接有片外 RAM
由图 (b)可看出:
( 1) 将 ALE用作定时脉冲输出时,执行一次 MOVX指令就会丢失一个脉冲 。
( 2) 只有在执行 MOVX指令时的第二个机器周期期间,
地址总线才由数据存储器使用 。
8.4.3 典型的 EPROM接口电路
1.使用单片 EPROM的扩展电路
2716,2732 EPROM价格贵,容量小,且难以买到 。
仅介绍 2764,27128,27256,27512芯片的接口电路 。
下图为 外扩 16K字节的 EPROM 27128的接口电路图 。
MCS-51外扩单片 32K字节的 EPROM 27256的接口。
程序存储器所占的地址空间,自己分析。
3,使用多片 EPROM的扩展电路
MCS-51扩展 4片 27128。
4片 27128各自所占的地址空间,自己分析。
8.5 静态数据存储器的扩展
8.5.1 常用的静态 RAM( SRAM) 芯片典型型号有,6116,6264,62128,62256。 +5V电源供电,双列直插封装,6116为 24引脚封装,6264、
62128,62256为 28引脚封装,引脚如下图。
各引脚功能如下,
A0~ A14,地址输入线 。
D0~ D7,双向三态数据线 。
CE*,片选信号输入 。 对于 6264芯片,当 26脚 (CS)为高电平时,且 CE*为低电平时才选中该片 。
OE*:读选通信号输入线。
WE*,写允许信号输入线,低电平有效。
Vcc,工作电源 +5V
GND,地有读出、写入、维持三种工作方式,这些工作方式的操作控制如表 8-6(P181)。
8.5.2 外扩数据存储器的读写操作时序
1.读片外 RAM操作时序
2,写片外 RAM操作时序写是 CPU主动把数据送上 P0口总线。故在时序上,CPU
先向 P0口总线上送完 8位地址后,在 S3状态就将数据送到 P0口总线。
8.5.3 典型的外扩数据存储器的接口电路图 8-21给出了用线选法扩展 8031外部数据存储器的电路 。
地址线为 A0~ A12,故 8031剩余地址线为三根。用线选法可扩展 3片 6264。 3片 6264对应的存储器空间如下表。
译码选通法扩展,如下图所示。
各片 62128地址分配见表 8-9。
表 8-9 各片 62128地址分配
P2.6 P2.7 译码输出 选中芯片 地址范围 存储容量
0 0 YO* IC1 0000H-3FFFH 16K
0 1 Y1* IC2 4000H-7FFFH 16K
1 0 Y2* IC3 8000H-BFFFH 16K
1 1 Y3* IC4 C000H-FFFFH 16K
单片 62256与 8031的接口电路 如图 8-23所示。地址范围为 0000H~ 7FFFH。
例 8-1 编写程序将片外数据存储器中 5000H~ 50FFH单元全部清零 。
方法 1:
用 DPTR作为数据区地址指针,同时使用字节计数器 。
MOV DPTR,#5000H; 设置数据块指针的初值
MOV R7,#00H ; 设置块长度计数器初值
CLR A
LOOP,MOVX @DPTR,A ;把某一单元清零
INC DPTR ; 地址指针加 1
DJNZ R7,LOOP ; 数据块长度减 1,若不为
0则继续清零
HERE,SJMP HERE ; 执行完毕,原地踏步方法 2:
用 DPTR作为数据区地址指针,但不使用字节计数器,
而是比较特征地址。
MOV DPTR,#5000H
CLR A
LOOP,MOVX @DPTR,A
INC DPTR
MOV R7,DPL
CJNE R7,#0,LOOP ; 与末地址 +1比较
HERE,SJMP HERE
8.6 EPROM和 RAM的综合扩展
8.6.1 综合扩展的硬件接口电路例 8-2 采用线选法扩展 2片 8KB的 RAM和 2片 8KB的
EPROM。 RAM选 6264,EPROM选 2764。扩展接口电路见下图 。
( 1)各芯片地址空间分配
( 2)控制信号及片选信号
IC2和 IC4占用地址空间为 2000H~ 3FFFH共 8KB。 同理
IC1,IC3地址范围 4000H~ 5FFFH( P2.6=1,P2.5=0、
P2.7=0)。 线选法地址不连续,地址空间利用不充分。
例 8-3 采用译码器法扩展 2片 8KB EPROM,2片 8KB RAM。
EPROM选用 2764,RAM选用 6264。共扩展 4片芯片。扩展接口电路见图 8-25。
各存储器的地址范围如下:
可见译码法进行地址分配,各芯片地址空间是连续的。
8.6.2 外扩存储器电路的工作原理及软件设计
1,单片机片外程序区读指令过程
2,单片机片外数据区读写数据过程例如,把片外 1000H单元的数送到片内 RAM 50H单元,
程序如下:
MOV DPTR,#1000H
MOVX A,@DPTR
MOV 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位地址输出。
例 8-4 将程序存储器中以 TAB为首址的 32个单元的内容依次传送到外部 RAM以 7000H为首地址的区域去。
DPTR指向标号 TAB的首地址 。 R0既指示外部 RAM的地址,
又表示数据标号 TAB的位移量 。 本程序的循环次数为 32,R0的值,0~ 31,R0的值达到 32就结束循环 。
程序如下:
MOV P2,#70
MOV DPTR,#TAB
MOV R0,#0
AGIN:MOV A,R0
MOVC A,@A+DPTR
MOVX @R0,A
INC R0
CJNE R0,#32,AGIN
HERE:SJMP HERE
TAB,DB ……
8.7 E2PROM的扩展保留信息长达 20年,不存在 EPROM在日光下信息缓慢丢失的问题 。
8.7.1 常用的 E2PROM芯片在芯片的引脚设计上,2KB的 E2PROM 2816与相同容量的 EPROM 2716和静态 RAM 6116兼容,8KB的 E2PROM
2864A与同容量的 EPROM 2764和静态 RAM 6264也是兼容的。 2816,2817和 2864A的读出数据时间均为
250ns,写入时间 10ms。
E2PROM的主要性能见表 8-10( P191)。
8.7.3 MCS-51扩展 E2PROM的方法
1.MCS-51外扩 2817A
2817A既可作为外部的数据存储器,又可作为程序存储器。通过 P1.0查询 2817A的 RDY/BUSY*状态,来完成对 2817A的写操作。片选信号由 P2.7提供。
2.MCS-51外扩 2864A
接口电路见图 8-28。片选端与 P2.7连接,P2.7=0才选中 2864A,线选法决定了 2864A对应多组地址空间,
即,0000H~ 1FFFH,2000H~ 3FFFH,4000H~ 5FFFH,
6000H~ 7FFFH。 8K字节的 2864A可作为数据存储器使用,但掉电后数据不丢失。
对 2864A装载一个页面数据 (16个字节 )的子程序 WR2如下,
被写入的数据取自源数据区,子程序入口参数为:
R1=写入 2864A的字节数 (16个字节 )
R2=2864A的低位地址
P2=2864A的高位地址
DPTR=源数据区首地址
WR2,MOVX A,@DPTR ; 取数据
MOV R2,A ; 数据暂存 R2,备查询
MOVX @R0,A ; 写入 2864A
INC DPTR ; 源地址指针加 1
INC R0 ; 目的地址指针加 1
CJNE R0,#00H,NEXT; 低位地址指针未满;转移
INC R2 ; 否则高位指针加 1
NEXT,DJNZ R1,WR2 ; 页面未装载完转移
DEC R0 ; 页面装载完后,恢复;最后写入数据的地址
LOOP,MOVX A,@R0 ; 读 2864A
XRL A,R2 ; 与写入的最后数据相异或
JB ACC.7,LOOP; 最高位不等,再查
RET ; 最高位相同,1页写完上述写入程序,完成页面装载的循环部分共 8条指令,
当采用 12MHz晶振时,进行时间约 13?s,完全符合
2864A的 tBLW宽度要求。
8.8 ATMEL89C51/89C55单片机的片内闪烁存储器
AT89C51/89C52/89C55是低功耗、高性能的 片内含有
4KB/8KB/20KB闪烁可编程 /擦除只读存储器芯片上的
FEPROM允许在线编程或采用通用的编程器对其重复编程。
1,89C51的主要性能
( 1) 与 MCS-51微控制器系列产品兼容 。
( 2) 片内有 4KB可在线重复编程的闪烁存储器
( Flash Memory) 。
( 3) 存储器可循环写入 /擦除 10000次 。
( 4) 存储器数据保存时间为 10年 。
( 5) 宽工作电压范围,Vcc可为 +2.7~ 6V。
( 6) 全静态工作:可从 0Hz~ 16MHz。
( 7) 程序存储器具有 3级加密保护 。
( 8)空闲状态维持低功耗和掉电状态保存存储器内容。
2,片内闪烁存储器 (Flash Memory)
E2PROM具有在线改写,并在掉电后仍能保存数据的特点,可为用户的特殊应用提供便利。但是,擦除和写入对于要有数据高速吞吐的应用还显得时间过长,
这是 E2PROM的主要缺陷。
表 8-12(P197)列出了几种 典型 E2PROM芯片 的主要性能数据。由表可见,所列各种芯片的字节擦除时间和写入时间 10ms,这样长的时间对于许多实际应用是不能接受的。
8.8.2 片内闪烁存储器的编程芯片内有 3个加密位,见表 8-13( P198)。
表 8-13
对 89C51片内的闪烁存储器编程,只需购买相应的编程器,按照编程器的说明进行操作。如想对写入的内容加密,只需按照编程器的菜单,选择加密功能选项既可。