1.MCS-51单片机的扩展能力
根据MCS-51单片机的地址总线AB的宽度(16位),片外可扩展的存储器最大容量为216=64KB,地址范围为0000 H~FFFFH。
因为MCS-51单片机对片内、外程序存储器ROM和片外数据存储器RAM的操作使用不同的指令和控制信号,所以允许两者的地址空间重叠,故片内、外可扩展的程序存储器与片外数据存储器分别为64KB。为了配置外部设备而需要扩展的I/O口与片外数据存储器RAM统一编址,即占据相同的地址空间。因此,片外数据存储器RAM连同I/O口一起总的扩展容量是64KB。
如果系统需要用到的存储器超过了单片机本身具有的容量,就要进行片外程序存储器或者数据存储器的扩展。
2.存储器的种类
计算机系统中的存储器根据存储元件的材料来分,可分为半导体存储器、磁存储器及光存储器。按工作时与CPU联系的密切程度分,存储器可分为主存和辅存,或称为内存和外存。主存存放当前运行的程序和数据,它和CPU直接交换信息,且按存储单元进行读写数据,其特点主要是存取速度快,容量相对要小;辅存则作为主存的后援,存放暂时不执行的程序和数据,它只是在需要时调入内存后CPU才能访问,因此辅存通常容量大,但存取速度慢。由于半导体存储器是以集成电路的形式出现,当今微型计算机系统中的主存几乎全部是使用的半导体存储器,而磁和光等存储器主要用作大容量辅存,如磁盘、磁带、光盘等。
(1)半导体存储器分类。大规模集成电路技术的发展使得半导体存储器的价格大大降低,现代单片机的主存储器已普遍采用半导体存储器。半导体存储器按存取方式可分为两大类:随机存取存储器RAM(Random Access Memory)和只读存储器ROM(Read Only Memory)。
RAM中任何存储单元都能随机读写,即存取操作与时间、存储单元的物理位置顺序无关,其存储的内容可随时写入和修改,但掉电后RAM中的内容会全部丢失,一般计算机系统中的RAM主要用来存放当前运行的程序、各种输入/输出数据、中间结果及堆栈等,而在MCS-51单片机中用于数据存储器的扩展。而ROM在计算机中的存储的内容是固定不变的,联机工作时只能读出不能写入,掉电以后信息不会丢失,常被一般用于存放一些固定的程序如监控程序、BIOS程序等,而在MCS-51单片机中用于程序存储器的扩展。
(2)ROM分类。ROM又可分为掩膜ROM、可编程ROM(PROM)、光可擦除ROM(EPROM)、电可擦除E2 PROM(也称E2 PROM)和闪存FLASH。其中掩膜ROM在信息制作在芯片中,不可更改;PROM仅允许一次编程,此后不可更改;EPROM采用紫外光擦除,擦除后可编程,并允许用户多次擦除和编程;EEPROM(E2 PROM)采用加电方法在线进行擦除和编程,也可多次擦写;Flash Memory(闪存)能够快速擦写的E2 PROM,但只能按块(Block)擦除。
由于用户编写的单片机程序都需要反复多次进行修改与调试,因此,单片机外部扩展的程序存储器只用EPROM、E2 PROM和FLASH等可多次擦除的ROM。
(3)RAM分类。RAM按采用器件可分为双极性存储器和MOS型存储器,而MOS型存储器按存储原理又可分为静态读写存储器(SRAM)和动态读写存储器(DRAM)两种。其中SRAM的基本存储电路(存储元)通常是由6个MOS管组成的双稳态触发器电路,在没有信号触发的情况下,只要电路不掉电,双稳态触发器电路的状态就不会变化,也就是说存储的内容不丢失。SRAM读写速度高,使用方便,但成本高,功耗大;而DRAM是靠MOS电路中的栅极电容来存储信息的。由于电容上的电荷会逐渐泄漏,在没有信号触发的情况下,一段时间后电路的状态就会变化,也就是说存储的内容要丢失,所以需要定时充电以维持存储内容不丢失(称为动态刷新),因此DRAM需要设置刷新电路,相应外围电路就较为复杂(也有刷新电路做在芯片内的),DRAM的刷新定时间隔一般为几ms。DRAM特点为集成度高(存储容量大,可达1Gbit/片以上)、功耗低、价格低,但速度慢(10ns左右),需要刷新电路,附加另外的成本。DRAM应用非常广泛,如微机中的内存条、显卡上的显存几乎都是用DRAM制造的。
由于MCS-51单片机内部没有集成刷新电路,采用DRAM需要外部连接相应的刷新电路,连接成本较高,因此,单片机外部扩展的数据存储器一般只用SRAM。
3.存储器的字、位扩展
由于任何存储芯片的存储容量都是有限的,故要构成一定容量的内存,单个存储芯片往往不能满足字长或者存储单元个数的要求,甚至字长、存储单元数都不能满足要求。这时就需要多个存储芯片进行组合,以满足对存储容量的要求。这种组合称为存储器的扩展,扩展时要解决的问题包括位扩展、字扩展和字位扩展。
(1)位扩展。位扩展是指增加存储的字长。一块实际的存储芯片,其每个单元的位数往往与实际内存单元字长并不相等。存储芯片可以是1、4位或8位,如DRAM芯片Intel 2164为64K×1bit,SRAM芯片Intel 2114为1K×4bit,Intel 6264为8K×8bit,而计算机内存一般是按字节(如MCS-单片机字长为8位)来进行组织的,若要使用2164、2114这样的存储芯片来构成内存,单个存储芯片字长(位数)就不能满足要求,这时就需要进行位扩展,以满足内存单元字长的要求。
一般位扩展构成的存储器系统中一个内存单元中的内容被分别存储在不同的芯片上。例如用2片4K×4bit的存储器芯片经位扩展构成4KB的存储器中,每个单元中的8位二进制数被分别存在两个芯片上,即一个芯片存该单元内容的高4位,另一个芯片存该单元内容的低4位。
可以看出,位扩展保持总的地址单元数(存储单元个数)不变,但每个单元中的位数增加。
位扩展电路的连接方法是:将每个存储芯片的地址线和控制线(包括选片信号线、读写信号线等)全部并联在一起,而将它们的数据线分别引出至数据总线的不同位上。
(2)字扩展。字扩展是对存储器容量的扩展(或存储空间的扩展)。此时存储器芯片上每个存储单元的字长已满足要求(如字长已为8位),而只是存储单元的个数不够,需要的是增加存储单元的数量,这就是字扩展,即用多片字长为8位的存储芯片构成所需要的存储空间。
例如,用1K×8bit的存储器芯片组成2KB的内存储器。在这里,字长已满足要求,只是容量不够,所以需要进行字扩展,显然需两片1K×8bit的存储器芯片来实现。
字扩展电路的连接方法是将每个芯片的地址信号、数据信号和读写信号等控制信号按信号名称全部并联在一起,只将片选端分别引出到地址译码器的不同输出端,即用片选信号来区别各个芯片的地址。
(3)字位扩展。在构成一个实际的存储器时,往往需同时进行位扩展和字扩展才能满足存储容量的要求。微机中内存的构成就是字位扩展的一个很好的例子。首先,存储器芯片生产厂制造出一个个单独的存储芯片,如64M×1位、128M×1位等;然后,内存条生产厂将若干个芯片用位扩展的方法组装成内存模块(即内存条),如用8片128M×1位的芯片组成128MB的内存条;最后,用户根据实际需要购买若干个内存条插到主板上构成自己的内存系统,即字扩展。一般来讲,最终用户做的都是字扩展(即增加内存地址单元)的工作。
进行字位扩展时,一般先进行位扩展,构成字长满足要求的内存模块,然后再用若干个这样的模块进行字扩展,使总容量满足要求。
(4)扩展存储器所需芯片数目的确定。若所选存储器芯片字长与单片机字长一致,则只需扩展容量。此时,所需芯片数目按下式确定:
芯片数目=系统扩展容量/存储器芯片容量若所选存储器芯片字长与单片机字长不一致,则不仅需扩展容量,还需字扩展。若要构成一个容量为M×N位的存储器,并采用L×K位的芯片(L<M,K<N),则构成这个存储器需要这样的存储器芯片数量为:
由于MCS-51单片机应用系统一般需要扩展存储器的规模较小,因此,一般不会使用单片大容量存储器芯片,而为使扩展电路简单,通常选用字长已满足要求的芯片,存储器扩展一般只进行字扩展,即作容量扩展。
4.扩展存储器的一般连接方法
存储器芯片有多种。即使是同一种类的存储器芯片,容量的不同,其引脚数目也不同。尽管如此,存储器芯片与单片机扩展连接具有共同的规律。不论何种存储器芯片,其引脚也都呈三总线结构,而单片机扩展是采用三总线结构,一般两者的三总线时序要求是基本一致的,因此,只有把两者的三总线对接起来就可以了。当然,电源线也应接对应的电源线。因此,系统的扩展归结为三总线的连接,两者的三总线连接原则为:
(1)存储器芯_片的控制线。对于程序存储器ROM,一般来说,具有读操作控制线,它与单片机的信号线相连。除此之外,对于EPROM芯片还有编程脉冲输入线PGM、编程状态线。应与单片机在编程方式下的编程脉冲输出线相接;在单片机查询输入/输出方式下,与一根I/O口线相接;在单片机中断工作方式下,与一个外部中断信号输入线相接。对于数据存储器RAM,一般来说,具有读操作控制线和写操作控制线,它与单片机的信号线相连。
(2)存储器芯片的数据线。数据线的数目由芯片的字长决定。1位、4位、8位字长的芯片数据线分别有1根、4根、8根。由于单片机的数据总线为8位,若存储器芯片的数据线不足8根,还需进行位扩展;一般扩展的存储器芯片的数据线也应选为8位,此时它们只需与单片机的8位数据总线DB(D0~D7)按由低位到高位的顺序顺次对接即可。
(3)存储器芯片的地址线。存储器芯片的地址线数目由芯片的存储容量决定,存储容量Q与地址线数目N满足关系式:Q=2N。存储器芯片的地址线用于选择片内的存储单元或端口,称为字选或片内选择,它们与单片机的地址总线AB(A0~A15)按由低位到高位的顺序顺次相接。一般来说,存储器芯片的地址线数目总是少于单片机地址总线的数目,如此相接后,单片机的高位地址线总有剩余。
剩余地址线一般作为译码线,译码输出_与存储器芯片的片选信号线相接。存储器芯片一般都有1根(或几根)片选信号线。对存储器芯片访问时,片选信号必须有效,即选中存储器芯片。片选信号线与单片机系统的译码输出相接后,就决定了存储器芯片的地址范围。
一个芯片的某个单元或某个端口的地址由片选的地址和片内字选择地址共同组成,因此字选和片选引脚均应接到单片机的地址线上。连线的方法是:①字选:外围芯片的字选(片内选择)地址线引脚直接接单片机的从A0开始的低位地址线;②片选:外围芯片的片选(芯片选择)采用剩余的高位地址线经译码后的输出来选择,一般作为译码线片选引脚的连接方法有线选译码、译码器译码、直接接地3种,在单片机中常采用线选译码法。
因此,单片机的剩余高位地址线的译码及译码输出与存储器芯片的片选信号线的连接,是存储器扩展连接的关键问题。
(4)其他注意问题。例如,单片机三总线的时序与存储器的读写时序的匹配问题,如果两者时序不一致,还需通过中间的接口电路使两者时序基本一致后,才能对接;再如,单片机三总线的负载能力问题等。单片机三总线一般只能带3~8个TTL负载。当扩展的芯片超过其负载能力时,系统三总线需驱动与隔离,此时数据总线DB要74LS245双向驱动,地址总线AB与控制总线CB则需74LS244单向驱动,驱动器的输出再连至外扩的存储器或I/O电路。
5.存储器芯片的选片方式
前面已述,存储器芯片的字选(片内选择)地址线引脚直接接单片机的从A0开始的低位地址线;而片选引脚的连接方法主要有线选译码、译码器译码(包含部分译码和全译码)、直接接地3种。
(1)线选法(或称线译码)。高位地址线不经过译码,直接(或经反相器)分别接各存储器芯片的片选端来区别各芯片的地址。它的优点是电路最简单,但缺点是也会造成地址重叠,且各芯片地址不连续。此法适用于外围芯片不多的情况,它是一种最简单,最低廉的连接方法。图7-9为线选译码法的连接示意图。
图7-9 线选译码法的连接示意图
(2)译码器译码。片选引脚接到高位地址线经译码器译码后的输出线,这种通过译码器的译码方式又可分为部分译码、全译码法两种。其中:部分译码用片内寻址外的高位地址的一部分(而不是全部)作为译码产生片选信号。部分译码优点是较全译码简单,但缺点是存在地址重叠区;而全译码法把全部高位地址线都作为译码信号来参加译码,译码输出作为片选信号。全译码的优点是每个芯片的地址范围是唯一确定,而且各片之间是连续的。缺点是译码电路比较复杂。图7-10为译码器译码法的连接示意图。(www.xing528.com)
图7-10 译码器译码法的连接示意图
对于部分译码,参与译码的地址线对于选中某一存储器芯片有一个确定的状态,而与不参加译码的地址线无关,即只要参加译码的地址线处于对某一存储器芯片的选中状态,不参加译码的地址线的任意状态都可以选中该芯片。正因如此,部分译码使存储器芯片的地址空间有重叠,所谓重叠的地址就是同一存储单元有多个不同的地址,也就是说一个存储单元占据多个地址,因而会造成地址浪费,这是部分译码的缺点。
图7-11为某一2KB容量的存储器与51单片机的地址线连接关系图。由于2K=211,存储器芯片需要11根地址线,图中与存储器芯片连接的低11位地址线的地址变化范围为全“0”~全“1”。剩余的5根高位地址线仅4根地址线参加译码,只有这4根地址线状态为0100时译码器的输出信号才为0,才能用于片选该芯片,也就是说它们是唯一确定的。但不参加译码的A15位地址线任何状态(有两种状态)都会选中该存储器芯片。当A15=0时,占用的地址是0010000000000000B~0010011111111111B,即2000 H~27FFH;当A15=1时,占 用 的 地 址 是1010000000000000B~1010011111111111B,即A000H~A7FFH。同理,若有N条高位地址线不参加译码,则有2N个重叠的地址范围。当然,部分译码的优点是译码电路比较简单。
(3)片选端可直接接地。当接入单片机的外部扩展RAM或ROM存储器芯片仅1片时,存储器的片选端可直接接地,使外扩的存储器始终处于选中状态。图7-12为直接接地法的连接示意图。
图7-11 某2KB容量的存储器与MCS-51单片机的地址线连接关系
图7-12 直接接地法的连接示意图
6.存储器芯片的译码电路
译码电路用于地址译码,它将输入的一组二进制编码变换为一个特定的控制信号,即将输入的一组高位地址信号通过变换,产生一个有效的控制信号,用于选中某一个存储器芯片,从而确定该存储器芯片在内存中的地址范围。
译码电路可用普通的逻辑芯片或专门的译码器芯片实现。常用的译码器芯片有双2-4译码器74LS139、3-8译码器74LS138和4-16译码器74LS154等。下面介绍目前最常用的74LS138译码器。
74LS138是3-8译码器,它有3个输入端、3个控制端及8个输出端,引线及功能如图7-13所示。74LS138译码器只有当控制端为1、0、0时,才会在输出的某一端(由输入端C、B、A的状态决定)输出低电平信号,其余的输出端仍为高电平。
图7-13 74LS138引脚图和译码逻辑关系
7.单片机扩展系统的分类
根据MCS-51单片机系统所扩展的规模,可分为最小(Small)系统、紧凑(Compact)系统、大(Large)系统和海量(Vast)系统的4种。其中最小系统前面已述,需要指出的是最小系统一般不需扩展外部芯片,若需扩展的话,一般仅需扩展1片RAM或ROM或I/O接口芯片,此时译码方式一般都采用直接接地方式。下面仅介绍另外3种扩展系统。
(1)紧凑扩展系统。由于单片机内部资源种类和数量的增加,目前大多数的单片机应用系统不需要大规模扩展外部存储器,尤其是不需要扩展程序存储器ROM,对于只扩展少量数据存储器RAM和I/O接口的系统,称之为紧凑系统。在紧凑系统中,只用P0口作为扩展总线口,P2口可以作为第一功能的准双向口使用接I/O设备,也可以将部分口线作为地址线。这种系统中,为了不影响P2口所连的设备,CPU访问外部数据存储器时,不能用DPTR作地址指针,只能用R0、R1作地址指针,即只使用(MOVX A,@Ri)和(MOVX@Ri,A)指令操作。
紧凑系统扩展总线的地址总线宽度为8位,可扩展的单元的最大容量为256B,地址为00 H~FFH。
在紧凑系统中,P0口输出的地址信息也必须由ALE打入外部的地址锁存器,控制总线只有外部数据存储器的读信号线、写信号线。图7-14为紧凑系统的扩展总线图。
图7-14 紧凑系统的扩展总线图
紧凑系统的地址译码方法同样有线选法和译码法两种,而译码法种又有全地址译码和部分地址译码。
1)线选法适用于只扩展少量I/O接口芯片的应用系统。对于I/O接口芯片,内部的寄存器一般不大于8个,可以用A0~A2作为芯片中寄存器的地址选择线,A3~A7作为选片信号线,则可以外接5个I/O接口芯片。按线选法的地址分配方法,这5个芯片的地址分别为:01111 000B~01111 111B(即78H~7FH)、10111 000B~10111 111B(即B8 H~BFH)、11011 000B~11011 111B(即D8H~DFH)、11101 000B~11101 111B(即E8H~EFH)、11110 000B~11110 111B(即F0 H~F7H)。
2)地址译码法。若A0~A3作为芯片中寄存器地址选择线,A4~A7用4~16译码器产生选片信号线,则最多可以接16片I/O接口芯片,地址分别为0000 0000B~0000 1111B(即0~0FH)、0001 0000B~0001 1111B(即10~1FH)、…、1111 0000B~1111 1111B(即F0H~FFH)。
3)P2口部分口线作为地址线的译码方法。对于扩展256字节RAM和I/O口的系统,可以用P2口的部分口线作为地址线,剩余的P2口线连I/O设备,这种系统也称为紧凑系统。在访问外部数据存储器时,先对作为地址线的P2口口线操作,选中外部数据存储器某一页,然后用R0或R1作为页内地址指针,对外部数据存储器进行读或写。
【例7-1】 图7-15所示的是一种把P2.0、P2.1作为地址线的地址译码方法,图中采用了线选法和译码法相结合的方法。用线选法产生,在都为高电平时,3-8译码器输出的CS2、CS3、CS4、CS5中有一个选片信号线有效,这样可外接6个芯片。
图7-15 P2口部分口线作为地址线的一种译码方法
(2)大扩展系统。对于硬件需求量大,外部存储器空间被充分利用的应用系统,其系统结构规模大,我们称之为大系统。在大系统中,P0口和P2口都作为总线口使用,不能作为第一功能的I/O接口连接外部设备。DPTR、R0、R1都可以作为访问外部数据存储器的地址指针。
大系统扩展构成的片外总线结构参见前面的图7-2。
大系统扩展总线中P0口、P2口作为扩展总线的地址总线AB口时,P2口输出高8位地址A8~A15,P0口通过地址锁存器输出低8位地址A0~A7,P0口同时作为双向数据总线DB D0~D7,控制总线CB有外部程序存储器ROM读选通信号线,外部数据存储器RAM的读信号线、写信号线,以及低8位地址A0~A7的锁存信号线ALE。
并行扩展的核心问题是的编址问题。单片机中CPU是根据地址访问外部存储器的,即由地址总线上地址信息选中某一芯片的某个单元进行读或写。大系统扩展总线的地址总线宽度为16位,可扩展的单元的最大容量为64KB,地址为0000H~FFFFH。
在实际的应用系统中,MCS-51单片机有时需要扩展多片外围芯片,这时一般通过芯片选择信号线(片选线)来识别不同的外围芯片,通常片选方式还是线选法和译码法。
因为大系统扩展总线的地址总线宽度为16位,所以要使用MCS-51单片机指令中具有16位地址寻址功能的操作指令,MCS-51单片机对外操作的指令有6条,它们是:
①MOVX A,@Ri。
②MOVX@Ri,A。
③MOVX A,@DPTR。
④MOVX A,@DPTR。
⑤MOVC A,@A+DPTR。
⑥MOVC A,@A+PC。
其中:①、②指令使用P0端口输出8位地址信号(P2端口不用);当使用③、④指令时,P0端口输出DPIR提供的DPL低8位地址信号,P2端口输出DPIR提供的DPH高8位地址信号;①、②、③、④指令操作外部数据存储器的读信号线(P3.7)或写信号线(P3.6)。当使用⑤、⑥指令时,P0端口输出A+DPTR或A+PC提供的低8位地址信号,P2端口输出A+DPTR或A+PC提供的高8位地址信号,但指令操作外部程序存储器读选通信号线。
图7-16 海量存储器的一种译码方法
(3)海量扩展系统。在报站器、屏幕显示等一些特殊应用中,需超过64KB的存储器,则可以用P1的口线作为区开关来实现。如扩展1片128KB SRAM 628128和I/O口的系统,可以采用图7-16的一种译码方法。图中,628128占0区和1区的64KB存储空间,I/O接口占2区存储空间,每个区为64KB。在访问外部RAM/IO时,先对P1.1、P1.0操作选择一个区,然后用DPTR作指针,对所选中的区中的单元操作。也可以用扩展I/O口作为地线(如3个8位口产生24位地址),将地址写入扩展口以后再对存储器读写。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。