TankertankerDesign8.1系统扩展结构8.2地址锁存与地址空间分配8.3程序存储器的扩展8.4数据存储器的扩展8.5EPROM和RAM的综合扩展第八章STC89C52单片机存储器的扩展TankertankerDesign8.1系统扩展结构STC89C52单片机属于总线型结构,片内各功能部件都是按总线关系设计并集成为整体的。为减少连接线,简化组成结构,可把具有共性的连线归并成一组公共连线,即总线——传送信息的公共通道(BUS)。单片机系统扩展主要包括存储器扩展和I/O接口部件扩展。三总线:地址总线(AB)、数据总线(DB)、控制总线(CB).TankertankerDesignSTC89C52单片机与外部设备连接有两种方式:第8章单片机接口技术I/O口方式(非总线方式)总线方式STC89C52单片机没有专用总线引脚,而是采用了I/O引脚兼作总线引脚的方案。I/O口方式——采用片内RAM指令访问外设例如:MOVA,P0总线方式——采用片外RAM指令访问外设例如:MOVXA,@DPTR(片外RAM0~0FFFFH)TankertankerDesignSTC89C52单片机的存储器扩展即包括程序存储器扩展又包括数据存储器扩展。AT89S51单片机采用程序存储器空间和数据存储器空间截然分开的哈佛结构。扩展后,系统形成了两个并行的外部存储器空间。TankertankerDesign数据总线——P0口地址总线——P0+P2控制总线——P3口+控制引脚STC89C52为减少引脚数量,采用了复用P0口方案,即P0口兼作数据线和低8位地址线,为了将地址和数据信息区分开来,需要在P0口外部增加地址锁存器,即将地址信息的低8位锁存后输出。使用的控制信号如下:作为外扩程序存储器的读选通控制信号。和为外扩数据存储器和I/O的读、写选通控制信号。ALE作为P0口发出的低8位地址锁存控制信号。为片内外程序存储器的选择控制信号。PSENWRRDEAEAEATankertankerDesignSTC89C52RC的4个并行I/O口,由于系统扩展的需要,能够真正作为数字I/O使用,就剩下P1和P3的部分口线了。TankertankerDesign8.2地址锁存与地址空间分配8.2.1地址锁存目前,常用的地址锁存器芯片有74LS373、74HC373,74LS573等。在每个机器周期,ALE两次有效,可以利用地址锁存器在ALE的下降沿将P0口输出的地址信息锁存,当ALE转为低电平时,P0输出8位数据信息。1.锁存器74LS373----带有三态输出门的8D触发器TankertankerDesign结构:内部由8路D触发器和8个三态缓冲器组成。原理:/OE端为低电平时,D端信号在G端正脉冲作用下实现“接通-锁存-隔离”功能。导通锁存隔离TankertankerDesign74LS373的引脚373功能表引脚说明:•D7~D0:8位数据输入线,•Q7~Q0:8位数据输出线。•G:数据输入锁存选通信号。当加到该引脚的信号为高电平时,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。•:数据输出允许信号,低电平有效。当该信号为低电平时,三态门打开,锁存器中数据输出到数据输出线。当该信号为高电平时,输出线为高阻态。OETankertankerDesign373的工作过程:1、P0口先将低8位地址信号锁存在373中;2、373的输出端与输入端(P0口)隔离;3、P0口输出8位数据信号+P2口输出高8位地址信号+373输出低8位地址信号→同时产生16位地址信号+8位数据信号TankertankerDesignSTC89C52单片机P0口与74LS373的连接TankertankerDesign2.锁存器74LS573是一种带有三态门的8D锁存器,功能及内部结构与74LS373完全一样,只是其引脚排列与74LS373不同。与74LS373相比,74LS573的输入D端和输出Q端依次排列在芯片两侧,为绘制印制电路板提供方便。TankertankerDesign8.2.2地址空间分配实际系统设计中,既需要扩展程序存储器,又需要扩展数据存储器,如何把片外的两个64KB地址空间分配给各个程序存储器、数据存储器芯片,使一个存储单元只对应一个地址,避免单片机发出一个地址时,同时访问两个单元,发生数据冲突。这就是存储器地址空间分配问题。STC89C52单片机发出的地址码用于选择某个存储器单元,在这个过程中单片机必须进行两种选择:一是选中该存储器芯片,称为“片选”,未被选中的芯片不能被访问。二是在“片选”的基础上再根据单片机发出的地址码来对“选中”芯片的某一单元进行访问,即“单元选择”。为实现片选,存储器芯片都有片选引脚。同时也都有多条地址线引脚,以便进行单元选择。注意,“片选”和“单元选择”都是单片机通过地址线一次发出的地址信号来完成选择的。TankertankerDesign•本书讲解时把单片机系统的地址线笼统地分为低位地址线和高位地址线,片选都是使用高位地址线。实际上,16条地址线中的高、低位地址线的数目并不是固定的,只是习惯上把用于“单元选择”的地址线,都称为低位地址线,其余的为高位地址线。TankertankerDesign常用的存储器地址空间分配方法有两种:线性选择法(简称线选法)和地址译码法(简称译码法)。1.线选法----一般只适用于外扩少量的片外存储器和I/O接口芯片。线选法是指直接利用单片机系统的某一高位地址线作为存储器芯片(或I/O接口芯片)的“片选”控制信号。为此,只需要把用到的高位地址线与存储器芯片的“片选”端直接连接即可。线选法的优点是电路简单,不需要另外增加地址译码器硬件电路,体积小,成本低。缺点是可寻址的芯片数目受到限制,芯片之间地址不连续,地址空间没有充分利用。TankertankerDesign2.译码法---适合于多芯片扩展.使用译码器对AT89S51单片机的高位地址进行译码,译码输出作为存储器芯片的片选信号。译码法的优点是能够有效地利用存储器空间.常用的译码器芯片有74LS138、74LS139和74LS154。若全部高位地址线都参加译码,称为全译码;若仅部分高位地址线参加译码,称为部分译码。部分译码存在着部分存储器地址空间相重叠的情况。(1)74LS1383线-8线译码器,有3个数据输入端,经译码产生8种状态。TankertankerDesign138真值表当一个选通端为G1为高电平,且另外两个选通端和为低电平时,可将输入端C、B、A的二进制编码在一个对应的引脚输出端以低电平译出,其余引脚输出均为高电平。此时,可将输出为低电平的引脚作为某一存储器芯片的片选信号。G2AG2BTankertankerDesign(2)74LS139双2线-4线译码器。这两个译码器完全独立,分别有各自的数据输入端、译码状态输出端以及数据输入允许。TankertankerDesign例:若需外扩8片8KB的RAM6264,如何通过74LS138把64KB空间分配给各个芯片?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芯片中的各个存储单元的“单元选择”。全地址译码,地址有重叠吗?TankertankerDesignY7•在本例中,如果将接到一片6116,芯片容量只有2KB,那么E000H~E7FFH,E800H~EFFFH,F000H~F7FFH,F800H~FFFFH这4个2KB空间都对应6116芯片,也就是说,即使采用全地址译码法,也仍然会有地址重叠现象。采用译码器划分的地址空间块都是相等的,如果将地址空间块划分为不等的块,可采用可编程逻辑器件FPGA对其编程来代替译码器进行非线性译码。TankertankerDesign8.3程序存储器的扩展外部程序存储器的种类单一,常采用只读存储器。只读存储器简称ROM(ReadOnlyMemory)。ROM中的信息一旦写入,就不能随意更改,特别是不能在程序运行过程中写入新的内容。ROM在电源关断后,仍能保存程序(我们称此特性为非易失性的),在系统上电后,CPU可取出这些指令重新执行。向ROM中写入信息称为ROM编程。根据编程方式不同,分为以下几种。TankertankerDesign(1)掩模ROM。在制造过程中编程,是以掩模工艺实现的,因此称为掩模ROM。这种芯片存储结构简单,集成度高,但由于掩模工艺成本较高,因此只适合于大批量生产。(2)可编程ROM(PROM)。芯片出厂时没有任何程序信息,用独立的编程器写入。但PROM只能写一次,写入内容后,就不能再修改。(3)EPROM。用紫外线擦除,用电信号编程。在芯片外壳的中间位置有一个圆形窗口,对该窗口照射紫外线就可擦除原有的信息。使用编程器可将调试完毕的程序写入。(4)E2PROM(EEPROM)。一种用电信号编程,也用电信号擦除的ROM芯片。对E2PROM的读写操作与RAM存储器几乎没有什么差别,只是写入的速度慢一些,但断电后仍能保存信息。TankertankerDesign(5)FlashROM。又称闪速存储器(简称闪存),是在EPROM、E2PROM的基础上发展起来的一种电擦除型只读存储器。特点是可快速在线修改其存储单元中的数据,改写次数可达1万次,其读写速度很快,存取时间可达70ns,而成本比E2PROM低得多,大有取代E2PROM的趋势。TankertankerDesign•由于超大规模集成电路制造工艺的发展,芯片集成度愈来愈高,扩展程序存储器时使用的ROM芯片数量越来越少,因此芯片的选择多采用线选法,而地址译码法用的渐少。并且目前许多单片机生产厂家生产的8051内核的单片机,在芯片内部集成了数量不等的FlashROM,如STC89C51RC/RD+系列单片机内部集成了8KB~64KB的FlashROM,能满足绝大多数用户的需要,性价比高。•在片内集成的FlashROM满足要求的情况下,用户没有必要再扩展外部程序存储器。TankertankerDesignPSENEA8.3.1外扩程序存储器的操作时序STC89C52单片机访问片外扩展的程序存储器时,所用的控制信号有以下3种。1.ALE:用于低8位地址锁存控制。2.:片外程序存储器“读选通”控制信号。它接外扩EPROM的引脚。3.:片内、片外程序存储器访问的控制信号。当=1时,在单片机发出的地址小于片内程序存储器最大地址时,访问片内程序存储器;当=0时,只访问片外程序存储器。EAEATankertankerDesignPSENWR扩展的片外RAM的最大容量也为64KB,地址为0000H~FFFFH。但由于STC89C52采用不同的控制信号和指令(CPU对ROM的读操作由控制,指令用MOVC类;CPU对RAM读、写操作分别用和控制,指令用MOVX),所以,尽管ROM与RAM的地址是重叠的,也不会发生混乱。RDTankertankerDesignSTC89C52对片外ROM的操作时序分两种,即执行非MOVX指令的时序和执行MOVX指令的时序。1.应用系统无片外RAMP0口作为地址/数据复用的双向总线,用于输入指令或输出程序存储器的低8位地址PCL。P2口专门用于输出程序存储器的高8位地址PCH。P0口分时复用,故首先要将P0口输出的低8位地址PCL锁存在锁存器中,然后P0口再作为数据口。在每个机器周期中,允许地址锁存两次有效,ALE在下降沿时,将P0口的低8位地址PCL锁存在锁存器中。TankertankerDesignTankertankerDesign1001H:M0VA,R0;E8H1002H:MOVR1,A;F9H不执行MOVX类指令时地址E8HF9H1001H1002H代码程序存储器PSENRD地址锁存地址锁存TankertankerDesign不执行MOVX类指