第8章单片机资源扩展.ppt
单片机原理及应用(第八章 单片机资源扩展),教学内容,单片机扩展的总线结构存储器扩展简单输入/输出口扩展可编程并行接口8255A可编程接口8155,DATE:2023/8/7,PAGE:2,一、单片机扩展的总线结构,单片机资源扩展的典型结构是总线结构。各扩展部件通过总线与单片机连接起来,相当于系统中各部件挂在总线上,分时利用总线与CPU通讯。当选中某部件时,可对该部件进行读写及控制,而其它部件与总线间处于“高阻态”,相当于与总线断开。,DATE:2023/8/7,PAGE:3,一、单片机扩展的总线结构,单片机系统的三总线构造方法如下:以P0口线作数据总线/低位地址总线:先由P0口线作地址总线把低8位地址送锁存器,由锁存器提供给系统,然后再将P0口线作数据总线读写数据,从而实现地址总线的低8位地址信号和数据总线共用P0口线而不产生冲突。以P2口线作高位地址总线:P2口线最多可提供8位高位地址,加上P0口线提供的低8位地址,最多可提供16位地址,可使单片机系统的寻址范围最大达到64KB。采用功能引脚形成控制总线:由 RD(P3.6引脚)和 WR(P3.7引脚)作为读写选通信号线;由ALE作为地址锁存信号线,以配合P0口实现分时复用;PSEN以 作为片外程序存储器读选通信号线;以EA 作为片内和片外程序存储器的选择信号。,DATE:2023/8/7,PAGE:4,二、存储器扩展,存储器片选方法线选法:单片机系统的地址线与存储芯片的地址线从低到高依次相接后,由用剩余的高位地址线直接与芯片片选引脚相连作为片选信号。线选法连线简单,但地址空间不连续,适用于扩展容量较小且芯片数目较少的情况。译码法:单片机系统的地址线与存储芯片的地址线相接后,剩余的高位地址线与译码器相连,以译码器的输出作为芯片的片选信号。译码法能有效利用存储空间,且地址连续,适用于多芯片下的扩展。常用译码器芯片有74LS138等。,DATE:2023/8/7,PAGE:5,二、存储器扩展,程序存储器扩展地址线:地址是由P0和P2口提供的。ROM的地址线(A0A15)中,低8位A0A7通过锁存器74LS373与P0口连接,高8位A8A11直接与P2口的P2.0P2.7连接。数据线:片外ROM的8位数据线直接与单片机的P0口相连。,DATE:2023/8/7,PAGE:6,二、存储器扩展,控制线:CPU执行ROM中存放的程序指令时,取指阶段就是对ROM进行读操作。读操作控制线有以下几条:地址锁存信号ALE:单片机的ALE管脚与锁存器的锁存使能端,G相连,用于单片机从片外ROM在读指令时给出低8位地址的锁存信号。片选信号CS:低电平有效。如果系统中只扩展了一片程序存储器芯片,可将该片选端直接接地,使该芯片一直有效。若同时扩展多片,需通过线选法或译码法来完成片选工作。读选通信号OE:低电平有效。该引脚接8051的片外ROM读选通信号端PSEN。在访问片外程序存储器时,只要端出现负脉冲,即可从ROM中读出指令或数据。片外程序存储器的选用控制信号EA:当EA引脚接高电平时,CPU只访问单片机内部的程序存储器并执行内部程序存储器中的指令,但当程序存储量超过内部程序存储器的最大容量时,将自动转去执行单片机外部程序存储器内的程序。当输入信号 引脚接低电平(接地)时,CPU只访问外部程序存储器并执行外部程序存储器中的指令。,DATE:2023/8/7,PAGE:7,二、存储器扩展,在执行片外ROM读指令时,单片机自动进行的操作时序:(1)首先由PO口和P2口给出16位地址,然后ALE出现下降沿通知锁存器74LS373将P0口的低8位地址锁存;(2)PSEN出现低电平,使片外ROM有效;(3)根据锁存器74LS373和P2口提供的地址取出指令并送P0口,由P0口读入单片机执行。在上述过程中,数据存储器RAM读写信号端WR和RD一直处于高电平状态,使RAM与总线隔离。,DATE:2023/8/7,PAGE:8,二、存储器扩展,例8-1 根据下图电路编写程序用数码管显示0-9共10个数字循环显示。,DATE:2023/8/7,PAGE:9,二、存储器扩展,#include unsigned char led=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;/字型码int main(void)unsigned char i;while(1)for(i=0;i10;i+)/循环显示10个数字 P1=ledi;delay();/延时一段时间,DATE:2023/8/7,PAGE:10,void delay()/延时函数 int i,j;for(i=0;i3000;i+)for(j=0;j5;j+);,二、存储器扩展,数据存储器扩展 数据存储器RAM的扩展主要用到以下3个控制信号:ALE:低8位地址锁存控制信号,通常接地址锁存器的LE引脚;WR:外部RAM写信号,低电平有效,接数据存储器的WR引脚;RD:外部RAM读信号,低电平有效,接数据存储器的RD引脚。,DATE:2023/8/7,PAGE:11,二、存储器扩展,在执行片外RAM读写指令时,单片机自动进行的操作时序与读ROM相似:(1)首先由PO口和P2口给出16位地址,然后ALE出现下降沿将P0口的低8位地址锁存,改由锁存器74LS373提供;(2)在读数据时RD出现低电平,WR出现高电平,使读片外RAM有效,并根据锁存器74LS373和P2口提供的地址取出指令并送P0口输出,由P0口读入单片机。(3)在写数据时时首先将数据加载到P0口线上,然后RD引脚出现高电平,WR引脚出现低电平,使写片外RAM有效,并根据锁存器74LS373和P2口提供的地址将P0口线上的数据写入片外RAM。,DATE:2023/8/7,PAGE:12,二、存储器扩展,例8-2 根据图8-4编写程序将数码管显示0-9共10个数字的字型码存储到6264中,然后从6264中循环读出字型码并送数码管显示。,DATE:2023/8/7,PAGE:13,二、存储器扩展,#include#include unsigned char led=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;/字型码int main(void)unsigned char i;for(i=0;i10;i+)/存储10个数字字型码XBYTE0 x8000+i=ledi;while(1)for(i=0;i10;i+)/循环显示10个数字 P1=XBYTE0 x8000+i;delay();/延时一段时间,DATE:2023/8/7,PAGE:14,void delay()/延时函数 int i,j;for(i=0;i30000;i+)for(j=0;j5;j+);,三、简单输入/输出口扩展,简单输入/输出口扩展简单输入扩展主要采用三态数据缓冲器实现,目的是使被选通的输入设备能独占数据总线向单片机输入数据,而未被选通的设备与数据总线隔离。常用的三态数据缓冲器芯片有74LS244、74LS245等。简单输出扩展主要采用三态数据锁存器实现,目的是使单片机能通过数据总线向被选通的设备输出数据,而未被选通的设备与数据总线隔离。常用的三态数据锁存器芯片有74LS373、74LS273、74LS573等。,DATE:2023/8/7,PAGE:15,三、简单输入/输出口扩展,例8-3 如图8-6示,8051单片机使用74LS373和74LS245展I/O口,分别连接发光二极管和拨码开关,要求编写控制程序,通过开关的拨动控制发光二极管的亮灭。,DATE:2023/8/7,PAGE:16,三、简单输入/输出口扩展,#include#include#define PORT XBYTE0 xFFFF/地址写什么都可以int main(void)unsigned char temp;while(1)temp=PORT;/读存储单元操作,即通过74LS245获取开关数据 PORT=temp;/写存储单元操作,即通过74LS373用开关数据控制发光二极管,DATE:2023/8/7,PAGE:17,四、可编程并行接口8255A,在简单I/O扩展中,一个缓冲器或锁存器只能扩展8位,而且芯片功能单一,不利于单片机灵活地改变扩展方法解决实际需要。8255A可通过软件编程的方式确定或改变其工作方式,广泛用于单片机系统的I/O端口扩展。,DATE:2023/8/7,PAGE:18,四、可编程并行接口8255A,(1)和外设相连的引脚PA7PA0:A端口数据信号引脚PB7PB0:B端口数据信号引脚PC7PC0:C端口数据信号引脚,DATE:2023/8/7,PAGE:19,四、可编程并行接口8255A,DATE:2023/8/7,PAGE:20,(2)和CPU相连的引脚RESET:复位信号,高电平有效。当该引脚为高电平时,所有内部寄存器都被清除,同时A、B、C三个数据端口被自动设为输入端口。D7D0:8255A的数据线,和系统数据总线相连。RD:读引脚,低电平时,CPU可以从8255A选中的端口读出数据,经系统数据总线送入CPU。WR:写引脚,低电平时,CPU可以向8255A选中的端口写入数据。CS:片选引脚,低电平时,可以选中对该芯片操作。,四、可编程并行接口8255A,DATE:2023/8/7,PAGE:21,(2)和CPU相连的引脚 A1、A0:端口选择信号,接系统地址总线。8255A内部有3个数据端口和1个控制端口,共4个端口。A1、A0不同组合时,对应选中不同端口,如下表所示:,四、可编程并行接口8255A,8255A的控制 8255A共有两个控制字,一个是方式选择控制字,另一个是C端口的置位/复位控制字,这两个控制字通过第7位来区分。如果第7位为1,则该控制字是方式选择控制字,否则是C端口的置位/复位控制字。(1)方式选择控制字 方式选择控制字用于设定8255A各端口的工作方式,具体格式如下:,DATE:2023/8/7,PAGE:22,四、可编程并行接口8255A,C端口按位置1/清0控制字C端口按位置1/置0控制字可以对C端口中的任何一位进行置位/复位,具体格式如下图所示:,DATE:2023/8/7,PAGE:23,四、可编程并行接口8255A,8255A的应用 8255A与单片机在采用线选法的情况下最多可连接6片8255,可满足一般情况下的需要。三总线构成如下:地址总线:地址线A0和A1连接P2.6和P2.5;数据总线:8255A的数据线D0D7同8051单片机的P0端口相连;,DATE:2023/8/7,PAGE:24,四、可编程并行接口8255A,控制总线:(1)片选信号线CS连接单片机P2.7。(2)在工作方式0下,因为A口、B口和C口都作为I/O口,将8255A的RESET、RD和WR引脚与单片机信号线连接。(3)在方式1和方式2下,C口作为联络信号,要根据外设的情况将C口的某些位与单片机或外设相连。,DATE:2023/8/7,PAGE:25,四、可编程并行接口8255A,例8-4 如图8-11所示,8255A的A端口和B端口分别连接两个7段数码管,编程实现两数码管分别静态显示“0”和“1”。,DATE:2023/8/7,PAGE:26,四、可编程并行接口8255A,#include#include#define PORT_A XBYTE0 x1FFF/A15=0,A14A13=00#define PORT_B XBYTE0 x3FFF/A15=0,A14A13=01#define PORT_CTL XBYTE0 x7FFF/A15=0,A14A13=11int main(void)PORT_CTL=0 x80;/设定A、B两组工作在方式0,A和B都是输出口;PORT_A=0 xC0;/写“0”字型到8255A的A端口,送数码管显示PORT_B=0 xF9;/写“1”到8255A的B端口,送数码管显示 while(1);,DATE:2023/8/7,PAGE:27,四、可编程并行接口8255A,例8-5 应用8255构成键盘/数码管接口电路,如图8-12所示。8255的PC0PC3与四位数码管的位选端相连,PA0PA7与数码管的段选端相连,PB0PB3与键盘列线相连,PC0PC3与键盘行线相连。编写控制程序,实现按下某按键后,计算相应键值的3次方,并送四位数码管显示。,DATE:2023/8/7,PAGE:28,四、可编程并行接口8255A,#include#include#define uchar unsigned char#define uint unsigned int#define PORT_A XBYTE0 x1FFF/A15=0,A14A13=00#define PORT_B XBYTE0 x3FFF/A15=0,A14A13=01#define PORT_C XBYTE0 x5FFF/A15=0,A14A13=10#define PORT_CTL XBYTE0 x7CFF/A15=0,A14A13=11 unsigned char Led=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 xff;/0-9的字型码unsigned char code Seg=0 x01,0 x02,0 x04,0 x08;/定义无符号字符型数组/延时函数void delay(uint i)uint j;for(j=i;j0;j-);,DATE:2023/8/7,PAGE:29,四、可编程并行接口8255A,bit CheckKey()/检测有无按键按下的子函数uchar i;PORT_A=0 x00;/列线加低电平 i=(PORT_C,DATE:2023/8/7,PAGE:30,四、可编程并行接口8255A,if(CheckKey()=0)return(0 xff);/无按键,返回0 xff else delay(200);/延时 if(CheckKey()=0)return(0 xff);/无按键,返回0 xff else ScanCode=0 xfe;/设置列扫描码,初始值最低位为0 for(i=0;i4;i+)/逐列扫描8次 k=0 x10;/行扫描码赋初值 PORT_A=ScanCode;/送列扫描码 CodeValue=i;/键码和i值一致 for(j=0;j4;j+)if(PORT_C/返回无效键码,DATE:2023/8/7,PAGE:31,四、可编程并行接口8255A,int main(void)uchar i=0;bit flag;uchar key=0 x00;uint val5;PORT_CTL=0 x88;/*A、B两组工作在方式0,A口输出,B口输出,C口低4位输出,C口高4位输入*/while(1)key=KeyScan();if(key!=0 xff)val4=key*key*key;/计算键值的3次方 val0=val4/1000;/计算千位 val1=(val4%1000)/100;/计算百位 val2=(val4%100)/10;/计算十位 val3=val4%10;/计算个位,DATE:2023/8/7,PAGE:32,四、可编程并行接口8255A,while(!CheckKey()/如果没有按键按下,则动态显示数字 for(i=0;i4;i+)if(vali=0)/标记复位,DATE:2023/8/7,PAGE:33,五、可编程接口8155,8155也是在单片机系统扩展中常用的可编程I/O接口芯片,其内部资源主要包括两个8位端口PA和PB,一个6位端口PC,一个可编程的14位减法定时/计数器,此外还有256个字节的静态RAM和8位地址锁存器。,DATE:2023/8/7,PAGE:34,五、可编程接口8155-引脚,DATE:2023/8/7,PAGE:35,8155采用40个引脚的DIP封装,各引脚功能如下:(1)和CPU相连的引脚ADOAD7:地址/数据总线。IO/M:IO口/RAM选择输入信号线,当该口输入高电平时,选择某个I/O端口;当输入低电平时选择内部RAM,地址可由AD0AD7引脚上输入。CS:片选信号线,低电平有效。ALE:地址锁存允许信号线,ALE为高电平时8155将8051单片机送出的地址锁存到内部地址锁存器中。RD:读信号线,低电平有效。WR:写信号线,低电平有效。,五、可编程接口8155-引脚,DATE:2023/8/7,PAGE:36,(2)和外设相连的引脚TMRIN(TI):定时/计数器的外部计数脉冲输入线。TMROUT(TO):定时/计数器的输出信号线,根据定时器的工作方式,可输出方波或脉冲波。PA0PA7:A端口的8位并行I/O端口线。PB0PB7:B端口的8位并行I/O端口线。PC0PC5:C端口的6位并行I/O端口线。(3)其他引脚RESET:复位信号线,高电平有效。VCC:电源线。GND:地线。,五、可编程接口8155-编程控制,可使用控制字对其A、B、C端口及计数器进行控制;可使用状态字判别各端口的工作状态;控制字寄存器只能写不能读,而状态字寄存器只能读不能写,因此控制字和状态字寄存器可共用同一个端口地址而不会产生冲突。,DATE:2023/8/7,PAGE:37,五、可编程接口8155-编程控制,8155的控制字控制字的具体格式如图所示。,DATE:2023/8/7,PAGE:38,五、可编程接口8155-编程控制,8155的状态字状态字格式如图8-14所示。,DATE:2023/8/7,PAGE:39,五、可编程接口8155-工作方式,8155有3种工作方式,分为是存储器工作方式、基本I/O和选通I/O工作方式、定时/计数器工作方式。(1)存储器工作方式 当IO/M=0,且CE=0时,8155工作在存储器工作方式下,可通过低8位地址对片内256个字节的RAM进行读写。(2)基本I/O和选通I/O工作方式 基本I/O口工作方式相应的I/O端口作为普通端口,无固定的联络线、无中断功能。选通I/O工作方式有中断功能,联络线由硬件固定确定,不能通过软件更改。,DATE:2023/8/7,PAGE:40,五、可编程接口8155-工作方式,(3)定时/计数器工作方式8155内部提供一个14位的减法定时/计数器,实现对TMRIN引脚输入的时钟脉冲进行计数,每计数一次,定时/计数器的计数值减1,当减法结果溢出后,TMROUT引脚输出有效脉冲,且定时/计数器中断请求标志位TIMER置1。它有两个8位初值寄存器,其中高8位初值寄存器的最高两位确定定时/计数器的工作方式,其它6位存入计数初值的高6位;低8位初值寄存器用于存放计数初值的低8位。定时/计数器的寄存器格式如下图所示。,DATE:2023/8/7,PAGE:41,五、可编程接口8155-工作方式,对于定时/计数器的使用要求如下:使用8155定时/计数器之前,应首先设置其工作方式以及初值N。设置工作方式及初值后,必须访问控制寄存器启动定时/计数器。定时/计数器工作时可以重设新的计数初值或工作方式,但必须写入一条启动命令之后新的设置才会生效。可使用控制命令停止定时/计数器工作。,DATE:2023/8/7,PAGE:42,五、可编程接口8155-编程应用,DATE:2023/8/7,PAGE:43,由于8155内部有地址锁存器,所以不用再外接锁存器,由单片机P0端口与8155的AD0AD7相连形成数据总线和地址总线,如图所示;控制总线主要由以下几项构成:(1)IO/M:IO口/RAM选择输入信号线,当IO/=1时,单片机访问端口。当IO/=0时,单片机访问内部RAM。(2)CS:片选信号线,低电平有效。(3)ALE:地址锁存允许信号线,ALE为高电平时8155将8051单片机送出的地址信号锁存到内部地址锁存器中。(4)RD:读信号线,低电平有效。(5)WR:写信号线,低电平有效。,五、可编程接口8155-编程应用,表8-5是6个内部寄存器地址:,DATE:2023/8/7,PAGE:44,五、可编程接口8155-编程应用,例8-5 如下图,8155H的A端口和B端口分别连接两个7段数码管,编程实现两数码管分别显示“0”和“1”。,DATE:2023/8/7,PAGE:45,五、可编程接口8155-编程应用,#include#include int main(void)XBYTE0 x7FF8=0 x03;/设置控制命令字XBYTE0 x7FF9=0 xC0;/访问A端口,显示“0”XBYTE0 x7FFA=0 xa4;/访问B端口,显示“1”while(1);,DATE:2023/8/7,PAGE:46,