第8章 AT89S51单片机外部 存储器的扩展 成都理工大学工程技术学院 自动化工程系 1
8.3.1 常用的EPROM芯片 8.3.2 程序存储器的操作时序 8.3.3 AT89S51单片机与EPROM的接口电路设计 第8章 目录 8.1 系统扩展结构 8.2 地址空间分配和外部地址锁存器 8.2.1 存储器地址空间分配 8.2.2 外部地址锁存器 8.3 程序存储器EPROM的扩展 8.3.1 常用的EPROM芯片 8.3.2 程序存储器的操作时序 8.3.3 AT89S51单片机与EPROM的接口电路设计 8.4 静态数据存储器RAM的扩展 8.4.1 常用的静态RAM(SRAM)芯片 8.4.2 外扩数据存储器的读写操作时序 2
8.4.3 AT89S51单片机与RAM的接口电路设计 8.5 EPROM和RAM的综合扩展 8.5.1 综合扩展的硬件接口电路 8.5.2 外扩存储器电路的工作原理及软件设计 8.6 E2PROM的扩展 8.6.1 并行E2PROM芯片简介 8.6.2 E2PROM的工作方式 8.6.3 AT89S51单片机扩展E2PROM AT2864的设计 8.7 片内Flash存储器的编程 8.7.1 通用编程器编程 8.7.2 ISP编程
内容概要 许多情况,片内的存储器资源还不能满足需要,为此需AT89S51单片机进行外部程序存储器和外部数据存储器的扩展。 由于有时需要扩展多片芯片,首先介绍AT89S51单片机的两个外部存储器空间的地址分配的两种方法,即线选法和译码法。最后介绍扩展外部程序存储器和外部数据存储器的具体设计。
AT89S51单片机采用总线结构,使扩展易于实现,AT89S51单片机系统扩展结构如图8-1所示。 8.1 系统扩展结构 AT89S51单片机采用总线结构,使扩展易于实现,AT89S51单片机系统扩展结构如图8-1所示。 图8-1 AT89S51单片机的系统扩展结构 5
由图8-1可以看出,系统扩展主要包括存储器扩展和I/O接口部件扩展。 AT89S51单片机的存储器扩展即包括程序存储器扩展又包括数据存储器扩展。AT89S51单片机采用程序存储器空间和数据存储器空间截然分开的哈佛结构。扩展后,系统形成了两个并行的外部存储器空间。 系统扩展是以AT89S51为核心,通过总线把单片机与各扩展部件连接起来。因此,要进行系统扩展首先要构造系统总线。 系统总线按功能通常分为3组,如图8-1所示。 6
(1)地址总线(Address Bus,AB):用于传送单片机发出的地址信号,以便进行存储单元和I/O接口芯片中的寄存器单元的选择。 (2)数据总线(Data Bus,DB):用于单片机与外部存储器之间或与I/O接口之间传送数据,数据总线是双向的。 (3)控制总线(Control Bus,CB):控制总线是单片机发出的各种控制信号线。
如何来构造系统的三总线。 1.P0口作为低8位地址/数据总线 AT89S51受引脚数目限制,P0口既用作低8位地址总线,又用作数据总线(分时复用),因此需增加一个8位地址锁存器。AT89S51访问外部扩展的存储器单元或I/O接口寄存器时,先发出低8位地址送地址锁存器锁存,锁存器输出作为系统的低8位地址(A7~ A0)。随后,P0口又作为数据总线口(D7~ D0),如图8-2所示。 2.P2口的口线作为高位地址线 P2口用作系统的高8位地址线,再加上地址锁存器提供的低8位地址,便形成了系统完整的16位地址总线。 8
使单片机系统的寻址范围达到64KB。 图8-2 AT89C51单片机扩展的片外三总线 9
3.控制信号线 除地址线和数据线外,还要有系统的控制总线。这些信号有的就是单片机引脚的第一功能信号,有的则是P3口第二功能信号。包括: (1) 作为外扩程序存储器的读选通控制信号。 (2) 和 为外扩数据存储器和I/O的读、写选通控制信号。 (3)ALE作为P0口发出的低8位地址锁存控制信号。 (4) 为片内、片外程序存储器的选择控制信号。 可见,AT89S51的4个并行I/O口,由于系统扩展的需要,真正作为数字I/O用,就剩下P1和P3的部分口线了。 10
8. 2 地址空间分配和外部地址锁存器 本节讨论如何进行存储器空间的地址分配,并介绍用于输出低8位地址的常用的地址锁存器。 8. 2 8.2 地址空间分配和外部地址锁存器 本节讨论如何进行存储器空间的地址分配,并介绍用于输出低8位地址的常用的地址锁存器。 8.2.1 存储器地址空间分配 实际系统设计中,既需要扩展程序存储器,又需要扩展数据存储器,如何把片外的两个64KB地址空间分配给各个程序存储器、数据存储器芯片,使一个存储单元只对应一个地址,避免单片机发出一个地址时,同时访问两个单元,发生数据冲突。这就是存储器地址空间分配问题。 11
AT89S51单片机发出的地址码用于选择某个存储器单元,外扩多片存储器芯片中,单片机必须进行两种选择:一是选中该存储器芯片,这称为“片选”,未被选中的芯片不能被访问。二是在“片选”的基础上再根据单片机发出的地址码来对“选中” 芯片的某一单元进行访问,即“单元选择”。 为实现片选,存储器芯片都有片选引脚。同时也都有多条地址线引脚,以便进行单元选择。注意,“片选”和“单元选择”都是单片机通过地址线一次发出的地址信号来完成选择。 通常把单片机系统的地址线笼统地分为低位地址线和高 12
位地址线,“片选”都是使用高位地址线。实际上,16条地址线中的高、低位地址线的数目并不是固定的,只是习惯上把用于 “单元选择”的地址线,都称为低位地址线,其余的为高位地址线。 常用的存储器地址空间分配方法有两种:线性选择法(简称线选法)和地址译码法(简称译码法),下面介绍。 1.线选法 是直接利用系统的某一高位地址线作为存储器芯片(或I/O接口芯片)的“片选”控制信号。为此,只需要把用到的高位地址线与存储器芯片的“片选”端直接连接即可。
线选法优点是电路简单,不需要另外增加地址译码器硬件电路,体积小,成本低。缺点是可寻址的芯片数目受到限制。另外,地址空间不连续,每个存储单元的地址不唯一,这会给程序设计带来不便,只适用于外扩芯片数目不多的单片机系统的存储器扩展。 2.译码法 使用译码器对AT89S51单片机的高位地址进行译码,译码输出作为存储器芯片的片选信号。这种方法能够有效地利用存储器空间,适用于多芯片的存储器扩展。常用的译码器芯片有74LS138(3线-8线译码器)、74LS139(双2线-4线译码器)和74LS154(4线-16线译码器)。 14
若全部高位地址线都参加译码,称为全译码;若仅部分高位地址线参加译码,称为部分译码。部分译码存在着部分存储器地址空间相重叠的情况。 下面介绍常用的译码器芯片。 (1)74LS138 3线-8线译码器,有3个数据输入端,经译码产生8种状态。引脚如图8-3所示,真值表见表8-1。由表8-1可见,当译码器的输入为某一固定编码时,其输出仅有一个固定的引脚输出为低电平,其余的为高电平。输出为低电平的引脚就作为某一存储器芯片的片选信号。 15
16
(2)74LS139 双2线-4线译码器。这两个译码器完全独立,分别有各自的数据输入端、译码状态输出端以及数据输入允许端,其引脚如图8-4所示,真值表见表8-2(只给出其中一组)。 图8-3 74LS138引脚图 图8-4 74LS139引脚图 17
以74LS138为例,如何进行地址分配。 例如,要扩8片8KB的RAM 6264,如何通过74LS138把64KB空间分配给各个芯片? 由74LS138真值表可知,把G1接到+5V, 、 接地,P2.7、P2.6、P2.5(高3位地址线)分别接74LS138的C、B、A端,由于对高3位地址译码,这样译码器有8个输出 ~ ,分别接到8片6264的各 “片选”端,实现8选1的片选。 低13位地址(P2.4~P2.0,P0.7~P0.0)完成对选中的6264芯片中的各个存储单元的“单元选择”。这样就把64KB存储器空间分成8个8KB空间了。 19
64KB地址空间分配如图8-5所示。 图8-5 64KB地址空间划分成8个8KB空间 这里采用全地址译码方式。因此,AT89S51发出16位地址时,每次只能选中某一芯片及该芯片的一个存储单元 20
如何用74LS138把64KB空间全部划分为4KB的块呢?4KB空间需12条地址线,而译码器输入只有3条地址线(P2.6~P2.4),P2.7没有参加译码,P2.7发出的0或1决定选择64KB存储器空间的前32KB还是后32KB,由于P2.7没有参加译码,就不是全译码方式,前后两个32KB空间就重叠了。那么,这32KB空间利用74LS138译码器可划分为8个4KB空间。 如果把P2.7通过一个非门与74LS138译码器G1端连接起来,如图8-6所示,就不会发生两个32KB空间重叠的问题了。这时,选中的是64KB空间的前32KB空间,地址范 21
围为0000H~7FFFH。如果去掉图8-6中的非门,地址范围为8000H~FFFFH。把译码器的输出连到各个4KB存储器的片选端,这样就把32KB空间划分为8个4KB空间。P2.3~P2.0,P0.7~P0.0实现“单元选择”,P2.6~P2.4通过74LS138译码实现对各存储器芯片的片选。 采用译码器划分的地址空间块都是相等的,如果将地址空间块划分为不等的块,可采用可编程逻辑器件FPGA对其编程来代替译码器进行非线性译码。
图8-6 存储器空间被划分成每块4KB 23
8.2.2 外部地址锁存器 受引脚数的限制,P0口兼用数据线和低8位地址线,为了将它们分离出来,需在单片机外部增加地址锁存器。目前,常用的地址锁存器芯片有74LS373、74LS573等。 1.锁存器74LS373 是一种带三态门的8D锁存器,其引脚如图8-7所示,内部结构如图8-8所示。AT89S51与74LS373锁存器的连接如图8-9所示。 24
图8-7 锁存器74LS373的引脚 25
图8-8 74LS373的内部结构 26
图8-9 AT89S51单片机P0口与74LS373的连接 27
G:数据输入锁存选通信号。当加到该引脚的信号为高电平时,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。 引脚说明: D7~D0:8位数据输入线, Q7~Q0:8位数据输出线。 G:数据输入锁存选通信号。当加到该引脚的信号为高电平时,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。 :数据输出允许信号,低电平有效。当该信号为低电平时,三态门打开,锁存器中数据输出到数据输出线。当该信号为高电平时,输出线为高阻态。 74LS373锁存器功能如表8-3。 28
图8-10 锁存器74LS573的引脚 29
由图8-10,与74LS373相比,74LS573的输入D端和输出Q端依次排列在芯片两侧,为绘制印制电路板提供方便 也是一种带有三态门的8D锁存器,功能及内部结构与74LS373完全一样,只是其引脚排列与74LS373不同,图8-10为74LS573引脚图。 由图8-10,与74LS373相比,74LS573的输入D端和输出Q端依次排列在芯片两侧,为绘制印制电路板提供方便 引脚说明: D7~D0:8位数据输入线。 Q7~Q0:8位数据输出线。 G :数据输入锁存选通信号,该引脚与74LS373的G端功能相同。 30
:数据输出允许信号,低电平有效。当该信号为低电平时,三态门打开,锁存器中数据输出到数据输出线。当该信号为高电平时,输出线为高阻态。 8.3 程序存储器EPROM的扩展 程序存储器采用只读存储器,因为这种存储器在电源关断后,仍能保存程序(我们称此特性为非易失性的),在系统上电后,CPU可取出这些指令重新执行。
只读存储器简称ROM(Read Only Memory)。ROM中的信息一旦写入,就不能随意更改,特别是不能在程序运行过程中写入新的内容,故称为只读存储器。 向ROM中写入信息称为ROM编程。根据编程方式不同,分为以下几种。 (1)掩模ROM。在制造过程中编程,是以掩模工艺实现的,因此称为掩模ROM。这种芯片存储结构简单,集成度高,但由于掩模工艺成本较高,因此只适合于大批量生产。 32
(2)可编程ROM(PROM)。芯片出厂时没有任何程序信息,用独立的编程器写入。但PROM只能写一次,写入内容后,就不能再修改。 (3)EPROM。用紫外线擦除,用电信号编程。在芯片外壳的中间位置有一个圆形窗口,对该窗口照射紫外线就可擦除原有的信息。使用编程器可将调试完毕的程序写入。 (4)E2PROM(EEPROM)。一种用电信号编程,也用电信号擦除的ROM芯片。对E2PROM的读写操作与RAM存储器几乎没有什么差别,只是写入的速度慢一些,但断电后仍能保存信息。 33
(5)Flash ROM。 又称闪速存储器(简称闪存),是在EPROM、E2PROM的基础上发展起来的一种电擦除型只读存储器。特点是可快速在线修改其存储单元中的数据,改写次数可达1万次,其读写速度很快,存取时间可达70ns,而成本比E2PROM低得多,大有取代E2PROM的趋势。 目前许多公司生产的8051内核的单片机,在芯片内部大多集成了数量不等的Flash ROM。 例如,美国ATMEL公司产品AT89C5x/AT89S5x,片内有不同容量的Flash ROM。在片内的Flash ROM满足要求下,扩展外部程序存储器可省去。 34
8.3.1 常用的EPROM芯片 使用较多的是并行EPROM,首先介绍常用EPROM芯片。 EPROM的典型芯片是27系列产品,例如,2764(8KB)、27128(16KB)、27256(32KB)、27512(64KB)。型号 “27”后面的数字表示其位存储容量。如果换算成字节容量,只需将该数字除以8即可。 例如,“27128”中的“27”后的数字 “128”,128/8 =16KB 随着大规模集成电路技术的发展,大容量存储器芯片产量剧增,售价不断下降,性价比明显增高,且由于小容量芯片停止生产,使市场某些小容量芯片价格反而比大容量芯片还贵。所以,应尽量采用大容量芯片。 35
A0~A15:地址线引脚。它的数目由芯片的存储容量决定,用于进行单元选择。 1.常用EPROM芯片引脚 27系列EPROM芯片的引脚如图8-11。 芯片引脚功能: A0~A15:地址线引脚。它的数目由芯片的存储容量决定,用于进行单元选择。 D7~D0:数据线引脚。 :片选控制端。 :输出允许控制端。 :编程时,编程脉冲的输入端。 36
图8-11 常用EPROM芯片引脚
VPP:编程时,编程电压(+12V或+25V)输入端。 VCC:+5V,芯片的工作电压。 GND :数字地。 NC:无用端。 表8-4为27系列EPROM芯片的技术参数,其中VCC是芯片供电电压,VPP是编程电压,Im为最大静态电流,Is为维持电流,TRM为最大读出时间。 38
39
2.EPROM芯片的工作方式 5种工作方式,由 、 、 信号的组合确定。5种工作方式如表8-5。 40
(1)读出方式。工作在该方式的条件是使片选控制线 为低电平,同时让输出允许控制线 为低电平,VPP为+5V,就可把指定地址单元的内容从D7~D0上读出。 (2)未选中方式。当片选控制线 为高电平时,芯片未选中方式,数据输出为高阻抗悬浮状态,不占用数据总线。EPROM处于低功耗的维持状态。 (3)编程方式。在VPP端加上规定好的高压, 和 端加上合适的电平(不同芯片要求不同),能将数据写入到指定地址单元。编程地址和编程数据分别由系统的A15~A0和D7~D0提供。 41
(4)编程校验方式。VPP端保持相应的编程电压(高压),再按读出方式操作,读出固化好的内容,校验写入内容是否正确。 (5)编程禁止方式。 8.3.2 程序存储器的操作时序 1.访问程序存储器的控制信号 AT89S51单片机访问片外扩展的程序存储器时,所用的控制信号有以下3种。 (1)ALE:用于低8位地址锁存控制。 (2) :片外程序存储器“读选通”控制信号。它接外扩EPROM的 引脚。
(3) :片内、片外程序存储器访问的控制信号。当 =1时,在单片机发出的地址小于片内程序存储器最大地址时,访问片内程序存储器; 当 =0时,只访问片外程序存储器。 如果指令是从片外EPROM中读取的,除了ALE用于低8位地址锁存信号之外,控制信号还有 , 接外扩EPROM的 脚。此外,P0口分时用作低8位地址总线和数据总线,P2口用作高8位地址线。 2.操作时序 AT89S51对片外ROM的操作时序分两种,即执行非MOVX指令的时序和执行MOVX指令的时序,如图8-12所示。 43
(1)应用系统中无片外RAM 系统无片外RAM(或I/O)时,不用执行MOVX指令。 在执行非MOVX指令时,时序如图8-12(a)所示。 P0口作为地址/数据复用的双向总线,用于输入指令或输出程序存储器的低8位地址PCL。 P2口专门用于输出程序存储器的高8位地址PCH。P0口分时复用,故首先要将P0口输出的低8位地址PCL锁存在锁存器中,然后P0口再作为数据口。在每个机器周期中,允许地址锁存两次有效,ALE在下降沿时,将P0口的低8位地址PCL锁存在锁存器中。 44
图8-12 执行非MOVX指令的时序
同时, 也是每个机器周期中两次有效,用于选通片外程序存储器,将指令读入片内。 系统无片外RAM(或I/O)时,此ALE信号以振荡器频率的1/6出现在引脚上,它可用作外部时钟或定时脉冲信号。 (2)应用系统中接有片外RAM 在执行访问片外RAM(或I/O)的MOVX指令时,16位地址应转而指向数据存储器,时序如图8-12(b)。 在指令输入以前,P2口输出的地址PCH、PCL指向程序存储器;在指令输入并判定是MOVX指令后, ALE在该 46
图8-12 执行MOVX指令的时序
机器周期S5状态锁存的是P0口发出的片外RAM(或I/O)低8位地址。 若执行的是“MOVX A,@DPTR”或 “MOVX @DPTR,A”指令,则此地址就是DPL(数据指针低8位);同时,在P2口上出现的是DPH(数据指针的高8位)。 若执行的是“MOVX A,@Ri”或“MOVX @Ri,A”指令,则Ri的内容为低8位地址,而P2口线上将是P2口锁存器的内容。在同一机器周期中将不再出现 有效取指信号,下一个机器周期中ALE的有效锁存信号也不再出现;当 / 有效时,P0口将读/写数据存储器中的数据。 48
判定是MOVX指令后,ALE在该机器周期S5状态锁存的是P0口发出的片外RAM(或I/O)低8位地址。 若执行的是“MOVX A,@DPTR”或是“MOVX @DPTR,A”指令,则此地址就是DPL(数据指针低8位);同时,在P2口上出现的是DPH(数据指针的高8位)。 若执行的是“MOVX A,@Ri”或“MOVX @Ri,A”指令,则Ri内容为低8位地址,而P2口线将是P2口锁存器内容。在同一机器周期中将不再出现 有效取指信号,下一个机器周期中ALE的有效锁存信号也不再出现;而当 / 有效时,P0口将读/写数据存储器中的数据。 49
由图8-12(b)可以看出: (1)将ALE用作定时脉冲输出时,执行一次MOVX指令就会丢失一个ALE脉冲; (2)只有在执行MOVX指令时的第二个机器周期中,才对数据存储器(或I/O)读/写,地址总线才由数据存储器使用。 8.3.3 AT89S51单片机与EPROM的接口电路设计 由于AT89S5x单片机片内集成不同容量的Flash ROM,可根据实际需要来决定是否外部扩展EPROM。当应用程序不大于单片机片内的Flash ROM容量时,扩展外部程序存储器的工作可省略。
但作为扩展外部程序存储器的基本方法,还是应掌握。 1.AT89S51与单片EPROM的硬件接口电路 在设计接口电路时,由于外扩的EPROM在正常使用中只读不写,故EPROM芯片只有读出控制引脚,记为 ,该引脚与AT89S51单片机的 相连,地址线、数据线分别与AT89S51单片机的地址线、数据线相连,片选端控制可采用线选法或译码法。 介绍2764、27128芯片与AT89S51的接口。更大容量的27256、27512与AT89S51的连接,差别只是连接的地址线数目不同。 51
由于2764与27128引脚的差别仅在26脚,2764的26脚是空脚,27128的26脚是地址线A13,因此在设计外扩存储器电路时,应选用27128芯片设计电路。在实际应用时,可将27128换成2764,系统仍能正常运行。 图8-13所示为AT89S51外扩16KB的EPROM 27128的电路。 由于只扩展一片EPROM,所以片选端 直接接地,也可接到某一高位地址线上(A15或A14)进行线选,也可接某一地址译码器的输出端。 52
图8-13 AT89S51单片机与27128的接口电路
2.使用多片EPROM的扩展电路 图8-14所示为利用4片27128 EPROM扩展成64KB程序存储器的方法。片选信号由译码器产生。4片27128各自所占的地址空间,读者自己分析。 8.4 静态数据存储器RAM的扩展 在单片机应用系统中,外部扩展的数据存储器都采用静态数据存储器(SRAM)。 对外部扩展的数据存储器空间访问,P2口提供高8位地址,P0口分时提供低8位地址和8位双向数据总线。片外数据存储器RAM的读和写由AT89S51的 (P3.7)和 (P3.6)信号控制。 54
图8-14 AT89S51与4片27128 EPROM的接口电路
而片外程序存储器EPROM的输出端允许( )由单片机的读选通 信号控制。 尽管与EPROM的地址空间范围相同,但由于控制信号不同,不会发生总线冲突。 8.4.1 常用的静态RAM(SRAM)芯片 单片机系统中常用的RAM芯片的典型型号有6116(2KB ),6264(8KB),62128(16KB),62256(32KB)。 6116为24脚封装,6264、62128、62256为28脚封装。这些RAM芯片的引脚如图8-15所示。 56
图8-15 常用的RAM引脚图 57
各引脚功能: A0~A14:地址输入线。 D0~D7:双向三态数据线。 :片选信号输入线。对6264芯片,当24脚(CS)为高电平且 为低电平时才选中该片。 :读选通信号输入线,低电平有效。 :写允许信号输入线,低电平有效。 VCC —工作电源+5V。 GND —地。 RAM存储器有读出、写入、维持3种工作方式,工作方式的控制见表8-6。 58
8.4.2 外扩数据存储器的读写操作时序 对片外RAM读和写两种操作时序的基本过程相同。 1.读片外RAM操作时序 若外扩一片RAM,应将 脚与RAM的 脚连接, 脚与芯片 脚连接。
单片机读片外RAM操作时序如图8-16所示。 在第一个机器周期的S1状态,ALE信号由低变高(①处),读RAM周期开始。在S2状态,CPU把低8位地址送到P0口总线上,把高8位地址送上P2口(在执行“MOVX A,@DPTR”指令阶段才送高8位;若执行“MOVX A,@Ri”则不送高8位)。 ALE下降沿(②处)用来把低8位地址信息锁存到外部锁存器74LS373内。而高8位地址信息一直锁存在P2口锁存器中(③处)。 在S3状态,P0口总线变成高阻悬浮状态④。在S4状态,执行指令“MOVX A,@DPTR”后使 信号变有效 60
图8-16 AT89S51单片机读片外RAM操作时序图 61
(⑤处), 信号使被寻址的片外RAM过片刻后把数据送上P0口总线(⑥处),当 回到高电平后(⑦处),P0总线变悬浮状态(⑧处)。 向片外RAM写数据,单片机执行“MOVX @DPTR,A”指令。 指令执行后,AT89S51的 信号为低有效,此信号使RAM的 端被选通。 写片外RAM的时序如图8-17所示。开始的过程与读过程类似,但写的过程是CPU主动把数据送上P0口总线,故在时序上,CPU先向P0口总线上送完8位地址后,在S3状态就将数据送到P0口总线(③处)。此间,P0总线上不会出现高阻悬浮现象。
图8-17 AT89S51单片机写片外RAM操作时序图 63
在S4状态,写信号 有效(⑤处),选通片外RAM,稍过片刻,P0口上的数据就写到RAM内了,然后写信号 变为无效(⑥处)。 8. 4 在S4状态,写信号 有效(⑤处),选通片外RAM,稍过片刻,P0口上的数据就写到RAM内了,然后写信号 变为无效(⑥处)。 8.4.3 AT89S51单片机与RAM的接口电路设计 AT89S51对片外RAM的读和写由AT89S51单片机的 (P3.7)和 (P3.6)控制,片选端由译码器译码输出控制。因此设计时,主要解决地址分配、数据线和控制信号线的连接问题。在与高速单片机连接时,还要根据时序解决读/写速度匹配问题。 图8-18为用线选法扩展AT89S51外部数据存储器电路。图中数据存储器选用6264,该芯片地址线为A0~A12,故AT89S51剩余地址线为3条。 64
图8-18 线选法扩展外部数据存储器电路图 65
用线选可扩展3片6264,对应的存储器空间见表8-7。 用译码法扩展外部数据存储器的接口电路如图8-19所示。数据存储器62128,芯片地址线为A0~A13,剩余地址线为两条,若采用2线-4线译码器可扩展4片62128。各片62128芯片地址分配如表8-8所示。 66
图8-19 译码法扩展外部数据存储器电路图 67
【例8-1】编写程序将片外数据存储器中5000H~50FFH单 元全部清“0”。 方法1 用DPTR作为数据区地址指针,同时使用字节计数 器。参考程序如下: 68
MOV DPTR,#5000H ;设置数据块指针的初值 MOV R7,#00H ;设置块长度计数器初值(00H是 ;循环256次) CLR A LOOP: MOVX @DPTR,A ;给一单元送“00H” INC DPTR ;地址指针加1 DJNZ R7,LOOP ;数据块长度减1, 若不为0则跳 ;LOOP继续清“0” HERE: SJMP HERE ;执行完毕, 原地踏步 69
方法2 用DPTR作为数据区地址指针,但不使用字节计数器,而是比较特征地址。参考程序如下: MOV DPTR,#5000H;设置数据块指针的初值 CLR A ;A清0 LOOP: MOVX @DPTR,A ;给一单元送“00H” INC DPTR ;数据块地址指针加1 MOV R7,DPL ;数据块末地址加1送R7 CJNE R7,#0,LOOP ;与末地址+1比较 HERE: SJMP HERE 70
8.5 EPROM和RAM的综合扩展 在系统设计中,经常是既要扩展程序存储器,也要扩展数据存储器(RAM)或I/O,即进行存储器的综合扩展。下面介绍如何进行综合扩展。 8.5.1 综合扩展的硬件接口电路 【例8-2】 采用线选法扩展2片8KB的RAM和2片8KB的EPROM。RAM芯片选用2片6264。扩展2片EPROM芯片,选用2764。硬件接口电路如图8-20所示。 71
图8-20 采用线选法的综合扩展电路图示例 72
(1)控制信号及片选信号 地址线P2. 5直接接到IC1(2764)和IC3(6264)的片选 端,P2 (1)控制信号及片选信号 地址线P2.5直接接到IC1(2764)和IC3(6264)的片选 端,P2.6直接接到IC2(2764)和IC4(6264)的片选 端。 当P2.6=0,P2.5=1时,IC2和IC4的片选端为低电平,IC1和IC3的 端全为高电平。 当P2.6=1,P2.5=0时,IC1和IC3的 端都是低电平,每次同时选中两个芯片,具体对哪个芯片进行读/写操作还要通过 、 、 控制线来控制。 当 为低电平时,到片外程序存储区EPROM中读程序;当读/写信号 或 为低电平时,则对片外 73
RAM读数据或写数据 、 、 3个信号是在执行指令时产生的,任意时刻只能执行一条指令,所以只能有一个信号有效,不可能同时有效,所以不会发生数据冲突。 (2)各芯片地址空间分配 硬件电路一旦确定,各芯片的地址范围实际上就已经确定,编程时只要给出所选择芯片的地址,就能对该芯片进行访问。结合图8-20,介绍IC1、IC2、IC3、IC4芯片地址范围的确定方法。 存储器地址均用16位,P0口确定低8位,P2口确定高8位。 如果P2.6=0、P2.5=1,选中IC2、IC4。地址线A15~A0与P2、P0对应关系如下:
同理IC1、IC3的地址范围为C000H~DFFFH。 除P2.6、P2.5固定外,其他“×”位均可变。设无用位P2.7 = 1,当“×”各位全为“0”时,则为最小地址A000H;当“×”均为“1”时,则为最大地址BFFFH。IC2、IC4的地址空间为A000H~BFFFH共8KB。 同理IC1、IC3的地址范围为C000H~DFFFH。 4片存储器各自所占的地址空间如表8-9所示。 即使地址空间重叠,也不会发生数据冲突。IC1与IC3也同样如此。 75
下面介绍采用译码器法进行地址空间分配的例子。 76
【例8-3】采用译码法扩展2片8KB EPROM和2片8KB RAM。EPROM选用2764,RAM选用6264。 扩展接口电路如图8-21所示。图中,74LS139的4个输出端, ~ 分别连接4个芯片IC1、IC2、IC3、IC4的片选端。 74LS139在对输入端译码时, ~ 每次只能有一位输出为“0”,其他三位全为“1”,输出为“0”的一端所连接的芯片被选中。 译码法地址分配,首先要根据译码芯片真值表确定译码芯片的输入状态,由此再判断其输出端选中芯片的地址。 77
图8-21 采用译码法的综合扩展电路图示例 78
如图8-21,74LS139的输入端A、B、 分别接P2口的P2. 5、P2. 6、P2 如图8-21,74LS139的输入端A、B、 分别接P2口的P2.5、P2.6、P2.7三端, 为使能端,低电平有效。 由表8-2 74LS139的真值表可见,当 =0、A=0、B=0时,输出端只有 为“0”, ~ 全为“1”,选中IC1。这样,P2.7、P2.6、P2.5全为0,P2.4~P2.0与P0.7~P0.0这13条地址线的任意状态都能选中IC1的某一单元。 当13条地址线全为“0”时,为最小地址0000H; 当13条地址线全为“1”时,为最大地址1FFFH。 所以IC1的地址范围为0000H~1FFFH。同理可确定电路中各个存储器地址范围见表8-10。 79
为使读者弄清楚单片机与扩展的存储器软、硬件之间的关系,结合图8-21所示的译码电路,说明片外读指令和从片外读/写数据的过程。 8.5.2 外扩存储器电路的工作原理及软件设计 为使读者弄清楚单片机与扩展的存储器软、硬件之间的关系,结合图8-21所示的译码电路,说明片外读指令和从片外读/写数据的过程。 80
1.单片机片外程序区读指令过程 单片机复位后,CPU就从0000H地址开始取指令,执行程序。 取指令期间,低8位地址送P0口,经锁存器A0~A7输出。高8位地址送往P2口,直接由P2.0~P2.4锁存到A8~A12地址线上,P2.5~P2.7输入给74LS139进行译码输出片选。这样,根据P2口、P0口状态则选中第一个程序存储器芯片IC1(2764)的第一个单元地址0000H。然后当PSEN*变为低时,把0000H中指令代码经P0口读入内部RAM中进行译码,从而决定进行何种操作。 81
取出一个指令字节后PC自动加1,然后取第二个字节,依次类推。当PC=1FFFH时,从IC1最后一个单元取指令,然后PC = 2000H,CPU向P2口、P0口送出2000H地址时,则选中第二个程序存储器IC2,IC2的地址范围为2000H~3FFFH,读指令过程同IC1,不再赘述。 2.单片机片外数据区读/写数据过程 当程序运行中,执行“MOV”类指令时,表示与片内RAM交换数据;当遇到“MOVX”类指令时,表示对片外数据存储器区寻址。片外数据存储器区只能间接寻址。 例如,把片外6000H单元的数据送到片内RAM 50H单元中,程序如下: 82
向片外数据区写数据的过程与读数据的过程类似。 例如,把片内50H单元的数据送到片外4000H单元中,程序如下: MOV DPTR,#6000H MOVX A,@DPTR MOV 50H,A 向片外数据区写数据的过程与读数据的过程类似。 例如,把片内50H单元的数据送到片外4000H单元中,程序如下: MOV A,50H MOV DPTR,#4000H MOVX @DPTR,A 执行第1条指令,先把片内RAM 50H单元的数据送到A中,第2条指令把寻址地址4000H送到数据指针寄存器DPTR
中,当执行“MOVX @DPTR,A”时,DPTR的低8位(00H)由P0口输出并锁存,高8位(40H)由P2口直接输出,根据P0口、P2口状态选中IC3(6264)的4000H单元。当写选通信号 有效时,A中的内容送往片外4000H单元。 单片机读写片外数据存储器中内容,除了用“MOVX A,@DPTR”和“MOVX @DPTR,A”外,还可用指令“MOVX A,@Ri”和“MOVX @Ri,A”。这时P0口装入Ri中内容(低8位地址),而把P2口原有的内容作为高8位地址输出。例8-4是采用“MOVX @Ri,A”指令的例子。 84
【例8-4】编程,将程序存储器中以TAB为首址的32个单元内容依次传送到外部RAM以4000H为首址的区域。 DPTR指向标号TAB首地址。R0既指示外部RAM的地址,又表示数据标号TAB的位移量。程序为一循环程序,循环次数为32,R0的值达到32就结束循环。参考程序: MOV P2,#40H ; MOV DPTR,#TAB ;要传送数据的首地址#TAB送 ;入数据指针DPTR MOV R0,#0 ;R0的初始值为0 AGIN: MOV A,R0 85
MOVC A,@A+DPTR ;把以TAB为首址32个单元内 ;容送入A MOVX @R0,A ;程序存储器中表的内容送入 ;外部RAM单元 INC R0 ;循环次数加1,也即外部 ;RAM单元的地址指针加1 CJNE R0,#32,AGIN;判32个单元的数据是否已经 ;传送完毕,未完则继续 HERE: SJMP HERE ;原地跳转,模拟一段实际要 ;执行的其他程序段 TAB: DB ……,…… ;外部程序存储器中要传送的 ;32个单元的内容 86
8.6 E2PROM的扩展 在应用中,某些状态参数,不仅要求能够在线修改,而且断电后能保持,以备上电后恢复系统的状态。可选用具有断电保护功能的RAM和E2PROM。 断电保护功能的RAM容量大、速度快,但占用口线多,成本高。 E2PROM突出优点是能够在线擦除和改写,无须像用紫外线照射才能擦除,不存在在日光下信息缓慢丢失的问题。 E2PROM在写入时能自动完成擦除,且不再需要专用的编程电源,可直接使用单片机系统的+5V电源。 87
此外, E2PROM使单片机系统的设计,特别是调试实验更为方便、灵活。在调试程序时,用E2PROM代替仿真EPROM,既可方便地修改程序,又能保存调试好的程序。 当然,与RAM芯片相比, E2PROM的写入速度是比较慢,写入一个字节需要ms量级的时间。因此, E2PROM适合于数据交换量较少,对传送速度要求不高的场合。 另外,它的擦除/写入是有寿命限制的,虽有1万次之多,但也不宜用在数据频繁更新的场合。因此,应注意平均的使用各单元,不然有些单元可能会提前结束寿命。
与单片机的连接,有并行和串行之分。 并行的速度比串行快,容量大。并行的E2PROM 2864的容量为8k×8位,有时需要与单片机的接口连线少,这时可选用串行I2C接口的E2PROM 。 目前比较流行的是24系列的E2PROM ,主要由ATMEL、MICROCHIP等几家公司提供。典型芯片有AT24C02,AT24C08,AT24C16。 串行I2C接口扩展将在第12章中介绍。本节只介绍单片机与并行E2PROM芯片的接口设计与编程。 89
8.6.1 并行E2PROM芯片简介 常见的并行芯片有2816/2816A,2817/2817A,2864A等。引脚如图8-22所示,其主要性能见表8-11 (表中芯片均为Intel公司产品)。 在引脚设计上,2KB的E2PROM 2816与相同容量的EPROM 2716和静态RAM 6116是兼容的,8KB的E2PROM 2864A与同容量的EPROM 2764和静态RAM 6264也是兼容的。 2816、2817和2864A的读出数据时间均为250ns,写入时间10ms。 90
图8-22 常见的并行E2PROM引脚图 91
92
8.6.2 E2PROM的工作方式 下面对E2PROM 2864A的4种工作方式作以说明。 1.维持方式 当 为高电平时,2864A进入低耗维持方式。此时,输出线呈高阻态,芯片的电流从140mA降至维持电流60mA。 2.读方式 当 和 均为低而 为高时,内部的数据缓冲器被打开,数据送上总线,此时可进行读操作。 3.写方式 2864A提供两种数据写入方式:页写入和字节写入。 93
(1)页写入 为提高写速度,2864A片内设置16字节的“页缓冲器”,将整个存储器阵列划分成512页,每页16字节。高9位(A12~A4) 确定页,低4位(A3~A0) 选择页缓冲器中的16个地址单元之一。 写操作分两步来实现: 第一步,在软件控制下把数据写入页缓冲器,这步称为页装载,与一般的静态RAM写操作是一样的。 第二步,在最后一个字节(即第16个字节)写入到页缓冲器后20ns自动开始,把页缓冲器的内容写到E2PROM阵列中对应地址的单元中,这一步称为页存储。 94
写方式时, 为低,在 下降沿,地址码A12~A0被片内锁存器锁存,在 上升沿数据被锁存。 片内有一个字节装载限时定时器,只要时间未到,数据可随机地写入页缓冲器。在连续向页缓冲器写数据过程中,不用担心限时定时器会溢出,因为每当 下降沿时,限时定时器自动被复位并重新启动计时。限时定时器要求写一个字节数据时间TBLW须满足:3s<TBLW<20s,这是正确对2864A页面写操作的关键。当一页装载完毕,不再有 信号时,限时定时器将溢出,页存储操作随即自动开始。首先把选中页的内容擦除,然后写入的数据由页缓冲器传递到E2PROM阵列中。 95
(2)字节写入 与页写入类似,写入一个字节,限时定时器就溢出。 4 (2)字节写入 与页写入类似,写入一个字节,限时定时器就溢出。 4. 数据查询方式 用软件来检测写操作中页存储周期是否完成。在页存储期间,如对2864A执行读操作,那么读出的是最后写入的字节,若芯片的转储工作未完成,则读出数据的最高位是原来写入字节最高位的反码。据此,单片机可判断芯片的编程是否结束。如果读出的数据与写入的数据相同,表示芯片已完成编程,可继续向2864A装载下一页数据。 上面介绍的E2PROM都是针对Intel公司的产品,其它公司的产品不一定相同。 96
接口电路如图8-23所示。2864A的片选端 与P2.7连接,8K字节存储器可作为数据存储器用,但掉电后数据不丢失。 8.6.3 AT89S51扩展E2PROM AT2864设计 接口电路如图8-23所示。2864A的片选端 与P2.7连接,8K字节存储器可作为数据存储器用,但掉电后数据不丢失。 AT89S51对2864A进行写操作时所用指令包括: MOVX @DPTR,A MOVX @Ri,A AT89S51对2864A进行读操作时所用指令包括: MOVX A,@DPTR MOVX A,@Ri 97
图8-23 2864A与AT89S51单片机的接口电路 98
下面介绍对2864A装载一个页面数据(16个字节)的子程序WR2的编写。 被写入的数据取自源数据区,子程序入口参数为: R1=写入2864A的字节数(16B) R2=2864A的低位地址 P2=2864A的高位地址 DPTR=源数据区首地址 99
WR2: MOVX A,@DPTR ;取写入的数据 MOV R2,A ;数据暂存R2,备查询 MOVX @R0,A ;写入2864A INC DPTR ;源地址指针加1 INC R0 ;目的地址指针加1 CJNE R0,#00H,NEXT;低位地址指针未满跳NEXT处 INC R2 ;否则高位指针加1 NEXT: DJNZ R1,WR2 ;页面未装载完转移 DEC R0 ;页装载完,恢复最后写入数据的地址 LOOP: MOVX A,@R0 ;读2864A XRL A, R2 ;与写入的最后一个数据相异或 JB ACC.7,LOOP ;最高位不等,再查 RET ;最高位相同,一页写完 100
上述写入程序中,完成页面装载的循环部分共8条指令,当采用12MHz晶振时,进行时间约为13s,完全符合2864A的TBLW的宽度要求。 8 上述写入程序中,完成页面装载的循环部分共8条指令,当采用12MHz晶振时,进行时间约为13s,完全符合2864A的TBLW的宽度要求。 8.7 片内Flash存储器的编程 讨论如何把调试完毕的程序写入AT89S51的片内Flash存储器,即Flash存储器编程问题。 AT89S51片内4K字节Flash存储器的基本性能如下: (1)可循环写入/擦除1 000次。 (2)存储器数据保存时间为10年。 (3)程序存储器具有3级加密保护。 101
AT89S51出厂时,Flash存储器处于全部空白状态(各单元均为FFH),可直接进行编程。若不全为空白状态(即单元中有不是FFH的),应首先将芯片擦除后,方可写入程序。 AT89S51片内的Flash存储器有3个可编程的加密位,定义了3个加密级别,只要对3个加密位:LB1、LB2、LB3进行编程即可实现3个不同级别的加密。3个加密位的状态可以是编程(P)或不编程(U),3个加密位的状态所提供的3个级别的加密功能见表8-12。 对3个加密位的编程可参照表8-13所列控制信号来进行,也可按照所购买的编程器的菜单,选择加密功能 102
选项(如果有的话)即可。 经过上述加密处理,使解密难度加大,但还可解密。 现在有一种非恢复性加密(OTP加密)方法,就是将AT89S51的第31脚( 脚)烧断或某些数据线烧断,经过上述处理的芯片仍正常工作,但不再具有读取、擦除、重复烧写等功能。是一种较强的加密手段。国内某些厂家编程器直接具有此功能(例如RF-1800编程器)。 如何将调试好的程序写入到片内的Flash存储器中?片内Flash存储器有低电压编程(VPP=5V)和高电压编程(VPP=12V)两类芯片。 104
低电压编程可用于在线编程,高电压编程与一般常用的EPROM编程器兼容。在AT89S51芯片的封装面上标有低电压编程还是高电压编程的编程电压标志。 应用程序在PC机中与在线仿真器以及用户目标板一起调试通过后,PC机中调试完毕的程序代码文件(.Hex目标文件),必须写入到AT89S51片内的闪速存储器中。 目前常用的编程方法主要有两种:一种是使用通用编程器编程,另一种是使用下载型编程器进行编程。下面介绍如何对AT89S51片内的Flash存储器进行编程。 105
8.7.1 通用编程器编程 下载程序时,编程器只是将AT89S51看作一个待写入程序的外部程序存储器芯片。PC机中的程序代码一般通过串行口或USB口与PC机连接,并有相应的服务程序。 在编程器与PC机连接好以后,运行服务程序,在服务程序中先选择所要编程的单片机型号,再调入.Hex目标文件,编程器就将目标文件烧录到单片机片内的Flash存储器中。开发者只需在市场购买现成的编程器。下面以市场上常见RF-810编程器为例,介绍基本功能。 RF-810编程器的性能特点如下: 106
(1)可对100余厂家的1000多种常用器件进行编程与测试。 (2)采用40脚锁紧插座,与PC机并行口(打印机口)连机 工作。 (3)可自行调整烧录电压的参数,具有芯片损坏、插反检测 功能,可有效地保护芯片。 (4)对各种单片机内Flash存储器、EPROM、E2PROM、 PLD进行编程。 RF-810编程器配备全中文的Windows环境下运行的驱动软件。对芯片的编程不需要人工干预,软件用户界面易学,使用方便。
RF-810编程器套件包括:RF-810编程器主机,并口电缆及匹配器插座以及AC/DC电源适配器等。使用编程器前应先进行硬件安装和软件安装。 硬件安装时,首先把编程器的电缆与PC机并行口连接好后,再接通PC机电源,打开编程器的电源开关,编程器主机上的电源灯亮。此时,再进行编程器软件安装。PC机电源接通后,进入Windows环境。编程器的软件安装与普通软件的安装方法相同。软件安装完毕后,自动在桌面上形成RF-810编程器的图标。 点击RF-810编程器的图标,进入主菜单。主菜单下有如下功能的快捷方式图标的命令可供选择。 108
(1)选择要编程芯片的厂家、类型、型号、容量等。 (2)编程的内容调入缓冲区,进行浏览、修改操作。 (3)检查器件是否处于空白状态。 (4)可按照擦除、编程、校验等操作顺序自动完成对器件的全部操作过程。 (5)把缓冲区的内容写入到芯片内并进行校验。 (6)把器件的内容读入到缓冲区。 (7)校对器件内容和缓冲区内容是否一致,并列出有差异的第一个单元的地址。 (8)逐单元比较器件内容和缓冲区内容有无差异,并将有差异的单元列表显示。 109
(9)将器件的内容在屏幕上显示。 具体使用,可详细阅读所购买的编程器的使用说明书。 8. 7 (9)将器件的内容在屏幕上显示。 具体使用,可详细阅读所购买的编程器的使用说明书。 8.7.2 ISP编程 AT89S5x系列单片机支持ISP。是指在电路板上的被编程的空白器件可以直接写入程序代码,而不需要从电路板上取下器件,已编程的器件也可用ISP方式擦除或再编程。 ISP下载编程器可以自行制作,也可电子市场购买。 ISP下载编程器与单片机一端连接的端口通常采用ATMEL公司提供的接口标准,即10引脚的IDC端口。图8-24为IDC端口的实物图以及端口的定义。 110
图8-24 IDC端口的实物图以及端口的定义 111
采用ISP下载程序时,用户板上必须装有上述IDC端口,端口信号线必须与目标板上AT89S51的对应引脚连接。注意,图中的8脚P1 采用ISP下载程序时,用户板上必须装有上述IDC端口,端口信号线必须与目标板上AT89S51的对应引脚连接。注意,图中的8脚P1.4( )端只对AT89LP系列单片机有效,对AT89S5x系列单片机无效,不用连接。 常见市售的ISP下载型编程器为ISPro下载型编程器。用户将安装光盘插入光驱,运行安装程序SETUP.exe即可。安装后,在桌面上建立一个“ISPro.exe下载型编程器”图标,双击该图标,即可启动编程软件。 ISPro下载型编程器软件的使用与RF-810软件的使用方法基本相同,可参照编程器使用说明书进行操作。 112
上面介绍了两种程序下载的方法,就单片机的发展方向而言,已经趋向于ISP程序下载方式,一方面由于原有不支持ISP下载的芯片逐渐被淘汰(大部分已经停产),另一方面ISP使用起来十分方便,不增加太多的成本就可以实现程序的下载,所以ISP下载方式已经逐步成为主流。 113