IO接口扩展电路设计.docx
《IO接口扩展电路设计.docx》由会员分享,可在线阅读,更多相关《IO接口扩展电路设计.docx(8页珍藏版)》请在冰点文库上搜索。
IO接口扩展电路设计
I/O接口扩展电路设计
8051系列单片机如果系统不做任何扩展,P0~P3接口可做I/O接口使用。
只要稍微扩展系统,P0、P2接口则被用为地址线。
P0接口还兼做数据线,P3接口常被专用线占用,只有Pl接口可做I/O接口。
一个实际系统,只有8位I/O接口往往是不够用的,所以I/O接口也需要扩展。
本节重点介绍I/O接口扩展方法及应用实例。
I/O接口扩展方式主要有两种:
总线扩展法和串行口扩展法。
总线扩展又可分为简单I/O接口扩展和可编程I/O接口扩展。
扩展I/O接口常用芯片有TTL、CMOS锁存器、三态门芯片,如74系列的373、244、
273、367等,这些常用来扩展简单I/O接口。
可编程芯片常用8255、8155等,利用程序对芯片进行设置,软硬件结合实现对I/O接口的扩展。
简单I/O接口扩展
在单片机应用系统中,利用TTL芯片、COMS锁存器、三态门等接口芯片把P0接口
扩展,常选用74LS273、74LS373、74LS244等芯片。
这些芯片价格低,结构简单,使扩展灵活方便。
如图6-7所示是一个利用74LS273和74LS244,将8位P0接口扩展成简单的输入、输出口的电路。
74LS273是8D锁存器扩展输出口,输出端接8个LED发光二极管,以显示开关状态,某位低电平时二极管发光。
74LS244是缓冲驱动器,扩展输入口,它的8个输入端分别接8个按钮开关。
74LS273与74LS244的工作受P2.0、RD、WR三条控制线控制。
其工作原理如下。
当P2.0=0,WR=0(RD=1)选中74LS273芯片,CPU通过P0接口输出数据锁存到74LS273,74LS273的输出端低电平位对应的LED发光二极管点亮;当P2.0=0,RD=0(WR=1)时选中74LS244,此时若无键按下,输入全为高电平,当某键按下时则对应位输入为“0”,74LS244的输入端不全为“1”,其输入状态通过P0接口数据线被CPU读入机内。
总之,在图6-7中只要保证P2.0端低电平就有可能使扩展输入口或输出口工作。
至于哪一个口工作受WR和RD控制线控制,二者不会同时为“0”,故在图6-7中,两个扩展芯片可共用一个地址。
扩展口地址确定原则,只要保证P2.0为“0”。
其他地址位或“0”或“1”即可。
如地址用FEFFH(无效位全为“1”),用0000H(无效位全为“0”)。
输出程序段:
MOV A, #data ;数据→A
MOV DPTR,#0FEFFH ;I/O地址→DPTR
MOVX DPTR,A ;WR为低电平,数据74LS273口输出
输入程序段:
MOV DPTR,#OFEFFH ;I/O地址→DPTR
MOVX A,DPTR ;RD为低电平,74LS244接口数据读入内部RAM
例要求编程把按键状态通过图6-7中的发光二极管显示出来。
程序
LP:
MOV DPTR,#0FEFFH ;输入口地址→DPTR
MOV A,DPTR ;键状态送A
MOVX DPTR,A ;A数据送显示输出口
SJMP LP ;(输入、输出公用一个地址)反复连续执行
8255可编程并行I/O接口扩展与电路设计
8255是一个单片机系统常用的可编程芯片,利用指令设置各口的工作方式。
为了对8255合理设置,灵活应用,有必要了解他的内部结构及工作原理。
1.8255内部结构及引脚功能
8255是一个有40引脚双列支插型可编程芯片,内部及引脚如图6-8所示。
由图6-8可见,8255内部有3个并行的8位I/O接口,分别称为A口、B口、C口。
扩展一片8255则可扩展24位并行端口。
引脚功能介绍如下:
(1)接口线
A、B、C3个I/O接口的引线端分别为:
PA0~PA7、PB0~PB7、PC0~PC7共24条端线。
3个口皆为锁存/缓冲寄存器,A口、B口有锁存功能,C口无锁存功能。
A、B、C3口的工作方式由程序设置。
A口可设置为输入或输出或双向方式工作。
B口只能设置为输入或输出,不能双向方式工作。
C口可设置为输入或输出口。
它的特点是可分成高、低两个4位使用。
上半部PC4~PC7与A口组成一组叫A组;下半部PC0~PC3与B口组成一组为B组,便于控制。
(2)数据线
8255是8位芯片,有8位数据线D0~D7。
数据线接于8051的P0接口,用以实现8255与CPU之间的数据传送。
(3)控制线
控制线控制8255的读、写、复位及片选等。
RD:
读入控制线,低电平有效,当其为低电平时CPU对8255进行读操作,此时8255相应口为输入口。
WR:
输出控制线,低电平有效,当WR为低电平时,CPU输出数据或命令到8255端口,此时8255相应口为输出口。
RESET:
复位端,高电平有效,8255内部寄存器全清0,24条I/O口线为高阻状态。
CS:
片选线,当CS为低电平时,CPU选中此8255芯片。
(4)地址线
8255共占用4个口地址,为A、B、C口及控制口地址。
这4个地址之间的选择由A0、A1两端口线控制。
A0、A1通常接于单片机的地址线最低两位P0.O、P0.1,二者组合决定了4个端口地址,口地址选择方式如下:
A1A0=00,选择A口;
A1A0=01,选择B口;
A1A0=10,选择C口;
A1A0=11,选择控制口。
除这两位外,其他位状态还与硬件接线有关,各口具体地址,结合实际电路才能确定。
2.方式选择及方式控制字
(1)8255工作方式
8255有3种工作方式:
方式0、方式1,方式2。
方式0时,A、B、C三口都可作基本的输入或输出口;方式1时,A、B口可作选通输入或输出,C口部分作专用联络线;方式2时,A口为双向口,C口部分为专用联络线,B口无此方式。
8255的C口专用功能如表6-3所列。
(2)方式选择
8255的方式选择由方式控制字决定。
方式控制字是8255内部方式控制寄存器的状态字,它由指令写入
控制寄存器中A、B、C口控制位为“1”,对应口为输入方式,若为“0”则为输出方式。
例如,控制字状态为10010101B,表示A组为方式0(D6D5=00),A口为输入方式(D4=1),C口上半部为输出方式(D3=0);B组方式1(D2=1)中,B口为输出(D1=0),C口下半部为输入方式(D0=1)。
D7=0只能对C口位操作,位操作内容由控制寄存器相应位状态决定。
例如,若控制字为01H,即控制寄存器格式为00000001B,表示C口位操作(D7=0),将PC0位置“1”(D3D2D1=000,DO=l置“1”),同理若控制字为0EH则把C口最高位PC7
置“0”即复位。
8255扩展电路及地址设置
如图6-9所示是8051单片机扩展一片8255的电路图。
图中,74LS373是地址锁存器。
8255的地址线AI、A0经74LS373接于P0.1、P0.0;片选端CS经74LS373与P0.7接通,其他地址线悬空;8255的控制线RD、WR直接接于8051的RD和WR端;数据线DB接于P0口。
1.8255地址口确定
图6-9中8255只有3根线接于地址线。
片选CS、地址选择端A1、A0。
分别接于P0.7,P0.1、P0.0其他地址线全悬空。
显然只要保证P0.7为低电平时,选中该8255,若P0.1、P0.0再为“00”选中8255的A口,同理P0.1、P0.0为“01”、“10”、“11”分别选中B口、C口及控制口。
若地址口用16位表示,其他无用端全设为“1”,则8255的A、B、C及控制口地址分别可为FF7CH、FF7DH、FF7EH、FF7FH,无用位为“0”则4个地址为0000H、0001H、0002H、0003H,只要保证CS、A1、A0的状态,无用位设为“0”或“1”无关。
掌握了确定地址的方法,使用者可灵活选择地址。
2.8255初始化
使用8255芯片时,首先要对它初始化。
所谓初始化,也就是对8255的3个端口的工作方式预先设置。
设置控制字经控制口写入。
例如图6-9电路,欲设置8255的A、B、C口全为输出状态,控制字为80H。
程序:
MOV DPTR,#0003H ;8255控制口地址→DPTR
MOV A,#80H ;控制字送A
MOVX DPTR,A ;控制字写入控制寄存器
利用这几条指令对8255初始化后,A、B、C3个口才能作为输出口使用。
当然改变控制字,则可改变3个端口的工作方式。
8155可编程I/O接口扩展设计
8155可编程接口芯片与8255的使用方法类似,只是二者在结构与功能上有所不同。
1.8155结构及引脚
8155内部也有3个I/O接口A、B、C口,与8255的主要区别是C口只有6位,I/O接口共22位,比8255多一个14位可编程定时/计数器,还多256B的静态RAM。
8155共40引脚,双列直插式封装,如图6-10所示。
(1)I/O接口线
PA0~PA7,PB0~PB7,PC0~PC5分别为A、B、C3个I/O接口引线端。
A、B、C口多用于与外设之间的数据传送;C口还可以作为A、B口的控制线。
(2)地址数据线
8155的低8位地址线和数据线共用AD0~AD7,故称为地址数据线。
当ALE=1时,输入的是地址信息,否则是数据信息。
当与8051单片机连接时,ALE下降沿到,将P0接口输出的低8位地址信息及CE、IO/M状态都锁存到8155内部寄存器。
因此8155的AD0~AD7直接与P0接口相联,低8位地址不需要外接锁存器,这点与8255不同。
(3)控制线
ALE:
地址锁存线。
ALE=1表示给8155输入的是地址信息,当ALE下降沿时,把地址锁存到8155中。
IO/M:
RAM与I/O接口的选择线。
IO/M=0选中8155内部RAM区,IO/M=1选择3个I/O接口、定时/计数器和命令寄存器。
CE:
片选线,RD:
读控制线,WR:
写控制线。
TIMERIN:
定时/计数器外部脉冲输入端。
TIMEROUT:
定时/计数器输出端。
2.8155功能及操作
8155具有3种功能,下面介绍具体操作。
(1)作I/O接口使用
IO/M=1时8155作I/O接口使用。
各口的工作方式通过内部控制寄存器设置。
8155工作于I/O口时,各方式具体功能如表6-4所列。
表6-4 8155I/O接口工作方式及功能
PC2PC1 方式 功 能
0 0 方式1 A、B口定义为基本输入/输出口;C口为输入口
1 1 方式2 A、B口定义为基本输入/输出口;C口为输入口
0 1 方式3 A口为选通输出,B口基本输入/输出
PC3~PC5输出,PC0~PC2作A口选通控制
PC0;AINTR,PC1,ABF,PC2,ASTB
1 0 方式4 A口、B口都作为选通输入/输出方式
PC0~PC2控制A口,同方式3
PC3~PC5控制B口,PC3;BINTR,PC4:
BBF
PC5:
BSTB
2)状态寄存器格式
8155有一个状态寄存器,它锁存I/O接口和定时器当前状态供单片机查询。
状态寄存器和控制寄存器共用一个地址,所不同的是状态寄存器只能读出不能写入而控制寄存器只能写入不能读出。
标志寄存器皆为高电平有效。
(2)作扩展RAM
8155作为单片机扩展RAM256B,操作很简单,只要使IO/M控制端为低电平即可。
通常IO/M端、CE端与P2接口两位相连,二者皆为低电平决定了RAM的高8位地址,P0接口与AD0~AD7相接决定RAM的低8位地址。
注意与其他数据存储器统一编址。
(3)作定时器使用
当IO/M=1时,8155也可作定时器使用。
8155内的可编程定时/计数器实际是一个14位的减法计数器。
它共有两个8位寄存器组成,低8位和高6位存放计数初值,最高2位控制定时器的工作方式。
M2M1决定的定时方式及波形,8155的定时计数器为计数方式时。
由引脚TIMERIN(3)从外部输入计数脉冲;为定时方式时,则接单片机系统时钟。
无论定时或计数方式都从TIMEROUT端输出脉冲或方波。
注意:
如果写入定时器的计数初值为奇数,方波输出将不对称。
例如计数初值为9,单方波方式输出方波在5个脉冲周期为高电平,4个脉冲周期内为低电平。
8155任何时候都可以置定时初值和工作方式,只要重新启动即可。
计数初值为2~3FFFH之间,终值为2。
8155计数方式一般作信号发生器使用,输入连续脉冲后,由编程控制输出不同波形。
3.8155的I/O接口及RAM地址分配
8155和其他芯片一样统一按16位地址。
它的地址范围分两种情况。
当RAM方式,IO/M=0、CE=0(二者接P2口),其RAM中数据地址范围可为0000H-00FFH(无关位取为0)。
RAM应与系统中其他数据存储器统一编址。
表6-5I/O接口及定时器地址编码
AD2AD1AD0 选中I/O接口或定时寄存器 低8位地址编码
0 0 0 控制(命令)/状态寄存器 00H
0 0 1 PA口 01H
0 1 0 PB口 02H
0 1 1 PC口 03H
1 0 0 定时器低8位 04H
1 0 1 定时器高8位 05H
当IO/M=1、CE=0时工作在I/O接口或定时器方式,这种情况8155共需要占6个地址,6个地址由地址低8位中最低3位AD2、ADl、ADO编码决定,编码格式如表6-5所列。
4.8051单片机与8155接口电路举例
如图6-11所示是8051单片机与8155芯片接口电路之一。
结合硬件电路着重说明8155地址口的确定及初始化程序。
(1)8051与8155连接特点及地址分配
MCS-51系列单片机可以直接和8155连接,低8位地址可不加锁存器。
ADO~AD7直接接于P0口,8155的ALE直接与8051ALE相接,这点优于8255。
图中8155的IO/M接8051的P2.0端,CE接P2.1端。
IO/M=0,CE=0工作在RAM方式,其地址范围为0000H~00FFH(无用位设为0)。
IO/M=1,CE=08155工作在I/O接口或定时方式,其地址确定方法:
高位保证P2.1=0,P2.0=1其他无用位设为0,这样高位地址为01H,再考虑低位AD2、AD1、AD0三位编码可确定8155的以下6个地址:
控制/状态字地址 0100H
A口地址 0101H
B口地址 0102H
C口地址 0103H
定时器低8位地址 0104H
定时器高8位地址 0105H
(2)8155初始化
用指令把8155设置成各种工作方式:
1)设置I/O口工作方式
例1 设A口为基本输出,B口为基本输入,C口输出。
分析:
根据题目要求,控制寄存器状态为00001101B(0DH),编程把控制字送入即可。
程序为:
MOV DPTR,#0100H ;控制寄存器→DPTR
MOV A,#0DH ;控制字A
MOVX DPTR,A ;控制字送控制寄存器
无论控制字为何值,都必须通过上述方式,把控制字送入控制寄存器,才能正确设置8155中I/O口工作方式。
2)设置RAM方式。
例2 编程使CPU往8155RAM30H单元送立即数88H。
程序为:
MOV DPTR,#0030H ;RAM数据单元地址→DPTR
MOV A,#88H ;立即数送入A
MOVX DPTR,A ;立即数送入0030H中
使用RAM时必在IO/M=0条件下。
3)设置为定时方式。
例3设8155的定时/计数器为方波发生器,输出方波频率为输入时钟频率的24分频。
初始化程序如下:
MOV DPTR,#0104H ;定时器低8位地址→DFTR
MOV A,#18H ;18H-24D分频系数→A
MOVX DPTR,A ;定时初值送入定时器低8位
INC DPTR ;0105H是定时高8位地址
MOV A,#40H ;定时器方式1
MOVX DPTR,A ;A→定时器高位地址
MOV DPTR,#0100H ;控制口地址→DPTR
MOV A,#0C2H ;启动计数器,B口输出,A、C口输入
MOVX DPTR,A
与8155芯片类似芯片如8156,除选片端CE高电平有效外,其他功能及引脚与8155完全相同。
8755内部有2KBEPROM和两个I/O接口,详细参数可查阅有关资料。
串行口扩展I/O接口
单片机控制系统中,串行口常用来扩展I/O接口,使用移位寄存器作为锁存或输入信号的接口,可以方便地扩展并行输入、输出口。
这种方法不占用片外RAM地址,简单易行,便于操作,适用于速度较慢、实时性要求不高的场合。
1.串行口扩展并行输入口
74LS165芯片是8位并行输入和串行移位输出寄存器。
原则上利用n片74LS165与8051的3根端口线相连,可扩展8n根并行输入口线。
图6-12所示利用2片74LSl65与串行口配合,扩展16根并行输入线的电路。
由图可见,8051仅用了3根线,分别为串行口输入线RXD(P3.0)、串行口输出线TXD(P3.1)和1根控制线P1.0引出。
74LSl65是一个8位寄存器,其S/L端是串行移位控制端接于P1.0端;CK是移位时钟输入端,接于P3.1(TXD)端;QH是串行移位输出端接于P3.0(RXD)端。
串行口置为方式0。
两个165芯片是串联方式,首尾相接,低位QH接于高位SER端,高位QH端接8051的RXD端。
若16位并行输入数据已送到两个74LSl65的输入端,当Pl.0=0时。
16位数据被同时接收,置入对应的74LSl65的寄存器中。
当P1.0=1时,移位寄存器开始串行移位,经串行输入口P3.0(RXD)端,一位一位移入8051串行口的缓冲器中。
8051接收完一个字节(一帧),发出中断申请,置RI为“l”,当CPU发现RI=1则可以从串行口缓冲器中读走数据。
例 设读入一组16位数据,将数据存入内部RAM30H、31H单元中。
程序如下:
MOV R2,#2 ;设置字节计数器
MOV R0,#30H ;设置内部RAM首地址
CLR P1.0 ;读入并行输入数据
SETBPl.0 ;允许串行移位
STPI:
MOV SCON,#10H ;设置串行口方式0,允许串行接收
STP:
JNB RI,STP ;等待接收中断
CLR P1.0 ;清中断标志,准备下次接收
MOV A,SBUF ;从串行缓冲器中读数
MOV R0,A ;第一个数存入30H单元
INC R0 ;更新地址
DJNZ R2,STPl ;R20返回继续接收第2个数
SJMP $ ;R2=0结束
结合程序,可以更进一步体会串行口扩展并行输入口的作用及工作原理。
2.串行口扩展并行输出口
图6-13所示是利用串行口扩展并行输出口的电路。
图中,74LS1664是一个串行输入并行输出的芯片,每片有8根输出线。
若用n片则可扩展8n根输出口线。
图6-13用2片74LSl64扩展了16根输出口线,每个74LSl64输出端都接有一个LED数码管。
首先把欲显示的字形代码送入A累加器,启动串行口发进,发送完一个字节,发出中断申请,置发送中断标志位TI=1。
清除TI后,等待发送第2个数,当两个数移入74LSl64后,两个74LSl64的并行输出端可把字形码输入给显示器(LED数码管),则可显示出相应数字。
注意:
输74LSl64无并行出控制端,在串行输入过程中,其输出状态不断变化,若为保证在输入结束后再并行输出,常在74LSl64与输出装置之间加一个74LS244作输出控制。