单片机的程序存储器空间和数据存储器空间是相互独立的。单片机应用系统由硬件和软件组成,软件的载体就是硬件中的程序存储器。对于MCS-51系列8位单片机,片内程序存储器的类型及容量见表6-4。
表6-4 MCS-51系列单片机片内程序存储器一览表
程序存储器一般采用只读存储器,因为这种存储器在电源关断后,仍能保存程序(称此特性为非易失性的),在系统通电后,CPU可取出这些指令予以重新执行。只读存储器简称为ROM(Read Only Memory)。ROM中的信息一旦写入之后,就不能随意更改,特别是不能在程序运行的过程中写入新的内容,故称之为只读存储器。
对于没有内部ROM的单片机或者当程序较长、片内ROM容量不够时,用户必须在单片机外部扩展程序存储器。MCS-51单片机片外有16条地址线,即P0口和P2口,因此最大寻址范围为64KB(0000 H~FFFFH)。
这里要注意的是,MCS-51单片机有一个管脚跟程序存储器的扩展有关。如果接高电平,那么片内存储器地址范围是0000 H~0FFFH(4KB),片外程序存储器地址范围是1000H~FFFFH(60KB)。如果接低电平,不使用片内程序存储器,片外程序存储器地址范围为0000 H~FFFFH(64KB)。
8031单片机没有片内程序存储器,因此管脚总是接低电平。
如果程序总量不超过4KB,一般选用具有内部ROM的单片机。8051内部ROM只能由厂家将程序一次性固化,不适合小批量用户和程序调试时使用,因此选用8751、8951的用户比较多。如果程序超过4KB,一般不会选用8751、8951,而是直接选用8031,利用外部扩展存储器来存放程序。
向ROM中写入信息叫做ROM编程。根据编程的方式不同,ROM分为以下几种:
1)掩膜ROM。掩膜ROM是在制造过程中编程。因编程是以掩膜工艺实现的,因此称为掩膜ROM。这种芯片存储结构简单,集成度高,但由于掩膜工艺成本较高,因此只适合于大批量生产。在批量大的生产中,一次性掩膜生产成本才是很低的。
2)可编程ROM(PROM)。PROM(可编程只读存储器)芯片出厂是并没有任何程序信息,是由用户独立的编程器写入的。但PROM只能写入一次,写入内容后,就不能再进行修改。
3)EPROM。EPROM(Erasable Programmable Read Only Memory)型(紫外线可擦除型)是用电信号编程,用紫外线擦除的只读存储器芯片。在EPROM芯片外壳上的中间位置有一个圆形玻璃窗口,通过这个窗口在紫外线照射下,存储器中的各位信息均变1,即处于擦除状态。擦除干净的EPROM可以通过编程器将应用程序固化到芯片中。
4)E2 PROM(EEPROM)。用+5V电可擦除E2 PROM,这是一种用电信号编程,也用电信号擦除的ROM芯片,对E2 PROM的读写操作与RAM存储器几乎没有什么差别,只是写入的速度慢一些,但断电后能够保存信息。常用芯片有2816(2K×8)、2864(8K×8)等。
5)Flash ROM。Flash ROM又称闪烁存储器,或称快擦写ROM。Flash ROM是在EPROM、E2 PROM的基础上发展起来的一种只读存储器。是一种非易失性、电擦除型存储器。其特点是可快速在线修改其存储单元中的数据,标准改写次数可达1万次,而成本却比普通E2 PROM低得多,因而可大量替代E2 PROM。与E2 PROM相比,E2 PROM的写入的速度较慢。但是,Flash ROM的读写速度都很快,存取时间可达70ns。由于其性能比E2 PROM要好,所以目前大有取代E2 PROM的趋势。
目前,许多公司生产的以MCS-51单片机为内核的单片机,在芯片内部集成了数量不等的Flash ROM。例如,美国ATMEL公司生产的89C51单片机,片内有4KB的Flash ROM;生产的89C55单片机,内部有20KB的Flash ROM。对于这类单片机,扩展外部程序存储器的工作即可省去。
1.EPROM芯片介绍
程序存储器的扩展可根据需要来使用上述的各种只读存储器的芯片,但使用比较多的是EPROM、E2 PROM,下面首先对常用的EPROM芯片进行介绍。
EPROM的典型芯片是27系列产品,例如,2716(2KB×8)、2732(4KB×8)、2764(8KB×8)、27128(16KB×8)、27256(32KB×8)、27512(64KB×8)。型号名称“27”后面的数字表示其位存储容量。如果换算成字节容量,只需将该数字除以8即可。
随着大规模集成电路技术的发展,大容量存储器芯片的产量剧增,售价不断下降。大容量存储器芯片的性价比明显增高,而且由于有些厂家已经停止生产小容量的芯片,使市场上某些小容量芯片的价格反而比大容量芯片还贵(例如,目前2716、2732已经停止生产,在市场上已经很难买到)。所以,在扩展程序存储器设计时,应尽量采用大容量的芯片。这样,不仅可以使电路板的体积缩小、成本降低,还可以降低整机功耗和减少控制逻辑电路,从而提高系统的稳定性和可靠性。
(1)常用的EPROM芯片
27系列EPROM的芯片的引脚如图6-13所示,参数见表6-5。
表6-5 常用EPROM芯片参数表
图6-13 常用的EPROM芯片引脚图
在表6-5中,VCC是芯片供电电压,VPP是编程电压,Im为最大静态电流,Is为维持电流,TRM为最大读出时间。
图6-13中的芯片的引脚功能如下:
A15~A0:地址线引脚。地址线引脚的数目由芯片的存储容量来定,用来进行单元选择。
D7~D0:数据引脚。
片选输入端。
输出允许控制端。
编程时,加编程脉冲的输入端。
VPP:编程时,编程电压(+12V或+25V)输入端。
VCC:+5V,芯片的工作电压。
GND:接地端。
NC:无用端。
(2)EPROM芯片的工作方式
EPROM一般都有5种工作方式,由各信号的状态组合来确定。5种工作方式见表6-6。
1)读出方式。一般情况下,EPROM工作在这种方式。工作在此种方式的条件是使片选控制线为低,同时让输出允许控制线为低,VPP为+5V,就可将EPROM中的指定地址单元的内容从数据引脚D7~D0上读出。
表6-6 EPROM的5种工作方式
2)未选中方式。当片选控制线为高电平时,芯片进入未选中方式,这时数据输出为高阻抗悬浮状态,不占用数据总线。EPROM处于低功耗的维持状态。
3)编程方式。在VPP端加上规定好的高编程电压,和端加上合适的电平(不同的芯片要求不同),就能将数据线上的数据写入到指定的地址单元。此时,编程地址和编程数据分别由系统的A15~A0和D7~D0提供。
4)编程校验方式。在VPP端保持相应的编程电压,再按读出方式操作,读出编程固化好的内容,以校验写入的内容是否正确。
5)编程禁止方式。本工作方式输出呈高阻状态,不写入程序。
2.程序存储器的操作时序
(1)访问程序存储器的控制信号
MCS-51单片机访问片外程序存储器时,所用控制信号有:
1)ALE:用于低8位地址锁存控制。
2)片外程序存储器“读选通”控制信号。接外扩EPROM的OE引脚。
3)片内、片外程序存储器访问的控制信号。=1时,访问片内程序存储器;当EA=0时,访问片外程序存储器。
如果指令是从片外EPROM中读取的,除了ALE用于低8位地址锁存信号之外,控制信号还有接外扩EPROM的脚。此外,还要用到P0口和P2口,P0口分时用作低8位地址总线和数据总线,P2口用作高8位地址线。相应的时序图如图6-14所示。
(2)操作时序
由于MCS-51单片机中ROM和RAM是严格分开的,因此,对片外ROM的操作时序分为两种情况:执行非MOVX指令的时序,如图6-14(a)所示;执行MOVX指令的时序,如图6-14(b)所示。
1)应用系统中无片外RAM。无片外RAM,则不用执行MOVX指令。在执行非MOVX指令时,P0口作为地址/数据复用的双向总线,用于输入指令或输出程序存储器的低8位地址。P2口专门用于输出程序存储器的高8位地址。P2口具有输出锁存功能;而P0口除输出地址外,还要输入指令,故要用ALE来锁存P0口输出的地址。在每个机器周期中,允许地址锁存信号ALE两次有效,在ALE下降沿时,锁存出现在P0口上的低8位地址。同时,也是每个机器周期中两次有效,用于选通片外程序存储器,将指令读入片内。
图6-14 外部程序存储器的操作时序
(a)执行非MOVX指令的时序;(b)执行MOVX指令的时序
系统无片外RAM时,此ALE有效信号以振荡器频率的1/6出现在引脚上,它可以用作外部时钟或定时脉冲信号。
2)应用系统中接有片外RAM。在执行访问片外RAM的MOVX指令时,程序存储器的操作时序有所变化。其主要原因在于,执行MOVX指令时,16位地址应转而指向数据存储器,操作时序如图6-14(b)所示。在指令输入以前,P2口、P0口输出的地址PCH、PCL指向程序存储器;在指令输入并判定是MOVX指令后,ALE在该机器周期S5状态锁存的P0口的地址不是程序存储器的低8位,而是数据存储器的地址。若执行的是“MOVX A,@DPTR”或“MOVX@DPTR,A”指令,则此地址就是DPL(数据指针的低8位);同时,在P2口上出现的是DPH(数据指针的高8位)。若执行的是“MOVX A,@Ri”或“MOVX@Ri,A”指令,则Ri的内容为低8位地址,而P2口线上将是P2口锁存器的内容。在同一机器周期中将不再出现有效取指信号,下一个机器周期中ALE的有效锁存信号也不再出现;而当有效时,P0口将读/写数据存储器中的数据。
由图6-14(b)可以看出:
①将ALE用作定时脉冲输出时,执行一次MOVX指令会丢失一个脉冲。
②只有在执行MOVX指令时的第二个机器周期期间,地址总线才由数据存储器使用。
3.典型的EPROM接口电路
(1)使用单片EPROM的扩展电路
紫外线擦除电可编程只读存储器EPROM是国内用得较多的程序存储器。(www.daowen.com)
【例6-1】 在8031单片机上扩展4KB EPROM程序存储器。
解 1)选择芯片。本例要求选用8031单片机,内部无ROM区,无论程序长短都必须扩展程序存储器(目前较少这样使用,但扩展方法比较典型、实用)。
在选择程序存储器芯片时,首先必须满足程序容量,其次在价格合理情况下尽量选用容量大的芯片。这样做的话,使用的芯片少,从而接线简单,芯片存储容量大,程序调整余量也大。如估计程序总长3KB左右,最好是扩展一片4KB的EPROM2732,而不是选用2片2716(2KB)。
在单片机应用系统硬件设计中应注意,尽量减少芯片使用个数,使得电路结构简单,提高可靠性,这也是8951比8031使用更加广泛的原因之一。
2)硬件电路图。8031单片机扩展一片2732程序存储器电路如图6-15所示。
3)芯片说明。74LS373:74LS373是带三态缓冲输出的8D锁存器,由于单片机的三总线结构中,数据线与地址线的低8位共用P0口,因此必须用地址锁存器将地址信号和数据信号区分开。74LS373的锁存控制端G直接与单片机的锁存控制信号ALE相连,在ALE的下降沿锁存低8位地址。
EPROM2732:EPROM2732的容量为4K×8位。4K表示有4×1024(22×210=212)个存储单元,8位表示每个单元存储数据的宽度是8位。前者确定了地址线的位数是12位(A0~A11),后者确定了数据线的位数是8位(O0~O7)。目前,除了串行存储器之外,一般情况下,使用的都是8位数据存储器。2732采用单一+5V供电,最大静态工作电流为100m A,维持电流为35m A,读出时间最大为250ns。2732的封装形式为DIP24,管脚如图6-16所示。其中,A0~A11为地址线;O0~O7为数据线;为片选线;为输出允许/编程高压。
除了12条地址线和8条数据线之外,为片选线,低电平有效。也就是说,只有当为低电平时,2732才被选中,否则,2732不工作。为双功能管脚,该引脚为低电平时,允许2732输出数据;当对EPROM编程(也称为固化程序)时,该管脚用于高电压输入,不同生产厂家的芯片编程电压也有所不同。当我们把它作为程序存储器使用时,不必关心其编程电压。
图6-15 单片机扩展2732EPROM电路
4)扩展总线的产生。一般的CPU,如Intel 8086/8088、Z80等,都有单独的地址总线、数据总线和控制总线,而MCS-51系列单片机由于受管脚的限制,数据线与地址线是复用的,为了将它们分离开来,必须在单片机外部增加地址锁存器,构成与一般CPU相类似的三总线结构。
5)连线说明如下:
地址线:单片机扩展片外存储器时,地址是由P0和P2口提供的。图6-15中,2732的12条地址线(A0~A11)中,低8位A0~A7通过锁存器74LS373与P0口连接,高4位A8~A11直接与P2口的P2.0~P2.3连接,P2口本身有锁存功能。注意,锁存器的锁存使能端G必须和单片机的ALE管脚相连。
图6-16 EPROM2732管脚及说明
数据线:2732的8位数据线直接与单片机的P0口相连。因此,P0口是-个分时复用的地址数据线。
控制线:CPU执行2732中存放的程序指令时,取指令阶段就是对2732进行读操作。注意,CPU对EPROM只能进行读操作,不能进行写操作。CPU对2732的读操作控制都是通过控制线实现的。
2732控制线的连接有以下几条:
直接接地。由于系统中只扩展了一个程序存储器芯片,因此,2732的片选端CE直接接地,表示2732一直被选中。若同时扩展多片,需通过译码器来完成片选工作。
接8031的读选通信号端。在访问片外程序存储器时,只要端出现负脉冲,即可从2732中读出程序。
6)扩展程序存储器地址范围的确定。单片机扩展存储器的关键是搞清楚扩展芯片的地址范围,MCS-51单片机最大可以扩展64KB。(0000H~FFFFH)。决定存储器芯片地址范围的因素有两个:一个是片选端的连接方法,一个是存储器芯片的地址线与单片机地址线的连接。在确定地址范围时,必须保证片选端为低电平。
本例中,2732的片选端总是接地,因此第一个条件总是满足的,另外,2732有12条地址线,与8031的低12位地址相连,编码结果见表6-7。
表6-7 8031与2732连接的地址编码
由此可见,本例中扩展的2732的地址范围是0000H~FFFFH(无关的管脚取0,范围不是唯一的),共4KB容量。
7)EPROM的使用。存储器扩展电路是单片机应用系统的功能扩展部分,只有当应用系统的软件设计完成了,才能把程序通过特定的编程工具(一般称为编程器或EPROM固化器)固化到2732中,然后再将2732插到用户板的插座上。
当上电复位时,PC=0000H,自动从2732的0000H单元取指令,然后开始执行指令。
如果程序需要反复调试,可以用紫外线擦除器先将2732中的内容擦除,然后再固化修改后的程序,进行调试。
如果要从EPROM中读出程序中定义的表格,需要使用查表指令:
MOVC A,@A+DPTR
MOVC A,@A+PC
在例6-2中详细介绍了2732与8031单片机的接口设计,下面介绍2764,27128,27512,27256芯片与8031单片机的接口电路。
由于2764与27128引脚的差别仅在26脚上,2764的26脚是空脚,27128的26脚是地址线A13,因此在设计外扩存储器电路时,应选用27128芯片设计电路。在实际应用时,可将27128换成2764,系统仍能正常运行,反之,则不然。图6-17给出了MCS-51外扩16KB字节EPROM的27128的电路图。图6-18给出了MCS-51外扩32KB字节的EPROM 27256的线路图。
图6-17 8031与27128的接口电路
图6-18 8031与27256的接口电路
注意在图6-17、图6-18中的两种地址锁存器的用法。对于图6-17和图6-18中程序存储器所占的地址空间,读者可以自己分析。
(2)E2 PROM扩展实例
电擦除可编程只读存储器E2 PROM是一种可用电气方法在线擦除和再编程的只读存储器,它既有RAM可读可改写的特性,又具有非易失性存储器ROM在掉电后仍能保持所存储数据的优点。因此,E2 PROM在单片机存储器扩展中,可以用作程序存储器,也可以用作数据存储器,至于具体做什么使用,由硬件电路确定。
E2 PROM作为程序存储器使用时,CPU读取E2 PROM数据同读取一般EPROM操作相同;但E2 PROM的写入时间较长,必须用软件或硬件来检测写入周期。
【例6-2】 在8031单片机上扩展2KB E2 PROM。
解 1)选择芯片。2816A和2817A均属于5V电擦除可编程只读存储器,其容量都是2K×8位。2816A与2817A的不同之处在于:2816A的写入时间为9~15ms,完全由软件延时控制,与硬件电路无关;2817A利用硬件引脚来检测写操作是否完成。
在此,选用2817 A芯片来完成扩展2 KB E2 PROM,2817A的封装是DIP28、采用单一+5V供电,最大工作电流为150m A,维持电流为55m A,读出时间最大为250ns。片内设有编程所需的高压脉冲产生电路,无需外加编程电源和写入脉冲即可工作。2817 A在写入一个字节的指令码或数据之前,自动地对所要写入的单元进行擦除,因而无需进行专门的字节/芯片擦除操作。2817A的管脚如图6-19所示。其中,A0~A10为地址线;I/O0~I/O7为读写数据线;CE为片选线;为读允许线,低电平有效;为写允许线,低电平有效;为低电平时,表示2817A正在写操作,处于忙状态,高电平时,表示写操作完毕;VCC为+5V电源:GND为接地端。
图6-19 2817A的管脚
2817A的读操作与普通EPROM的读出相同,所不同的只是可以在线进行字节的写入。2817A的写入过程如下:CPU向2817A发出字节写入命令后,2817A便锁存地址、数据及控制信号,从而启动一次写操作。2817A的写入时间大约为16ms左右,在此期间,2817A的脚呈低电平,表示2817A正在进行写操作,此时它的数据总线呈高阻状态,因而允许CPU在此期间执行其他的任务。当一次字节写入操作完毕,2817A便将线置位,由此来通知CPU。
2)硬件电路图。单片机扩展2817A的硬件电路图如图6-20所示。
3)连线说明如下:
地址线:图6-5中,2817A的11条地址线(A0~A10,容量为2K×8位,211=12×1024=2K)中的低8位A0~A7通过锁存器74LS373与P0口连接,高3位A8~A10直接与P2口的P2.0~P2.2连接。
数据线:2817A的8位数据线直接与单片机的P0口相连。
图6-20 单片机扩展2817A EEPROM电路
控制线:单片机与2817A的控制线连接采用了将外部数据存储器空间和程序存储器空间合并的方法,使得2817A既可以作为程序存储器使用,又可以作为数据存储器使用。单片机中用于控制存储器的管脚有以下3个:
控制程序存储器的读操作,执行指令的取指阶段和执行MOVC A,@A+DPTR指令时有效。
控制数据存储器的读操作,执行MOVX@DPTR,A和MOVX@Ri,A时有效。
控制数据存储器的写操作,执行MOVX A,@DPTR和MOVX A,@Ri时有效。
在图6-20中,2817A控制线的连线方法如下:
直接接地。由于系统中只扩展了一个程序存储器芯片,因此片选端直接接地,表示2817A一直被选中。
8031的程序存储器读选通信号和数据存储器读信号经过“与”操作后,与2817A的读允许信号相连。这样,只要中有一个有效,就可以对2817A进行读操作了。也就是说,对2817A既可以看作程序存储器取指令,也可以看作数据存储器读出数据。
与8031的数据存储器写信号WR相连,只要执行数据存储器写操作指令,就可以往2817A中写入数据。
与803l的P1.0相连,采用查询方法对2817A的写操作进行管理。在擦、写操作期间,脚为低电平,当字节擦、写完毕时,为高电平。其实,检测2817A写操作是否完成也可以用中断方式实现,方法是将2817A的反相后与8031的中断输入脚相连。当2817A每擦除或写完一个字节时向单片机提出中断请求。
4)2817A的使用。按照图6-20连接好后,如果只是把2817A作为程序存储器使用方法同EPROM相同,EEPROM也可以通过编程器将程序固化进去。
如果将2817A作为数据存储器,读操作同使用静态RAM一样,直接从给定的地址单元中读取数据即可。向2817A中写数据采用MOVX @DPTR,A指令。
(3)使用多片EPROM的扩展电路
多片EPROM与单片EPROM扩展电路相比,多片EPROM的扩展除片选线外,其他均与单片扩展电路相同。图6-21给出了利用4片27128EPROM扩展成64KB程序存储器的方法。片选信号由译码选通法产生。
图6-21 4片27128与8031的接口电路
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。