1.21k likes | 1.51k Views
第 6 章 80C51 的系统扩展. 本章学习目标 : 了解单片机系统扩展的意义,常用存储器的应用 特点和存储器扩展的基本方法 理解 I/O 接口的作用,熟悉常用 I/O 接口的功能和用法 了解 8155 的工作方式及与 80C51 的接口方法,能读懂教材中 8155 的控制实例熟悉中断优先控制的方法 熟练掌握 LED 数码管的显示原理及与 80C51 的接口方法,能独立编写与教材同等难度的 LED 数码管控制程序 熟练掌握 LED 点矩阵显示器的显示原理及驱动方法,借助资料独立编写与教材同等难度的 LED 点矩阵显示器控制程序
E N D
第6章 80C51 的系统扩展 • 本章学习目标 : • 了解单片机系统扩展的意义,常用存储器的应用 特点和存储器扩展的基本方法 • 理解I/O接口的作用,熟悉常用I/O接口的功能和用法 • 了解8155的工作方式及与80C51的接口方法,能读懂教材中8155的控制实例熟悉中断优先控制的方法 • 熟练掌握LED数码管的显示原理及与80C51的接口方法,能独立编写与教材同等难度的LED数码管控制程序 • 熟练掌握LED点矩阵显示器的显示原理及驱动方法,借助资料独立编写与教材同等难度的LED点矩阵显示器控制程序 • 熟悉独立式按键和矩阵式键盘的结构特点,借助资料独立编写与教材同等难度的控制程序
6.1系统扩展概述 6.1.1 系统扩展的概念 80C51单片机中已经集成了CPU、I/O口、定时器、中断系统、存储器等计算机的基本部件(即系统资源),使用非常方便,应用于小型控制系统已经足够了。但要构成较为复杂的应用系统,有时会感到以上资源中的一种或几种不够用,这就需要在80C51芯片外再扩展相应的芯片或电路,使相关功能得以扩充,我们称之为系统扩展(即系统资源的扩充)。
6.1.2扩展系统总线结构 单片机系统扩展有并行扩展和串行扩展两种方法。并行扩展通过单片机的三总线(AB、DB、CB)来实现;串行扩展是利用SPI三总线和I2C双总线的串行系统扩展。 SPI三线同步总线: 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI总线是一种三线同步总线,因其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间处理其它事务。
单片机外部并行扩展的总线结构 单片机外部并行扩展以单片机为核心,通过系统总线挂接存储芯片或I/O芯片来实现。挂接存储器芯片就是存储器扩展,挂接I/O接口芯片就是I/O扩展。扩展系统总线结构如图6-1所示。 图6-1 扩展系统总线结构
1.地址总线AB(Address Bus) 地址总线用于传送单片机送出的地址信号,以便进行存储单元和I/O端口的选择。地址总线的位数决定着可访问的存储器或I/O口的容量。80C51单片机有16条地址线。所以能寻址64KB空间。 80C51单片机的16位地址线分为两部分: • 高8位地址线:由P2 口提供; • 低8位地址线:由P0 口提供。 由于P0口是低8位地址和8位数据的复用线,因此必须外接锁存器,用于将先发送出去的低8位地址锁存起来,然后才能传送数据。需要注意:P0、P2口在系统扩展中用作地址线后就不能作为一般I/O口使用。
2.数据总线DB (Data Bus) 数据总线用于在单片机与存储器之间或单片机与I/O端口之间传送数据。数据总线是双向的,可以进行两个方向的数据传送。 80C51单片机数据总线为8位,由P0口提供。在数据总线上可以连接多个外围芯片,但在某一时刻只能有一个有效的数据传送通道。
3.控制总线CB (Control Bus) 控制总线实质上是一组控制信号线,用于协调单片机与外围芯片间的联系。在对80C51进行系统扩展时用到的控制信号有:地址锁存允许信号ALE、外部程序存储器读选通信号 、外部存储器访问允许信号 、外部数据存储器读/写选通信号 、 等。
6.2存储器扩展 存储器是用来存放程序和数据的,它由专用的存储芯片构成。80C51单片机的程序存储器和数据存储器相互独立,均为64KB,其控制信号也各自独立。 存储器扩展的内容包括:存储器的地址线与单片机的地址线间的连接、相应数据线间的连接和控制线间的连接等。
6.2.1存储器的分类 存储器的分类方法较多: 如果按存储器所处位置划分,可分为片内存储器和片外存储器; 根据用途不同,可分为程序存储器和数据存储器; 按照存取方式和使用功能,可分为随机存取存储器(Random Access Memory,简称RAM)和只读存储器(Read Only Memory,简称ROM)。
1.随机存取存储器RAM ⑴特点 • 可以将数据任意读出和写入; • 存储的信息不稳定,一旦掉电就会丢失dvnamis。 由于RAM的读写操作方便,所以常用作数据存储器 ⑵分类
2.只读存储器ROM ⑴特点 • 编入程序或写入数据后只能读出不能写入(指单片机在 正常工作状态下); • 掉电以后所存内容不会丢失,通电后照常能够使用。因 此常用作程序存储器。 ⑵分类 根据结构和工艺不同,ROM可分为以下几种:
掩模ROM • 可编程的PROM(Programmable ROM) • 紫外线可擦除可编程的EPROM(Erasable Programmable ROM) • 电可擦除可编程的EEPROM(Electrically Erasable Programmable ROM) • 闪速存储器Flash
表6-1是半导体存储器的分类和性能对照表。 注:“自动”指断电或写入数据时,原有数据自动擦除
6.2.2 常用存储器扩展芯片 扩展程序存储器一般采用掉电信息不丢失的ROM类芯片,如EPROM和EEPROM;扩展数据存储器一般采用RAM类芯片,如静态RAM 6116、6264、62256等。 目前扩展存储器以EEPROM的使用最为普遍,它既能用作程序存储器,又能用作数据存储器。常用的EEPROM芯片主要有Intel 2817A、2864A等。 图6-2 Intel 2864A的引脚
以2864A为例说明,其结构如图6-2所示。其中A0~A12为地址线;I/O0~I/O7为双向数据线; 为片选信号线; 为输出允许信号线; 为写信号线。
6.2.3 扩展EEPROM程序存储器 图6-3 80C51单片机扩展程序存储器2864A的硬件连接图
由图6-3可知此时2864A用作程序存储器,在一般情况下,不需要向里面写入数据,只进行程序的读出操作,因此在接线时,将80C51的 信号直接与2864A的 引脚相连,当单片机需要从外部程序存储器读取程序时, 引脚为低电平,根据P2口和P0口提供的地址,2864A中相应的存储信息(指令的机器代码)就能从程序存储器中取出。
表6-3 74LS373的真值表 图6-4 74LS373的位结构简图 图6-4所示。表6-3列出了74LS373的真值表。在这种连接方式下,2864A的地址范围是0000H~1FFFH(未与2864A连接的A15、A14、A13视为0)。 〈想一想〉如果将未与2864A连接的A15、A14、A13视为1,2864A的地址范围又是什么?
6.2.4扩展EEPROM数据存储器 1.硬件电路 图6-5是2864A与80C51单片机的硬件连接图,这时2864A用作数据存储器。在图中,2864A的片选 与80C51的P2.5相连,作为最高位地址A13,且要一直保持有效状态。由于2864A为8K容量,本身具有13条地址线,所以该扩展系统共有14条地址线A0~A13。其中的低8位地址线通过74LS373对80C51的P0 口地址锁存后得到。2864A的 (数据读出控制)与 (数据写入控制)分别受80C51的 、 引脚控制。数据口线I/O0~I/O7直接与80C51的数据口P0 相连。在这种连接方式下,2864A的地址范围是0000H~1FFFH(未与2864A连接的A15、A14视为0)。
图6-5 80C51单片机扩展数据存储器2864A的硬件连接图 〈想一想〉如果将未与2864A连接的多余地址线视为1,2864A的地址范围又是什么?
2.读写操作 80C51访问EEPROM时采用如下指令完成读写操作: MOVX @ DPTR,A ;将A中内容写入EEPROM 或 MOVX A ,@DPTR ;将EEPROM中内容读入A中 需要说明,由于EEPROM的数据写入时间较长,因此在对EEPROM的某一单元执行了写数据操作后,一般需要延时20ms左右的时间才能对下一单元进行写操作。所以在“MOVX @DPTR,A ”指令后常加一条软件延时20ms的调用子程序语句“LCALL DELAY20”。
6.2.5存储器的综合扩展 有时在一个系统中既要扩展程序存储器,又要扩展数据存储器,这就是综合扩展。 1.单个芯片扩程序存储器和数据存储器80C51单片机的程序存储器和数据存储器虽然彼此独立,但我们可以用一定的控制电路对它们统一编址,此时数据存储器、程序存储器和I/O共同占用64KB的存储空间。如果系统对程序存储器和数据存储器的容量需求不大,可以只扩展一片EEPROM,对其内部空间进行合理划分,将某一区域定义为程序存储空间,其它区域设为数据存储空间。电路如图6-6 所示。
在图中,将80C51的 (从数据存储器中读数据)、 (选通程序存储器)信号相与后接入2864A的 引脚。这样,当 或 信号有一个为低电平时,就能从存储器中读取相应的数据或程序。 (1)读程序 由于硬件连接使 =0,所以单片机自动读取外部程序存储器。因此要求用户在编制程序时要将程序存储区和数据存储区划分清楚(伪指令ORG规定程序存储器地址,指针DPTR指示数据存储器地址),存储程序时不要占用数据存储区。
(2)读/写数据存储器 80C51读数据,是由指令性质决定的。当执行“MOVX A,@DPTR”指令时,CPU时序使 引脚输出低电平,于是2864A的 引脚也为低电平,相应数据存储单元的数据会出现在数据线上,80C51读入该数据,存在累加器A中。 同理,80C51要执行写操作时,CPU时序使单片机的 引脚输出低电平,可以对2864A执行写操作。
该扩展电路的寻址范围是0000H~1FFFH(未与2864A连接的A15、A14、A13视为0)。如设定其中0000H~0FFFH是程序存储区;1000H~1FFFH是数据存储区。为防止误将数据写入程序存储区,可采用图6-7所示的写保护电路。此时,单片机的P2.4引脚一路接写保护电路,另一路接2864A最高位地址线A12。此时0000H~0FFFH只能读出不能写入。该扩展电路的寻址范围是0000H~1FFFH(未与2864A连接的A15、A14、A13视为0)。如设定其中0000H~0FFFH是程序存储区;1000H~1FFFH是数据存储区。为防止误将数据写入程序存储区,可采用图6-7所示的写保护电路。此时,单片机的P2.4引脚一路接写保护电路,另一路接2864A最高位地址线A12。此时0000H~0FFFH只能读出不能写入。 〈想一想〉如果将未与2864A连接的多余地址线视为1,2864A的地址范围又是什么? 图6-7 写保护电路
2.多个芯片扩程序存储器和数据存储器 当一块芯片的容量不够时,我们还可以用多块芯片来扩展程序存储器和数据存储器。这时常采用译码器产生各个芯片的片选信号,常用的译码器有74LS138(3–8线)、74LS139(双2–4线),其引脚图见附录C。 下面以74LS138为例来进行扩展,74LS138的工作条件是4、5引脚接低电平,6引脚接高电平。C、B、A引脚输入不同数值时,对应 ~ 某一引脚输出0,如CBA=110时,其对应的十进制数是6,所以 引脚输出0,其它引脚输出1,当CBA=111时, 输出0,其余与此类似。图6-8给出了三块芯片的存储器扩展图,其中6264是RAM芯片,其引脚和读写与2864类似,在此不详细描述,其地址空间分配情况见表6-4,其中①号芯片是数据存储器,②③号芯片是程序存储器。
6.3 并行I/O口扩展 6.3.1 I/0接口简介 CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口。
I/O接口的任务是通过系统总线实现80C51单片机与I/O电路和外围设备的联系,按照芯片能否实现编程,I/O接口通常分为两类: • 不可编程I/O接口芯片 通常是一些锁存器或驱动器, 如74LS273、74LS373和 74LS244等; • 可编程I/O接口芯片 能够通过CPU输入不同的命令和参 数,并控制相关的I/O电路或外设作相应的操作,如并 行接口芯片8155、8255和8279等。
80C51单片机的I/O口线共有32条,但P3口是多用途的,若用作第二功能时,就不能作一般I/O口线;在进行存储器扩展时,P0和P2也不能作I/O口。这样,在极端情况下,只有P1口的8根线可供用户作I/O口线使用。因此,在实际应用系统中,往往需要扩展I/O口。通常有简单扩展和使用可编程接口芯片来扩展两种途径。80C51单片机的I/O口线共有32条,但P3口是多用途的,若用作第二功能时,就不能作一般I/O口线;在进行存储器扩展时,P0和P2也不能作I/O口。这样,在极端情况下,只有P1口的8根线可供用户作I/O口线使用。因此,在实际应用系统中,往往需要扩展I/O口。通常有简单扩展和使用可编程接口芯片来扩展两种途径。
6.3.2并行I/O口的简单扩展 1.扩展方法 类似于扩展数据存储器,即把每一个I/O端口当作一个片外数据存储器单元,给它分配存储空间的一个地址。直接使用访问片外数据存储器的指令(MOVX指令)来访问扩展的I/O口。但当应用系统扩展较多的I/O口时,将会占去大量的RAM地址。 原则上说,I/O口的扩展容量最多可达64KB,但实际上并不需要这么多。
2.简单的I/O口扩展实例 扩展数量不多且功能简单的I/O口,常采用TTL电路或CMOS电路锁存器、三态缓冲器。以如图6- 9 所示电路为例,要求按下任意一个键时,点亮对应的发光二极管。 图6- 9 并行I/O口的简单扩展
在该系统中,采用双4位三态门电路74LS244作扩展输入,8位锁存器74LS273作扩展输出。P0口为双向数据线,既能从74LS244输入数据,又能将控制状态传送给74LS273输出。在该系统中,采用双4位三态门电路74LS244作扩展输入,8位锁存器74LS273作扩展输出。P0口为双向数据线,既能从74LS244输入数据,又能将控制状态传送给74LS273输出。 74LS244的位结构简图见图6-10。表6-5给出了74LS244的逻辑功能表。 表6-5 74LS244的逻辑功能表 图6-10 74LS244的位结构简图
图6-11 74LS273的位结构简图 表6-6 74LS273的逻辑功能表 图6-11是74LS273的位结构简图,表6-6是74LS273的逻辑功能表。 输入控制信号由P2.0和 合成,当二者同时为低电平0时,或门输出为0,选通74LS244,将外部开关状态作为数据输入到总线。当无键按下时,输入为全1;若按下某键,则相应输入端输入0。
输出控制信号由P2.0和 合成,当P2.0=0, 出现负脉冲时,该负脉冲的上升沿。选通74LS273,将P0口数据锁存到74LS273,用来控制发光二极管的亮灭。由图可见,当某条数据线上输出低电平0时,该线上的LED发光。 显然,输入和输出都是在P2.0=0时有效,二者的口地址同为0FEFFH,但因分别是由 和 信号控制,故不会发生冲突。参考程序如下: LOOP: MOV DPTR,#0FEFFH ;指向扩展I/O口地址 MOVX A,@DPTR ;从244读入数据, 检测开关状态 MOVX @DPTR,A ;向273输出数据,驱 动LED AJMP LOOP ;循环检测 除74LS273、74LS244以外,还可用74LS373、74LS377等芯片扩展80C51的I/O口。
6.3.3 可编程I/O扩展芯片8155 采用可编程接口芯片来扩展I/O口,可以完成复杂的接口功能,如扩展并行I/O口采用8255、8155,扩展串行I/O口采用8251,扩展定时/计数器采用8253等。8155是单片机常用的接口扩展芯片。其内部含有256B的静态RAM,2个8位的并行I/O接口,1个6位的并行I/O接口和1个14位的定时/计数器。8155与80C51系列单片机的连接非常简单。
1.8155的结构和技术性能 (1) 内部结构 8155芯片采用40脚双列直插式封装,其引脚和内部结构如图6-12所示。从图中不难看出,在8155内部具有: • 256字节的静态RAM,存取时间为400ns • 3个通用的输入/输出口PA、PB、PC • 1个14位的可编程定时/计数器。 • 1个8位命令寄存器(只能写入)/8位状态寄存器(只 能读出) (2) 引脚介绍
2.8155的工作方式与地址编码 8155能工作于以下3种方式: ⑴作80C51单片机片外256字节RAM使用。条件是IO/=0,这时CPU对8155的256B的RAM单元寻址。 ⑵作扩展I/O口使用。条件是IO/=1。这时8155片内的3个I/O接口及命令/状态寄存器被选中。 ⑶作14位定时/计数器使用。条件是IO/=1。由于I/O接口、命令/状态寄存器和定时/计数器各自对应的口地址不同,因此不会发生冲突。
3.8155的命令/状态寄存器 8155内部的命令寄存器和状态寄存器使用同一个端口地址。命令寄存器只能写入不能读出,状态寄存器只能读出不能写入。 ⑴命令字 8155的 3个I/O口的工作方式由CPU写入命令寄存器的控制命令字决定。命令字的格式如图6-13所示。 图6-13 8155的控制命令字
表6-8 C口工作方式的设置 • 表6-9 C口用作控制信号的说明
⑵状态字 8155的状态寄存器用于锁存8155 I/O口和定时/计数器的当前状态,供CPU查询。状态寄存器只能读出,不能写入,而且和命令寄存器共用一个口地址。CPU对该地址写入的是命令字,读出的是状态字。状态字格式如图6-14 所示。 图6-14 8155的状态字
4.8155的定时/计数器 8155的定时/计数器是一个14位的减法计数器,可用来定时或对输入脉冲进行减法计数。要对计数的过程进行控制,必须首先装入计数初值。由于计数长度为14位,故定时器的计数初值由两个字节组成,每次装入8位,要分两次才能全部装入。8155定时/计数器的计数长度为2H~3FFFH之间的任意值。定时/计数器格式如表6-10所示。 表6-10 定时/计数器的设置
定时/计数器有4种输出方式,分别由M2和M1定义,每一种方式的输出波形如图6-15所示。定时/计数器有4种输出方式,分别由M2和M1定义,每一种方式的输出波形如图6-15所示。 图6-15 8155定时/计数器的4种输出波形 需要指出的是,硬件复位信号RESET,会使定时/计数器停止工作,直至由命令/状态寄存器再次启动计数操作(TM2TM1=11)时为止。
5.80C51单片机与8155的连接与操作 80C51单片机可以直接和8155连接而不需要任何附加电路,直接为系统增加256字节外部RAM、22根I/O线及一个14位定时器。其基本硬件连接方法如图6 -16所示。 • 图6-16 80C51与8155连接的硬件电路图
图中的P2.X、P2.Y可以是P2 口的任意引脚,如果图中X取7,Y取6,则8155中RAM的地址因P2.7(A15)=0, P2.6(A14)=0,可选为0011 1111 0000 0000B(3F00H)~0011 1111 1111 1111B(3FFFH)。此时I/O端口地址和命令/状态寄存器地址由下表得:7F00H~7F05H。表中无关位选0或1均可。 表6-11 图6-16的地址分配表
6.8155应用实例 应用系统电路如图6-17所示。试编程实现如下功能:将PA口设定为输出口,PB口设定为输入口,当按钮没按下时,PA口作单一灯的左移;当按钮按下时,PA口作单一灯的右移。 • 图6-17 8155应用实例硬件电路 分析: 首先应对8155初始化,然后判断按钮状态,据此作灯的移动