390 likes | 633 Views
第 7 章 并行接口. 7.1 并行接口概述. 并行接口和串行接口的结构示意图. 并行接口传输速率高,一般不要求固定格式,但不适合长距离数据传输. 7.2 可编程并行接口芯片 82C55 7.2.1 8255 的基本功能. 8255 具有 2 个独立的 8 位 I/O 口( A 口和 B 口)和 2 个独立的 4 位 I/O ( C 口上半部和 C 口下半部) ,提供 TTL 兼容的并行接口。作为输入时提供三态缓冲器功能,作为输出时提供数据锁存功能。其中, A 口具有双向传输功能。
E N D
第7章 并行接口 7.1 并行接口概述 并行接口和串行接口的结构示意图 并行接口传输速率高,一般不要求固定格式,但不适合长距离数据传输
7.2 可编程并行接口芯片82C557.2.1 8255的基本功能 • 8255具有2个独立的8位I/O口(A口和B口)和2个独立的4位I/O(C口上半部和C口下半部),提供TTL兼容的并行接口。作为输入时提供三态缓冲器功能,作为输出时提供数据锁存功能。其中,A口具有双向传输功能。 • 8255有3种工作方式,方式0、方式1和方式2,能使用无条件、查询和中断等多种数据传送方式完成CPU与I/O设备之间的数据交换。 • B口和C口的引脚具有达林顿复合晶体管驱动能力,在1.5V时输出1mA电流,适于作输出端口。 • C口除用做数据口外,当8255工作在方式1和方式2时,C口的部分引脚作为固定的联络信号线。
7.2.2 8255的内部结构和外部引脚 1. 内部结构
A1 A0 RD WR CS 操作 0 0 1 0 1 0 0 0 0 1 1 1 0 0 0 A口内容读至数据总线 B口内容读至数据总线 C口内容读至数据总线 输入 0 0 1 1 0 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 数据总线内容写至A口 数据总线内容写至B口 数据总线内容写至C口 DB内容写至控制寄存器 输出 X 1 X X 1 X X 0 1 X 1 1 1 0 0 端口输出为高阻 非法 端口输出为高阻 禁止 表7.1 8255的端口与操作选择表
7.2.3 8255的工作方式 1.方式0 方式0提供两个8位口(A和B)和两个4位口(PC7~PC4,PC3~PC0),任何一个口都可用做输入或输出(单向),由CPU用简单的I/O指令来进行读/写。 一般用于无条件传送的场合,也可以用做查询式传送。 习惯上将A口和B口作为数据口,将C口作为控制输出和状态输入口。
2.方式l (A口和B口有此方式,单向) (1)方式l的输入 图7.6 A口和B口方式l的输入组态
INTE为中断允许位,对应PC口寄存器(状态字)的D4位(INTEA)和D2位 (INTEB) ,可通过对PC口按位写方法设置; • PC2、PC4引脚作用:用作锁存数据口数据; • 中断条件:STB#(引脚)=1(无效),IBF=1、INTE=1; • PC6、7可作为数据线使用。
外设把数据送到8255端口 • 外设用选通信号STB把数据打入端口的输入锁存器 • 输入缓冲器满信号IBF有效,CPU可查询该信号 • 如果INTE有效,8255将使INTR有效,申请中断 • CPU向8255发读信号RD,从8255端口读数据 • 中断请求信号INTR变无效,然后IBF无效,外设可送下一个数据。 方式1下的输入过程:
(2)方式1的输出 图7.8 8255方式1输出组态
PC2、PC6引脚作用:用作对OBF的回应; • 中断条件:ACK (引脚)=1(无效),OBF=1(W无效)、INTE=1; • PC4、5可作为数据线使用。 • INTE为中断允许位,对应PC口寄存器(状态字)的D6位(INTEA)和D2位 (INTEB) ,可通过对PC口按位写方法设置;
CPU发WR信号,向8255送一个数据 • WR使INTR无效,OBF有效,通知外设可取数据 • 外设接到数据后,向8255回送ACK信号 • OBF无效,接着ACK无效,其上升沿引发INTR有效,向CPU发中断申请,请求发送新数据。 方式1下的输出过程:
3.方式2 双向I/O,只有A口有此方式 图7.10 8255方式2组态
7.2.4 8255的控制字与初始化编程 1.工作方式控制字(写,A1A0=11 ) 图7.11 8255工作方式控制字
例7.1 某系统要求使用8255的A口工作于方式1作输入,B口工作于方式0作输出,C口上半部输入,下半部输出。8255端口地址为60H-63H。 控制字为:10111000B=0B8H 初始化程序为: MOV AL,0B8H OUT 63H,AL
2.C口按位置/复位控制字(写,A1A0=11 ) 图7.12 C口按位置/复位控制字 例7.2 如上例,若A口工作于方式1作输入,要使用中断传送方式,则应当写PC4的按位置位字: MOV AL,00001001B OUT 63H,AL
方式1下8255状态字中INTE位的置位和复位 • ⊙ 若允许PA口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00001001B ;置PC4=1,允许中断请求 • OUT DX,AL • ⊙ 若禁止PA口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00001000B ;置PC4=0,禁止中断请求 • OUT DX,AL • ⊙ 若允许PA口输出中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00001101B ;置PC6=1,允许中断请求 • OUT DX,AL
⊙ 若允许PB口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00000101B ;置PC2=1,允许中断请求 • OUT DX,AL • ⊙ 若禁止PB口输入中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00000100B ;置PC2=0,禁止中断请求 • OUT DX,AL • ⊙ 若允许PB口输出中断请求 • MOV DX,303H ;8255命令口 • MOV AL,00000101B ;置PC2=1,允许中断请求 • OUT DX,AL
例7.3 图7.13采用一个8255芯片和软盘控制器相连,箭头标明了I/O的方向,根据该图,试写出8255的初始化程序。设8255端口地址为0300-0303H。 图7.13 8255用作软盘基本接口
A口工作在方式2,PC4-PC7作应答联络信号线,PC3用作A组中断请求,B口和PC0-PC2作输出,工作在方式0。 工作方式控制字为:11XXX000B 初始化程序为: MOV DX,303H MOV AL,0C0H OUT DX,AL MOV AL,00001001B OUT DX,AL ;PC4置位,开放输入中断 MOV AL,00001101B OUT DX,AL ;PC6置位,开放输出中断
例7.4 某应用系统以8255A作为接口,采集一组开关S7~S0的状态,然后通过一组发光二极管LED7~LED0显示开关状态,(Si闭合,则对应LEDi亮,Si断开,则对应的LEDi灭)电路连接如下图,已知8255A、B两组均工作在方式0。例7.4 某应用系统以8255A作为接口,采集一组开关S7~S0的状态,然后通过一组发光二极管LED7~LED0显示开关状态,(Si闭合,则对应LEDi亮,Si断开,则对应的LEDi灭)电路连接如下图,已知8255A、B两组均工作在方式0。 • 写出8255四个端口的地址。 • 写出8255工作方式控制字。 • 画出实现给定功能的汇编语言程序。
LED7 D7~D0 D7~D0 PA7 IOW WR LED0 RD IOR PB0 A9 G1 CS Y0 AEN G2A 8255A A8 74LS138 A7 & G2B S7 A6 A5 PB7 A4 C S0 A3 B A A2 PB0 A1 A1 A0 A0
答: • A口、B口、C口和控制口的地址分别是320H、321H、322H和323H。 • A口工作在方式0输出,B口工作在方式0输入,C口空闲,所以其控制字是10000010b=82H • 程序如下: MOV AL, 82H ;置方式字 MOV DX, 323H ;置控制端口地址 OUT DX, AL L1: MOV DX, 321H ;置B口地址 IN AL, DX ;读开关状态(1断,0通) NOT AL ;状态取反 MOV DX, 320H ;置A口地址 OUT DX, AL ;输出(1亮,0灭) JMP L1
思考题: 如果上题要求修改成:不用查询方式,而是每50ms来一次中断,在中断中读B口,输出A口,请问电路和程序要怎么改动?假设系统提供一个2KHz的脉冲。
7.3 并行打印机接口标准 ◆ Centronics并行打印接口标准
◆ 表7.3主机-打印机接口信号连线表
控制字锁存器 控制字格式 状态端口 状态字格式 微机系统中打印机卡1的地址是: 数据口0378H、状态口0379H、控制口037AH 微机系统中打印机卡2的地址是: 数据口0278H、状态口0279H、控制口027AH
打印机接口在STB有效时,接收数据,而在BUSY有效时,表示打印机忙,不能接收数据。 例7.5 假设利用8255的A口方式0与打印机相连,将内存缓冲区BUFF中的字符打印输出。
打印机时序 返回
DATA SEGMENT BUFF DB ‘HELLO,WORLD!’,13,10,‘$’ PORTA EQU 60H PORTB EQU 61H PORTC EQU 62H PORTCN EQU 63H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUFF MOV AL,88H ;8255初始化,A口方式0输出,C口上半部输入
OUT PORTCN,AL ;C口下半部输出 MOV AL,01H ;置位PC0,STB无效 OUT PORTCN,AL WAIT:IN AL,PORTC ;读打印机状态,若“忙”则等待 TEST AL,80H JNZ WAIT MOV AL,[SI] CMP AL,‘$’ JZ PRINT_OVER
OUT PORTA, AL ;数据送出 MOV AL, 00H ;产生选通信号,打印机接收数据,开始打印。 OUT PORTCN ,AL MOV AL,01H OUT PORTCN ,AL INC SI JMP WAIT PRINT_OVER: MOV AH,4CH INT 21H CODE ENDS END START 看图
思考题: 如果改成8255使用方式1,应该怎么连接?程序该怎么编写?