(本科)V3第8章单片机的并行接口扩展技术.ppt
v课程主讲人:vV3V3第第8 8章单片机的并行接口扩展技术章单片机的并行接口扩展技术2022-5-132022-5-132单片机的扩展总线及地址分配单片机的扩展总线及地址分配8.1存储器的扩展存储器的扩展8.2简单并行简单并行I/OI/O接口的扩展接口的扩展8.3可编程可编程I/O接口的扩展接口的扩展8.4第第8 8章章 单片机的并行接口扩展技术单片机的并行接口扩展技术应用案例应用案例单片机扩展多并行单片机扩展多并行I/OI/O口及口及SRAMSRAM8.52022-5-132022-5-1338.1 单片机的扩展总线及地址分配单片机的扩展总线及地址分配n 80C51单片机的三总线构造单片机的三总线构造l 数据总线数据总线l 地址总线地址总线l 控制总线控制总线v8.1.1 单片机的扩展总线单片机的扩展总线2022-5-132022-5-134l 地址锁存器地址锁存器一般选用带三态一般选用带三态缓冲输出的缓冲输出的8D锁锁存器存器74LS373由于由于P0口是数据、口是数据、地址分时复用的,地址分时复用的,所以所以P0口输出的口输出的低低8位地址必须用位地址必须用地址锁存器进行地址锁存器进行锁存锁存。2022-5-132022-5-135v74LS373是具有输出三态门的电平允许8D锁存器,当使能端G为高电平时,锁存器选通状态;当G端从高电平返回到低电平时(下降沿后),锁存器锁存状态。2022-5-132022-5-1368.1.2 8.1.2 地址分配地址分配l 80C51系列单片机的地址总线有16位,最大寻址空间为64KB,地址范围:0000HFFFFHl 芯片常用的片选方法有两种:线选法和地址译码法。v1 1线选法线选法l 线选法是直接利用单片机的某一高位地址线作为存储器芯片(或I/O接口芯片)的片选控制信号。l 对于80C51单片机,一般使用P2口高位地址线作为片选信号。l 线选法对地址空间的使用不是连续的,地址空间利用率不高,适合少量存储器芯片扩展。v2. 2. 译码法译码法l 译码法就是使用译码器对单片机的若干高位地址线进译码法就是使用译码器对单片机的若干高位地址线进行译码行译码。常用的译码器芯片有常用的译码器芯片有74LS13874LS138(3 38 8译码器)、译码器)、74LS13974LS139(双(双2 24 4译码器)、译码器)、74LS15474LS154(4 41616译码器)。译码器)。2022-5-132022-5-1382022-5-132022-5-139l 根据译码法的逻辑关系和存储器片内寻址范围,可以得到图8.5所示扩展芯片的地址空间,见表8.1。l 译码法能够连续的分配地址空间,有效地利用存储器空间,适合多个存储器芯片扩展。2022-5-132022-5-13108.2.1 8.2.1 程序存储器的扩展程序存储器的扩展8 82 2 存储器的扩展存储器的扩展v一、一、EPROMEPROM芯片及扩展方法芯片及扩展方法l 常用的常用的EPROMEPROM芯片有芯片有27C6427C64、27C12827C128、27C25627C256、27C51227C512等等l 芯片引脚芯片引脚2022-5-132022-5-1312l 程序存储器与单片机接口电路程序存储器与单片机接口电路l 在满足容量要求的前提下,尽可能选择大容量的芯片,以减少芯片数量,减轻总线的负担,提高系统可靠性。2022-5-132022-5-1313二、多片二、多片EPROMEPROM扩展方法扩展方法图8.8为4片27128(16KB)程序存储器扩展方法,片选信号由74LS139译码器产生。l 4片程序存储器的统一编址可参见表8.1图图8.88.82022-5-132022-5-1314l 80C51单片机访问(只读)程序存储器的指令为单片机访问(只读)程序存储器的指令为 MOVC A, A+PC 或或MOVC A, A+DPTR,如读取程序存如读取程序存储器地储器地 址址2000H单元内容的指令为:单元内容的指令为: MOV DPTR, #2000H MOV A, #00H MOVC A, A+DPTRl 采用采用C51语言编程对程序存储器进行访问时,要把变量的语言编程对程序存储器进行访问时,要把变量的存储器类型定义为存储器类型定义为code,该变量只能进行只读操作。例如:,该变量只能进行只读操作。例如:unsigned char code SegCode = 0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90 ; 将数组定义在程序存储器空间,程序运行时,对该数组只能将数组定义在程序存储器空间,程序运行时,对该数组只能进行读操作,不能改写数组内容。进行读操作,不能改写数组内容。2022-5-132022-5-13158.2.2 8.2.2 数据存储器的扩展数据存储器的扩展l 单片机系统扩展数据存储器一般使用SRAM。l 80C51单片机外部扩展的数据存储器空间最大为64KB,单片机的外部数据存储器和I/O口的地址空间是统一编址的。v一、一、RAMRAM芯片及扩展方法芯片及扩展方法v单片机系统扩展常用的SRAM芯片有6264(8KB8位),62128(16KB8位),62256(32KB8位),其主要技术特性见表8.3、表8.4。2022-5-132022-5-1316存储器芯片引脚图:存储器芯片引脚图:2022-5-132022-5-1317芯片的片选端用P2.7线选控制,当P2.7为低电平时,62C64被选中,因此片外RAM的地址为0000H1FFFH。二、数据存储器扩展电路二、数据存储器扩展电路2022-5-132022-5-1318三、多片数据存储器扩展电路三、多片数据存储器扩展电路 当需要扩展多片SRAM时,可以采用前述的线选法和译码法作为SRAM芯片的片选信号。线选法扩展多片线选法扩展多片62C6462C64接口电路接口电路2022-5-132022-5-1319l 从表中可以看出,三个RAM芯片的地址是不连续的,地址空间利用率不高,但片选连线较译码法简单。2022-5-132022-5-1320【例【例8-1】将单片机内部】将单片机内部RAM 30H4FH单元的内容传送到外部单元的内容传送到外部RAM地址为地址为C000HC01FH单元中。单元中。解:解:C51语言程序如下:语言程序如下:#include#define uchar unsigned chardata uchar a32 _at_ 0 x30;xdata uchar b32 _at_ 0 xc000; void main( ) uchar i; for(i=0;i32;i+) bi=ai;2022-5-132022-5-13218.2.3 8.2.3 程序存储器和数据存储器的综合扩展程序存储器和数据存储器的综合扩展2022-5-132022-5-1322l 4个存储器芯片总共占用了32KB的地址空间,并且每个芯片之间的地址是连续的,0000H3FFFH为程序存储器地址空间,4000H7FFFH为数据存储器地址空间。2022-5-132022-5-13238 83 3 简单并行简单并行I/OI/O接口的扩展接口的扩展v8.3.1 8.3.1 输入输入/ /输出接口的功能输出接口的功能(1)对单片机输出的数据锁存(2)对输入设备的三态缓冲(3)信号转换(4)时序协调2022-5-132022-5-13248.3.2 8.3.2 单片机与单片机与I/OI/O设备的数据传送方式设备的数据传送方式(1)无条件传送)无条件传送 适用于对简单的I/O设备(如开关、LED显示器、继电器等)的操作。(2)查询状态传送)查询状态传送 输入数据时,查询输入的数据是否已“准备就绪”;数据输出时,查询输出设备是否“空闲”。(3)中断传送方式)中断传送方式 I/O设备处于主动申请中断的地位,CPU响应中断完成数据传输。(4 4)直接存储器存取()直接存储器存取(DMADMA)方式)方式 采用专用硬件电路执行输入/输出的传送方式,它使I/O设备可直接与内存进行高速的数据传送,而不必经过CPU执行传送程序。2022-5-132022-5-13258.3.3 8.3.3 用用TTLTTL芯片扩展芯片扩展I/OI/O接口接口v图8.14为一个利用74LS273锁存器和74LS244缓冲器构成的并行I/O接口电路。2022-5-132022-5-13268.3.4 8.3.4 用串行口扩展用串行口扩展I/OI/O接口接口v【例8-3】利用单片机串行口扩展16位并行输入口,如图8.15所示。编写程序,读入5组并行I/O口输入的16位数据,并存储到内部RAM缓冲区。l 80C5180C51单片机的串行口的方式单片机的串行口的方式0 0可以用于并行可以用于并行I/OI/O口扩展口扩展。2022-5-132022-5-1327解:解:C51语言程序如下:语言程序如下:#include#include#define uchar unsigned charuchar inData10;uchar n;sbit P10=P10;void receive2B(void) /读入读入2个字节数据个字节数据 uchar i; P10=0; /74LS165装入数据装入数据 _nop()_; P10=1; /启动移位输入启动移位输入 ES=0; /关闭串行口中断关闭串行口中断2022-5-132022-5-1328 for(i=0;i2;i+) while(RI=0) /查询方式读入数据查询方式读入数据 RI=0; inDatai+2*n=SBUF; ES=1; /开放串行口中断开放串行口中断void main( ) SCON=0 x10; /串行口方式串行口方式0,允许输入,允许输入 for(n=0;n5;n+) receive2B( );2022-5-132022-5-1329【例8-4】单片机串行口外接两片74LS164,扩展16位并行输出口,如图8.16所示。编写程序,将内部RAM 40H和41H单元的数据输出到0#74LS164和1#74LS164。2022-5-132022-5-1330解:解:C51语言程序如下:语言程序如下:#include#include#define uchar unsigned char#define byte1 DBYTE0 x40;#define byte2 DBYTE0 x41;sbit P10=P10;void main(void ) SCON=0 x00; P10=0; /74LS164输出端清输出端清0 _nop()_; P10=1; SBUF=byte1; /输出输出40H单元数据单元数据 while(TI=0); TI=0; SBUF=byte2; /输出输出41H单元数据单元数据2022-5-132022-5-13318 84 4 可编程可编程I/OI/O接口的扩展接口的扩展8.4.1 82C558.4.1 82C55的结构与控制字的结构与控制字v一、一、82C5582C55的引脚及结构的引脚及结构2022-5-132022-5-1332(1)并行口PA、PB、PC82C55有3个8位并行口I/O口PA、PB和PC,这些并行口可由控制字确定为输入/输出方式,但在功能和结构上有差别。l PA口:具有1个8位数据输出锁存器/缓冲器,1个8位数据输入锁存器。PA口可以设置为输入方式或输出方式,或者是输入/输出双向方式。PA口的I/O引脚为PA0PA7。l PB口:具有1个8位数据输出锁存器/缓冲器,1个8位数据输入缓冲器(不锁存)。PB口可以设置为输入方式或输出方式,但不能是输入/输出双向方式。PB口的I/O引脚为PB0PB7。l PC口:具有1个8位数据输出锁存器/缓冲器,1个8位数据输入缓冲器(不锁存)。PC口可以设置为输入方式或输出方式,也可以分成两个4位口使用,作为PA、PB口选通方式下的状态控制信号。PC口的I/O引脚为PC0PC7。v82C5582C55的内部结构的内部结构2022-5-132022-5-1333(2)A组和B组控制电路这两组控制电路根据CPU发来的命令字控制82C55的工作方式,A组控制PA口和PC口的上半部(PC7PC4),B组控制PB口和PC口的下半部(PC3PC0),并可使用“命令字”来控制PC口的每一位,实现按位置“1”或清“0”。(3)数据总线缓冲器数据总线缓冲器是一个双向8位三态缓冲器,作为82C55与单片机数据总线之间的接口,用来传送数据、指令、控制命令及外部状态信息。RDWR(4)读/写控制逻辑读/写控制逻辑电路接收来自CPU的控制信号 RESET和地址信号A1、A0。A1、A0用来寻址PA、PB、PC端口和控制寄存器,地址信号与控制信号共同控制82C55的各个端口工作状态,其对应关系如表8.7所示。2022-5-132022-5-1334二、二、82C5582C55控制字控制字1、工作方式选择控制字82C55有3种工作方式:方式0:基本输入/输出。方式1:选通输入/输出。方式2:双向传送(仅PA口有此工作方式)。2022-5-132022-5-1335v3种工作方式由写入控制寄存器的方式控制字来决定。方式控制字格式如下:2022-5-132022-5-1336v例如,写入控制字95H,可将82C55编程为:PA口方式0输入,PB口方式1输出,PC口的高4位(PC7PC4)输出,PC口的低4位(PC3PC0)输入。2 2、PCPC口置位口置位/ /复位控制字复位控制字2022-5-132022-5-1337【例【例8-5】将】将82C55的的PC5置置1,PC4清清0。假设。假设82C55的控制寄的控制寄存器地址为存器地址为0 xff7f。解:参考程序如下:解:参考程序如下:#include #define COM8255 XBYTE0 xff7f.void init8255( ) COM8255=0 x0B; /将置位将置位/复位控制字写入控制寄存器,复位控制字写入控制寄存器,PC5=1 COM8255=0 x08; /将置位将置位/复位控制字写入控制寄存器,复位控制字写入控制寄存器,PC4=0 .2022-5-132022-5-13388.4.2 82C558.4.2 82C55的工作方式的工作方式一、方式0方式0是一种基本输入基本输入/ /输出输出方式。v方式0下,3个端口的基本功能为:v(1)具有两个8位端口(PA、PB)和两个4位端口(PC的高4位和低4位);v(2)PA、PB、PC均可设定为方式0,且都可以设定为输入或输出;v(3)作为输出口时,输出的数据锁存;作为输入口时,输入的数据不锁存。二、方式1v 方式1是一种选通输入选通输入/ /输出输出工作方式,PA口和PB口都可以独立设置成这种工作方式。v此时PC口部分口线作为PA口和PB口的选通联络信号线,没有用作联络信号线的PC口线仍可作为基本输入/输出。1 1、方式、方式1 1输入输入PA口、PB口工作于选通输入方式,PC口作为选通联络信号。2022-5-132022-5-13402022-5-132022-5-1341v图8.21 PA口方式1输入工作示意图2022-5-132022-5-13422 2、方式、方式1 1输出输出2022-5-132022-5-1343图8.23 PB口方式1输出工作示意图2022-5-132022-5-1344三、方式三、方式2 2方式方式2 2是一种是一种双向总线双向总线方式,只有方式,只有PAPA口具有这种工作方式。口具有这种工作方式。2022-5-132022-5-1345v 在单片机应用系统中,可以利用82C55 PA口作为键盘、显示器的接口,即PA口既可以作为键盘按键信息的输入口,也可以作为显示器的数据输出口。v82C55方式2是一种双向I/O工作方式,如果一个并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出不会同时进行,那么将这个外部设备和82C55 PA口连接。v在方式2下,PA7PA0为双向I/O总线,PC口各联络信号的功能与PA口方式1输入和方式1输出时各联络信号的功能相同。2022-5-132022-5-13468.4.3 82C558.4.3 82C55与单片机的接口与单片机的接口一、硬件接口电路一、硬件接口电路2022-5-132022-5-1347二、二、82C5582C55端口地址的确定端口地址的确定【例8-7】如图8.25,82C55的PA口连接8位拨动开关,PB口连接8个LED灯。PA口工作于方式0输入,PB口工作于方式0输出。要求当拨动某位开关时,对应的LED灯点亮。解:参考程序如下:2022-5-132022-5-1348#include#define PA8255 XBYTE0 xff7c#define PB8255 XBYTE0 xff7d#define COM8255 XBYTE0 xff7funsigned char a;void main( ) COM8255=0 x90; /向向82C55控制寄存器写入工作方式控制字控制寄存器写入工作方式控制字 while(1) a=PA8255; /读取读取82C55 PA口开关状态口开关状态 PB8255=a; /向向82C55 PB口输出数据,控制口输出数据,控制LED灯。灯。 2022-5-132022-5-1349【例8-8】利用82C55作为微型打印机与单片机间的接口电路如图8.26所示。编写程序,向打印机输出“单片机原理及接口技术”,微型打印机汉字采用GB2312编码。2022-5-132022-5-1350参考程序如下:#include #include #define PA8255 XBYTE0 xff7c#define PB8255 XBYTE0 xff7d#define PC8255 XBYTE0 xff7e#define COMD8255 XBYTE0 xff7f#define pNUM 21#define uchar unsigned charuchar code tabpNUM = 0 xB5,0 xA5,0 xC6,0 xAC,0 xBB,0 xFA,0 xD4,0 xAD,0 xC0,0 xED,0 xBC,0 xB0,0 xBD,0 xD3,0 xBF,0 xDA,0 xBC,0 xBC,0 xCA,0 xF5,0 x0a; /“单片机原理及接口技术”GB2312编码uchar busy, pnum;2022-5-132022-5-1351void main(void) COMD8255 = 0 xa8; /设置设置PA口方式口方式1输出,输出,PC7作为作为 STB信号,信号,PC4为输入为输入 prt(0 x1c); /送中文打印方式命令字高字节送中文打印方式命令字高字节 prt(0 x26); /送中文打印方式命令字低字节送中文打印方式命令字低字节 EA = 1; /CPU中断开放中断开放 EX1 = 1; /INT1中断开放中断开放 pnum= pNUM; /打印字节数打印字节数 while(1);2022-5-132022-5-1352void prt_Int1(void) interrupt 2 using 1 /INT1中断服务函数,通过中断打印一个字节中断服务函数,通过中断打印一个字节 uchar pc,d; if(pnum!=0) pc=PC8255; /读取读取82C55 PC口数据口数据 busy=pc&0 x10; /获取获取busy状态状态 while(busy=1); /busy=1时,打印机忙时,打印机忙 d= tabpNUM -pnum; /取打印数据取打印数据 PA8255 = d; /输出打印数据,输出输出打印数据,输出STB信号信号 pnum-; else EX1 = 0;2022-5-132022-5-13538 85 5 应用案例应用案例单片机扩展多并行单片机扩展多并行I/OI/O口及口及SRAMSRAM一、设计要求一、设计要求利用AT89S51单片机扩展16个并行I/O口(每个I/O口8位),其中8个输入口,8个输出口,另外系统要有32KB的SRAM数据存储器。二、硬件电路二、硬件电路v图中62C256的地址范围为0000H7FFFH。此种扩展数据存储器的方法可以保证KeilC51程序正常的使用外部数据存储器(xdata类型变量和Large编译模式的使用)。v74HC154为416译码器,16个译码输出端实现对8个输出接口芯片74HC373和8个输入接口芯片74HC244的选通。2022-5-132022-5-1355三、程序设计三、程序设计将将8个输入端口的数据读入,并存储到外部个输入端口的数据读入,并存储到外部RAM中。然后中。然后再将数据输出到再将数据输出到8个输出端口。个输出端口。#include#define uchar unsigned charuchar xdata In_data8;void main() uchar i,dat; for(i=0;i8;i+) dat=XBYTE0 x8008+i; /选中选中输入接口芯片输入接口芯片 In_datai=dat; /数据存储到数据存储到外部外部RAM 2022-5-132022-5-1356 for(i=0;i8;i+) dat=In_datai; XBYTE0 x8000+i=dat; /选中输出接口芯片选中输出接口芯片 v为了使为了使KeilC51编译器能够正确识别外部扩展编译器能够正确识别外部扩展RAM地址范地址范围,在围,在Vision软件的软件的Options for Target Target 1 Target选项中,将片外选项中,将片外RAM参数设置为:参数设置为:Start:0 x0000,Size:0 x8000,即片外,即片外RAM起始地址为起始地址为0 x0000,大小为,大小为32K。