第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口
7.1 简单并行接口 采用通用的TTL芯片,是一种不可编程的接口芯片,它电路结构简单、功能单一,硬件接好后,功能固定,无法改变。 7.1.1 简单并行接口的种类 7.1.2 简单并行接口的应用
7.1.1 简单并行接口的种类 基本部件为三态缓冲器和数据锁存器。 通常包括上述两种部件之一或兼具这两种部件的接口电路都可作为简单的并行接口。
1.三态缓冲器接口 使用最多、最典型的是74LS244单向的8位缓冲器/驱动器和74LS245双向的8位总线收发器。 由于三态门具有“通断”控制能力的这个特点,故可利用其作输入接口。利用三态门作为输入信号接口时,要求信号源能够将信号保持足够长的时间直到被CPU读取,这是因为三态门本身没有对信号的保持或锁存能力。
2.数据锁存器接口 数据输出接口通常采用具有信息存储能力的双稳态触发器来实现。 数据锁存器接口主要是指带有一定控制端的触发器和数据锁存器,最简单的可用D触发器构成。例如,常用的8位触发器组成的74LS273芯片。 74LS273共有8个数据输入端(1D~8D)和8个数据输出端1Q~8Q。S为复位端,低电平有效,CP为脉冲输入端,在每个脉冲的上升沿将输入端D的状态锁存在Q输出端,并将此状态保持到下一个时钟脉冲的上升沿。 74LS273常作为并行输出接口。
74LS273的逻辑功能图和引脚图
3.兼具数据锁存器和三态缓冲器的接口 最典型的是74LS373芯片,它是具有三态缓冲功能的数据锁存器,由一个8位的锁存器和一个8位三态缓冲器构成。 功能类似的还有Intel公司的8212输入/输出接口芯片。
74LS373的逻辑功能图和引脚图 使能端G有效时,将D端数据锁存到触发器。 当输出允许端OE有效时,将锁存的数据送到输出端Q。
7.1.2 简单并行接口的应用 下图是使用三态缓冲器74LS244构成的开关接口电路。 由或门和译码器构成缓冲器74LS244的片选控制电路,74LS244的端口地址为80H。 试编写一段程序,实现每隔5分钟检测一次开关S1~S8的通断状态,检测100次结束,并把检测结果保存到以2000H开始的一段存储区域中。 5分钟的延迟子程序为DELAY5M。
7.1.2 简单并行接口的应用(续) MOV BX,2000H MOV CX,100 LOP: IN AL,80H;80H是I/O端口地址 MOV [BX],AL INC BX CALL DELAY5M;延时5分钟 DEC CX JNZ LOP
7.1.2 简单并行接口的应用(续) 下图是采用锁存器74LS373的发光二级管LED接口电路。 由或门和译码器构成锁存器74LS373的片选控制电路,74LS373的端口地址为40H。 试编写一段程序,控制8个LED发光管间隔发光,每隔5秒钟变换发光状态(亮变灭,灭变亮),工作10小时结束。 5秒钟的延迟子程序为DELAY5S。
7.1.2 简单并行接口的应用(续) 由图可看出,输出为0时,LED亮,为1时,LED灭,由于要求8个LED间隔发光,所以可输出初始值为01010101B=55H; 另外,每隔5秒变换发光状态,10小时结束,所以需变换的次数为10×60×60/5=7200。 程序段如下: MOV CX,7200 MOV AL,55H LOP: OUT 40H,AL;40H是I/O端口地址 CALL DELAY5S;延迟5秒钟 XOR AL,0FFH LOOP LOP
7.2 可编程并行接口8255A 7.2.1 8255A的内部结构和引脚特性 7.2.2 8255A的控制字
7.2.1 8255A的内部结构和引脚特性
1.8255A的内部结构 三个8位的数据端口PA、PB、PC,用户可以用软件将它们设置为输入或输出端口。。 端口A(PA口)有一个8位的数据输入锁存器和一个8位的数据输出锁存器/缓冲器。所以,端口A作为输入或输出时,数据均受到锁存。故端口A可以用在数据双向传输的场合。 端口B(PB口)和端口C(PC口)分别有一个8位的数据输入缓冲器和一个8位的数据输出锁存器/缓冲器。只有端口B和端口C用作输出端口时,数据才受到锁存。 8255A的三个数据端口分为两组来控制。端口A及端口C的高4位为A组,端口B及端口C的低4位为B组。
2.8255A的引脚特性 PA7~PA0:端口A的数据输入/输出引脚,和外设相连。 PB7~PB0:端口B的数据输入/输出引脚,和外设相连。 PC7~PC0:端口C的数据输入/输出引脚,和外设相连。 D7~D0:双向三态数据线,和系统数据总线相连。 A1、A0:端口选择信号。 当A1A0=00时,选中端口A; 当A1A0=01时,选中端口B; 当A1A0=10时,选中端口C; 当A1A0=11时,选中控制端口。 8255A的控制端口用来接收控制字,从而决定8255A的工作方式。
7.2.2 8255A的控制字 8255A的控制字有两种: 1.方式选择控制字 2.端口C置1/置0控制字
1.方式选择控制字
例子 在一个8086系统中,若8255A的控制端口地址为0046H,要求将该8255A的端口A工作在方式0,作输出口;端口B工作在方式1,作输入口;端口C 的高4位做输出,低4 位设置为输出。 方式选择控制字为86H。 初始化程序: MOV AL,86H OUT 46H,AL
2.端口C置1/置0控制字
例子 要求将端口C的PC6置0,PC3置1,则端口C置1/置0控制字分别为0CH和07H,若8255A的控制端口地址为B0F6H,则程序段如下: MOV DX,0B0F6H MOV AL,0CH OUT DX,AL MOV AL,07H
7.2.3 8255A的工作方式 有3种,分别为方式0、方式1和方式2。 端口A可以工作在这3种方式的任何一种。 端口B只能工作在方式0或方式1。 端口C除作为一般输入/输出口之外,常用作配合端口A和端口B工作的控制联络口。 工作方式可以通过向控制口写入方式控制字来设置。
1.方式0-基本的输入/输出方式 各端口工作的输入或输出状态可以任意定义。 端口A、B可以被定义为简单的并行输入或输出端口,端口C的高4位和低4位也可以定义为两个独立的4位输入或输出端口。 程序通过IN和OUT指令对各个端口进行读写。
方式0输入时序图
方式0输出时序图
方式0小结 在无条件传送或查询方式时,常使用方式0。 若工作在无条件传送方式下,可以对8255A的三个8位并行数据口直接进行读写操作。 若工作在查询式传送方式下,可以用端口C的某些数位作为状态信号的输入和控制信号的输出。这只需将端口C的低4位和高4位分别定义为输入和输出即可。
2.方式1-选通的输入/输出方式 当8255A的端口A或端口B有一个工作在方式1,而另一个工作在方式0时,端口C的3位固定地作为数据传送的控制联络信号。 若端口A和端口B都工作在方式1,则端口C的6位被占用作为数据传送的控制信号。 由于工作在方式1时,端口C的某些数位自动地转为数据传送的选通和应答信号,故称该方式为选通的输入/输出方式。
方式1输入端口对应控制信号 STB:选通信号,低电平有效。当外设端送给8255A的STB低电平时,8255A的输入缓冲器中得到一个由外设送来的8位数据。 IBF:输入缓冲器满信号,高电平有效。当8255A的输入缓冲器中有一个新数据后,输出此信号供CPU查询。 INTR:中断请求信号,高电平有效。当STB信号有效低电平结束并且IBF信号为有效高电平后,8255A向CPU发出该信号,作为请求CPU读取数据的中断请求信号。CPU发出的读信号有效后,INTR端降为低电平。 INTE:中断允许信号。该信号为高时,允许中断请求,为低时,则屏蔽中断请求。INTE的状态是由端口C置1/置0控制字来控制的,在A组中,对应PC4,B组中,对应PC2。
方式1的输入时序
方式1输出端口对应控制信号 OBF:输出缓冲器满信号,低电平有效。当CPU已经向8255A的端口中传送了数据后,8255A向外设端发出有效低电平,以通知外设将数据取走。 ACK:数据接收应答信号,低电平有效。当8255A 输出的数据到达外设后,外设向8255A传送有效的信号。 INTR:中断请求信号,高电平有效。当外设已经接收到8255A输出的数据,从而ACK恢复高电平,且OBF也为高电平,INTR端置为高电平,作为请求CPU进行下一次数据输出的中断请求信号。 INTE:中断允许信号。该信号为高时,允许中断请求,为低时,则屏蔽中断请求。INTE的状态是由端口C置1/置0控制字来控制的,在A组中,对应PC6,B组中,对应PC2。
方式1的输出时序
方式1小结 若8255A的某一个端口工作在方式1的输入或输出情况下,端口C中自动提供了相应的数位作为控制信号,尤其是提供了中断请求信号。 若外设能给8255A提供选通信号和数据接收应答信号,那么,在此场合下,利用端口C提供的信号和CPU联络而形成数据的中断传送方式,会比采用方式0的无条件传送和查询式传送要方便有效。
3.方式2-双向传输方式 8255A的数据端口中,只有端口A可以工作在此种方式下。 当端口A工作在方式2时,CPU通过8255A既可以向外设发送数据,又可以从外设接收数据,故称为双向传输方式。
方式2时序
方式2小结 由于方式2既可以工作在输入方式,又可以工作在输出方式,所以,若一个并行外设可以输入数据,又可以输出数据,当它和8255A的端口A连接时,可令8255A的端口A工作在方式2。
7.2.4 8255A的编程及应用 8255A作为连接打印机的接口。 现将端口A作为传送字符的通道,工作于方式0,输出;B端口未用;端口C也工作于方式0,PC3作为信号输入端,故PC3~PC0为输入方式,PC6作为信号输出,故PC7~PC4为输出方式。 设需打印的字符已放在CL寄存器中。 8255A的端口地址为: A端口:C000H C端口: C004H B端口:C002H 控制口:C006H
工作过程 当主机要往打印机输出字符时,先查询打印机忙信号。 如果打印机正在处理一个字符或正在打印一行字符,则忙信号为1,反之,则忙信号为0。因此,当查询到忙信号为0时,则可通过8255A往打印机输出一个字符。此时,要将选通信号STB置成低电平,然后再使STB为高电平,这相当于在STB端输出一个负脉冲。(初始状态,是高电平)
程序段 PRINT: MOV DX,0C006H MOV AL,81H;控制字 OUT DX,AL MOV AL,0DH OUT DX,AL;STB端送高电平 LP: MOV DX,0C004H IN AL,DX;检测BUSY AND AL,08H JNZ LP;若打印机忙,则等待 MOV AL,CL MOV DX,0C000H OUT DX,AL; 若打印机不忙,将AL中字符送端口A MOV DX,0C006H MOV AL,0CH OUT DX,AL;使STB为低电平 MOV AL,0DH OUT DX,AL;使STB为高电平 … ;后续程序段
7.3 键盘接口 7.3.1 键盘的工作原理 7.3.2 键的识别
7.3.1 键盘的工作原理 简单键盘结构 矩阵式键盘结构 7.3.1 键盘的工作原理 简单键盘结构 矩阵式键盘结构 运用简单结构来设计键盘的缺点:当键盘上的键较多时,引线太多,占用的I/O端口也太多,只能用在仅有几个键的小键盘中。 通常使用的键盘结构是矩阵式的。设有m×n个键,则采用矩阵式结构只要m+n条引线。
7.3.2 键的识别 为了识别键盘上的闭合键,通常采用行扫描法。 矩阵式键盘的行线、列线分别接并行输出口和并行输入口。
7.3.2 键的识别(续) 行扫描法识别闭合键的原理: 7.3.2 键的识别(续) 行扫描法识别闭合键的原理: 先使第0行接地,其余行为高电平,如有某条列线变为低电平,则表示第0行和此列线相交位置上的键被按下;如列线全为高电平,则说明第0行上没有键被按下。 此后,再将第1行接地,然后检测列线中是否有变为低电平的线。 如此往下逐行扫描,直到最后一行。 在扫描过程中,当发现某行有键闭合时,也就是列线中有1位为0时,根据行线位置和列线位置,便能识别此刻闭合的到底是哪一个键。
7.3.2 键的识别(续) 实际上,一般先快速检查键盘是否有键按下,然后,再确定具体按下了哪一个键。 7.3.2 键的识别(续) 实际上,一般先快速检查键盘是否有键按下,然后,再确定具体按下了哪一个键。 可以先使所有行同时为低电平,再检查是否有列线也处在低电平。这时,如列线上有1位为0,则说明有键被按下,不过,还不能确定所闭合的键处在哪一行上,于是再用扫描法确定具体位置。 WAIT:MOV AL,00H MOV DX,OUTPORT OUT DX,AL MOV DX,INPORT IN AL,DX AND AL,0FFH CMP AL,0FFH JZ WAIT DONE:CALL DELAY;是,则延迟20ms去抖动
扫描法判断键闭合的流程
扫描法判断键闭合的程序段 PROG:MOV BL,0 MOV CL,0FEH MOV DL,8 ;计数值为行数 FROW:MOV AL,CL OUT ROWPORT,AL ROL AL,1 MOV CL,AL IN AL,COLPORTI CMP AL,0FFH JNZ FCOL MOV AL,BL ADD AL,08H MOV BL,AL DEC DL JNZ FROW JMP DONE FCOL: RCR AL,1 JNC PROCE INC BL JMP FCOL PROCE: … ;键命令处理程序 DONE: … ;后续处理程序
7.4 LED显示器接口 7.4.1 LED显示器的工作原理 7.4.2 静态显示与动态显示
7.4.1 LED显示器的工作原理 七段LED显示器 七段LED显示器内部电路
LED显示器和8255A之间的连接
采用专用芯片进行LED段译码 采用专用带驱动器的LED显示器段译码器,可以实现对BCD码的译码,但不能对大于9的二进制数译码。 7447有4位输入,7位输出。使用时,只要将7447的输入端与主机系统输出端口的某4位相连,而7447的7位输出直接与LED显示器的a~g相接,便可以实现对1位BCD码的显示。
软件译码法 下面的程序段用来实现1位数字的LED显示。设要显示数字放在DATA单元中,而LEDADD为代码表首址。 DISP: MOV BX,OFFSET DATA MOV AL,[BX] MOV BX,OFFSET LEDADD XLAT OUT DX,AL LEDADD:DB 40H;0的显示代码 DB 79H;1的显示代码 DB 24H;2的显示代码 …. DB 0EH;F的显示代码
7.4.2 静态显示与动态显示 所谓静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。 每个七段显示器都需要一个8位输出口控制。 静态显示的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统在运行过程中,仅仅在需要更新显示内容时,CPU才执行一次显示更新子程序,这样大大节省了CPU时间,提高CPU的工作效率;其缺点是位数较多时显示口随之增加。
动态显示 为了节省I/O口,常采用动态显示方式。 所谓动态显示方式就是一位一位的轮流点亮各位显示器,对于每一位显示器来说,每隔一段时间点亮一次。 若显示器的位数不大于8,则控制显示器公共极的电位只需要一个8位口(扫描口,又称位口)。 控制各位显示器所显示的字形也需要一个8位口(称为段口)。
动态显示的接口电路
例子 下面给出动态显示预存在显示缓冲器中的“01234567”的程序段。 设8255A的端口地址为: A端口:00C0H B端口:00C2H C端口:00C4H 控制口:00C6H 方式控制字为80H,A组和B组均工作于方式0,A、B端口为输出,C端口未用。
主要程序段 DISINT: MOV DX,00C6H MOV AL,80H;控制字,A、B端口工作于方式0,A、B口输出, OUT DX,AL DIS: MOV BH,80H MOV BL,8 MOV SI,OFFSET DISBUF DISLOP:MOV AL,BH MOV DX,00C0H OUT DX,AL;向A口送位码 MOV DX,00C2H MOV AL,[SI] ;向B口送段码 OUT DX,AL SHR BH,1 INC SI CALL DL1MS DEC BL JNZ DISLOP JMP DIS DL1MS:MOV CX,022BH WAT:LOOP WAT RET 显示缓冲器可预先定义如下: DISBUF:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H