《微机原理第10章-并行接口芯片.ppt》由会员分享,可在线阅读,更多相关《微机原理第10章-并行接口芯片.ppt(113页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 I/O接口概述接口概述本章内容本章内容本章内容本章内容 并行接口并行接口 8255A学习目的学习目的学习目的学习目的 掌握可编程并行接口芯片掌握可编程并行接口芯片 8255A的连接与编程的连接与编程 微机系统的信息交换有微机系统的信息交换有并行通信并行通信 和和串行通信串行通信两种方式。两种方式。并行通信是以微机的字长为传输单位;并行通信是以微机的字长为传输单位;并行通信是以微机的字长为传输单位;并行通信是以微机的字长为传输单位;适合于外部设备与微机之间进行近距离、大适合于外部设备与微机之间进行近距离、大适合于外部设备与微机之间进行近距离、大适合于外部设备与微机之间进行近距离、大量和快速的信
2、息交换。量和快速的信息交换。量和快速的信息交换。量和快速的信息交换。实现并行通信的接口称之为并实现并行通信的接口称之为并行接口。行接口。概概 述述 8255A是是Intel86系系列列微微处处理理机机的的配配套套并并行行接接口口芯芯片片,它它可可为为86系系列列CPU与与外外部部设设备备之之间间提提供供并并行行输输入入/输输出通道。出通道。并行输入并行输入/输出端口输出端口A、B、C:8255A芯芯片片具具有有24个个可可编编程程输输入入输出引脚,分成输出引脚,分成3个个8位端口。位端口。10.1 8255A的基本功能和结构的基本功能和结构一、一、一、一、82558255A A的内部结构和引脚
3、信号的内部结构和引脚信号的内部结构和引脚信号的内部结构和引脚信号1.82551.8255A A内部结构内部结构内部结构内部结构8255A可可 编编 程程 外外 围围 设设 备备 接接 口口(Programmable Peripheral Interface,简简写写为为PPI),其内部结构如图所示。其内部结构如图所示。图图图图10.1 8255A10.1 8255A内部结构内部结构内部结构内部结构A组控制部件数据总线缓冲器读/写控制部件B组控制部件 RESETA0A1A组端口A8位A组A组端口C(高4位)B组端口C(低4位)8位B组端口BPA7PA0PC7PC4PC3PC0PB7PB0双向 D
4、7D08255A包包括括四四大大部部分分:数数据据总总线线缓缓冲冲器器、读读写写控控制制部部件件、A组组和和B组组控控制制部部件件、端端口口A、B、C。(1)并行输入并行输入/输出端口输出端口A、B、C端端口口A:包包含含一一个个8位位数数据据输输出出锁锁存存器器/缓缓冲冲器器和和一一个个8位位数数据据输输入入锁锁存存器器,输输入输出数据均受到锁存。入输出数据均受到锁存。端端口口B和和C:都都包包含含一一个个8位位数数据据输输入入缓缓冲冲器器和和一一个个8位位的的数数据据输输出出锁锁存存器器/缓缓冲冲器器,输出数据能锁存,输入数据不锁存。输出数据能锁存,输入数据不锁存。端端口口C:可可分分成成
5、两两个个4位位端端口口,分分别别定定义义为为输输入入或或输输出出端端口口,还还可可定定义义为为控控制制、状状态端口,配合端口态端口,配合端口A和端口和端口B工作。工作。(2)A组和组和B组控制部件组控制部件A组组A口:PA0PA7C口的高4位:PC4PC7B组组B口:PB0PB7C口的低4位:PC0PC3 A组,组,B组的控制寄存器,组的控制寄存器,接收来自数据总线的控制字,接收来自数据总线的控制字,并根据控制字确定各端口的工并根据控制字确定各端口的工作状态和工作方式。作状态和工作方式。(3)数据总线缓冲器数据总线缓冲器三三态态双双向向8位位缓缓冲冲器器,是是8255A与与CPU 之之间间的的
6、数数据据接接口口。传传送送输输入入数数据据、输出数据、控制命令字。输出数据、控制命令字。(4)读读/写控制部件写控制部件接接收收来来自自CPU地地址址总总线线信信号号和和控控制制信信号号,并发出命令到两个控制组并发出命令到两个控制组(A组和组和B组组)。CS:片选信号,接片选信号,接CPU高位地址的译码输出高位地址的译码输出WR:写写信信号号,WR有有效效,CPU向向8255A写写入入的的控制或数据信息。控制或数据信息。RD:读信号读信号,RD有效有效,CPU读读8255A的数据或状的数据或状 态;态;RESET:复位信号。RESET有效时,清 8255A 所有控制寄存器内容,并将各端口置成输
7、入方式。2.82552.8255A A的引脚的引脚的引脚的引脚8255A采采 用用 40线线 双双列列直直插插封封装装,引引脚脚图图如如图图所示。所示。图10.2 8255A引脚定义4 3 2 1 40371834.27D7D0A0A1RESETVCCGND986535368255APPI数数据据总总线线控控制制线线电电源源线线通道通道A通道通道B通道通道CCPU接口外设接口.PA7PA0.PB7PB0.PC7PC025141516 171312 11 10 *PA7PA0:A端口数据信号引脚*PB7PB0:B端口数据信号引脚*PC7PC0:C端口数据信号引脚*D7D0:8255A的8位数据线
8、*A1A0:端口选择信号 当当A1A0=00时时 选择端口选择端口A当当A1A0=01时时 选择端口选择端口B当当A1A0=10时时 选择端口选择端口C当当A1A0=11时时 选择控制端口选择控制端口表10.1 8255A的读写操作控制 8255A共共有有两两个个控控制制字字:即即工工作作方方式控制字和对式控制字和对C口置位口置位/复位控制字。复位控制字。1.1.控制字控制字控制字控制字(1)工作方式控制字:工作方式控制字:控制字和各位的含义如图所示。10.2 8255A的控制字及方式选择的控制字及方式选择D7 D6 D5 D4 D3 D2 D1 D0B组端口C(PC3PC0)1=输入,0=输
9、出端口B1=输入,0=输出方式选择0方式0,1=方式1A组端口C(PC7PC4)1=输入,0=输出端口A1=输入,0=输出方式选择00端口A方式0,01=端口A方式1,1=端口A方式2方式设置标志1=有效图10.3 8255A工作方式控制字格式(2)(2)(2)(2)端口端口端口端口C C C C的置位的置位的置位的置位/复位控制字复位控制字复位控制字复位控制字控制字的格式如图所示。控制字的格式如图所示。图10.4 8255A 置位/复位控制字格式D7 D6 D5 D4 D3 D2 D1 D0位的置位/复位1=置位,0=复位位 选 择D3 D2 D1 通道C位按位置位/复位控制标志0=有效0
10、0 0 PC00 0 1 PC10 1 0 PC20 1 1 PC31 0 0 PC41 0 1 PC51 1 0 PC61 1 1 PC7不使用设置为000关于控制字要说明几点:关于控制字要说明几点:(1)设设置置方方式式控控制制字字时时,A口口、B口口作作为为整整体体设设置置,而而C口口要要分分成成上上、下下两两部部分分分分别别设设置置。三三个个端端口口的的工工作作方方式式由由一一个个控控制制字字规规定定。(2)C口口按按位位置置位位/复复位位控控制制字字不不是是送送到到C口口地地址址,而而是是送送到到控控制制寄寄存存器器地地址址;且且一一个个控制字只能使控制字只能使C口口一位置位或复位一
11、位置位或复位。(3)方方式式控控制制字字和和按按位位置置位位/复复位位控控制制字字均均写写入入同同一一个个控控制制寄寄存存器器地地址址,二二者者通通过过最最高高位位D7来来区区别别。D7=1为为方方式式控控制制字字,D7=0为为按按位置位位置位/复位控制字。复位控制字。方方方方式式式式0 0是是是是一一一一种种种种基基基基本本本本输输输输入入入入输输输输出出出出工工工工作作作作方方方方式式式式,它它它它的的的的2424条条条条I/OI/O线线线线可可可可以以以以全全全全部部部部都都都都用用用用作作作作传传传传送送送送数数数数据据据据,不不不不设设设设置置置置应应应应答答答答信信信信号号号号线线
12、线线,常常常常用用用用于于于于无无无无条条条条件件件件传传传传送送送送,输输输输出出出出有有有有锁锁锁锁存,输入只有缓冲能力而无锁存功能。存,输入只有缓冲能力而无锁存功能。存,输入只有缓冲能力而无锁存功能。存,输入只有缓冲能力而无锁存功能。方式方式方式方式0 0控制字具体格式如图控制字具体格式如图控制字具体格式如图控制字具体格式如图10.510.5所示所示所示所示10.3 方式方式0 基本输入基本输入/输出方式输出方式图10.5 8255A工作方式0控制字格式 由控制字中由控制字中D4 4D3 3D1 1D0 0等等4位的不同位的不同 取值可定义方式取值可定义方式0的的16种工作方式的组种工作
13、方式的组 合如表合如表10.2所示。所示。方式方式0中,端口中,端口C被分成两个被分成两个4位位 端口,它们可被定义为输入或输出端端口,它们可被定义为输入或输出端 口,口,CPU与与3个端口之间交换数据,个端口之间交换数据,可直接由可直接由CPU执行执行IN和和OUT指令来完指令来完 成。成。表表表表10.2 10.2 方式方式方式方式0 0的工作状态组合的工作状态组合的工作状态组合的工作状态组合序号序号序号序号控制字控制字控制字控制字D D7 7,D,D0 0A A组组组组B B组组组组端口端口端口端口A A端口端口端口端口C C高高高高4 4位位位位(PCPC7 7PCPC4 4)端口端口
14、端口端口B B端口端口端口端口C C低低低低4 4位位位位(PCPC3 3PCPC0 0)1 11000000010000000输出输出输出输出输出输出输出输出输出输出输出输出输出输出输出输出2 21000000110000001输出输出输出输出输出输出输出输出输出输出输出输出输入输入输入输入3 31000001010000010输出输出输出输出输出输出输出输出输入输入输入输入输出输出输出输出4 41000001110000011输出输出输出输出输出输出输出输出输入输入输入输入输入输入输入输入5 51000100010001000输出输出输出输出输入输入输入输入输出输出输出输出输出输出输出输出
15、6 61000100110001001输出输出输出输出输入输入输入输入输出输出输出输出输入输入输入输入7 71000101010001010输出输出输出输出输入输入输入输入输入输入输入输入输出输出输出输出8 81000101110001011输出输出输出输出输入输入输入输入输入输入输入输入输入输入输入输入9 91001000010010000输入输入输入输入输出输出输出输出输出输出输出输出输出输出输出输出10101001000110010001输入输入输入输入输出输出输出输出输出输出输出输出输入输入输入输入11111001001010010010输入输入输入输入输出输出输出输出输入输入输入输入
16、输出输出输出输出12121001001110010011输入输入输入输入输出输出输出输出输入输入输入输入输入输入输入输入13131001100010011000输入输入输入输入输入输入输入输入输出输出输出输出输出输出输出输出14141001100110011001输入输入输入输入输入输入输入输入输出输出输出输出输入输入输入输入15151001101010011010输入输入输入输入输入输入输入输入输入输入输入输入输出输出输出输出16161001101110011011输入输入输入输入输入输入输入输入输入输入输入输入输入输入输入输入 方式方式1选通输入选通输入方式1操作使端口A或端口B作为锁存输
17、入设备工作。端口C也可按方式1操作使用但不是对数据,而是对控制信号,或当端口A或端口B为选通输入端口时的握手信号。下下图图示示出出8255A方方式式1选选通通输输入入时时的的内内部部结构图。结构图。10.4 方式方式1选通式输入选通式输入/输出方式输出方式图10.6工作方式1输入控制字格式(a)端口A方式1输入(b)端口B方式1输入图10.7方式1输入端口状态IBF:输 入 缓 冲 器 满 信 号,向 外 设 输 出,高电平有效。STB:选通信号。由外设输入,低电平 有效。INTR:中断请求信号,高电平有效。INTE:中断允许信号,它是通过端口PC4(端口A)或PC2(端口B)的位来编程的内部
18、位。方式方式1选通输出选通输出当端口A或端口B为方式1输出时,各指定PC的3条线作为8255A与外设及CPU之间应答信号。下图为方式1选通输出操作的内部结构图。图10.8 方式1输出控制字格式图10.9 方式1输出端口状态INTRAPC3PC6PC7PA70方式1输出端口APC4,5I/OINTEA2WR方式1输出端口BINTRBPC0PC2PC1INTEBPB70WR(a)端口A方式1输出(b)端口B方式1输出OBF:输出缓冲器满信号。向外设 输出,低电平有效。ACK:外设应答信号。由外设输入,低电平有效。INTE:中断允许信号。INTR:中断请求信号。高 电平有效。方式2只允许A组采用,此
19、时端口A变为双向,允许数据在同一组8条线上发送和接收。下图示出方式下图示出方式2操作内部结构图。操作内部结构图。10.5 方式方式2双向选通输入双向选通输入/输出方式输出方式图10.10 端口A方式2控制字 图10.11 端口A工作在方式2的端口状态OBFA:输出缓冲器满信号,向外设输出,低电平有效。ACKA:应答信号,由外设输入,低电平有效。STBA:数据选通输入信号。由外设输入,低电平有效。IBFA:输入缓冲器满信号,向外设输出,高电平有效。INTE:中断允许信号(INTE1和INTE2)。高电平有效。INTRA:中断请求信号,高电平有效。8255A中中端端口口A工工作作方方式式2时时,允
20、允许许端端口口B工工作作于于方方式式0或或方方式式1,完完成成输输入入/输输出出功功能能。4种种组组合合状状态态及及其其工工作方式控制字格式如表作方式控制字格式如表10.3。表表表表10.3 10.3 方式方式方式方式2 2的组合状态与控制字格式的组合状态与控制字格式的组合状态与控制字格式的组合状态与控制字格式 目目前前打打印印机机一一般般采采用用并并行行接接口口Centronics标标准准,其其主主要要信信号号与与传传送送时时序序如如图图10.12。打打印印机机接接收收主主机机传传送送数据的过程是这样的:数据的过程是这样的:10.6 8255A的应用实例的应用实例10.6.1 8255A与打
21、印机接口与打印机接口一、用方式一、用方式一、用方式一、用方式0 0与打印机接口与打印机接口与打印机接口与打印机接口 当当当当主主主主机机机机准准准准备备备备好好好好输输输输出出出出打打打打印印印印的的的的一一一一个个个个数数数数据据据据时时时时,通通通通过过过过82558255A A把把把把数数数数据据据据送送送送给给给给打打打打印印印印机机机机接接接接口口口口的的的的数数数数据据据据引引引引脚脚脚脚DATADATA0DATADATA7,同同同同时时时时送送送送出出出出一一一一个个个个数数数数据据据据选选选选通通通通信信信信号号号号STROBESTROBE 给给给给打打打打印印印印机机机机。打
22、打打打印印印印机机机机收收收收到到到到该该该该信信信信号号号号后后后后,把把把把数数数数据据据据锁锁锁锁存存存存到到到到内内内内部部部部缓缓缓缓冲冲冲冲区区区区,同同同同时时时时在在在在BUSYBUSY信信信信号号号号线线线线上上上上发发发发出出出出忙忙忙忙信信信信号号号号。待待待待打打打打印印印印机机机机处处处处理理理理好好好好输输输输入入入入数数数数据据据据时时时时,打打打打印印印印机机机机撤撤撤撤消消消消忙忙忙忙信信信信号号号号,同同同同时时时时向向向向主主主主机机机机送送送送出出出出一一一一个个个个响响响响应应应应信信信信号号号号ACKACK。主主主主机机机机根根根根据据据据BUSYB
23、USY信信信信号号号号或或或或信信信信号号号号ACKACK决决决决定定定定是是是是否输出下一个数据。否输出下一个数据。否输出下一个数据。否输出下一个数据。图10.12 方式0的打印机接口 本例中,本例中,CPU与与8255A采用查询方式输采用查询方式输出数据。端口出数据。端口A设置为方式设置为方式0,输出打印数据,输出打印数据,端口端口C的的PC7产生负脉冲选通信号,产生负脉冲选通信号,PC2连接连接打印机的打印机的BUSY信号查询其状态,信号查询其状态,PC0连接打连接打印机的信号。印机的信号。假设假设8255A的的A、B、C口的口的I/O地址为地址为FFF8H、FFFAH和和FFFCH,控
24、制端口地址为控制端口地址为FFFEH。:;初始化程序段初始化程序段 MOV DX,0FFFEH MOV AL,81H ;A口方式口方式0输出输出,C口上半部输出口上半部输出,;下半部输入下半部输入 OUT DX,AL ;输出工作方式字输出工作方式字 MOV AL,0FH ;C口的置位口的置位/复位控制字复位控制字,使使PC7 ;=1,即置即置STROBE=1 OUT DX,AL ;输出打印数据子程序输出打印数据子程序,打印数据打印数据 ;在在AH中中 PUSH AX PUSH DX PM:MOV DX,0FFFCHIN AL,DX ;查询查询PC2AND AL,04H ;BUSY=0?JNZ
25、PM ;忙忙,则等待则等待,D2=1 表示忙表示忙 MOV DX,0FFF8H ;不忙,则输出数据不忙,则输出数据 MOV AL,AH OUT DX,AL MOV DX,0FFFEH MOV AL,0EH ;使使PC7=0,即置即置 =0 OUT DX,ALSTROBENOP ;适当延时,产生一定宽适当延时,产生一定宽 度的低电平度的低电平 NOP MOV AL,0FH ;使使PC7=1,置置 =1 OUT DX,AL POP DX POP AX RETSTROBE要求将8255单元与LED-KEYBOARD单元连接,编写程序,扫描键盘输入,并将扫描结果送数码块显示。二、用方式二、用方式二、用
26、方式二、用方式1 1与打印机接口与打印机接口与打印机接口与打印机接口 82558255A A的端口的端口的端口的端口A A工作于选通输出方式,工作于选通输出方式,工作于选通输出方式,工作于选通输出方式,PCPC7作为作为作为作为 输出信号,输出信号,输出信号,输出信号,PCPC6作为作为作为作为A 输入信号,而输入信号,而输入信号,而输入信号,而PCPC3作为作为作为作为INTRINTRA输出信号;另外,可用程序控制输出信号;另外,可用程序控制输出信号;另外,可用程序控制输出信号;另外,可用程序控制INTEINTEA(PC(PC6),决定决定决定决定是否采用中断方式。打印机接口的时序与是否采用
27、中断方式。打印机接口的时序与是否采用中断方式。打印机接口的时序与是否采用中断方式。打印机接口的时序与82558255A A的选的选的选的选通输出方式的时序类似,但略有差别,用单稳电路通输出方式的时序类似,但略有差别,用单稳电路通输出方式的时序类似,但略有差别,用单稳电路通输出方式的时序类似,但略有差别,用单稳电路7474LS123LS123即可满足双方的时序要求,见图即可满足双方的时序要求,见图即可满足双方的时序要求,见图即可满足双方的时序要求,见图10.1310.13。图10.13 方式1的打印机接口 假设假设8255A的的A、B、C口的口的I/O地址为地址为FFF8H、FFFAH和和FFF
28、CH。控制端口的地址为控制端口的地址为FFFEH。以下为以下为采用选通方式输出缓冲区采用选通方式输出缓冲区BUF中的中的打印字符的子程序,输出的字节数打印字符的子程序,输出的字节数为为M。PRINT PROC PUSH AX ;保护寄存器保护寄存器 PUSH BX PUSH CX PUSH DX MOV DX,0FFFEH ;设定设定A口为选通输出方式口为选通输出方式 MOV AL,0A0H OUT DX,AL MOV AL,0CH ;使使INTEA(PC6)为为0,禁中断禁中断 OUT DX,AL MOV CX,M ;打印字节数送打印字节数送CXMOV BX,OFFSET BUF ;取缓冲区
29、首址送取缓冲区首址送BX PRINT1:MOV AL,BX ;取一个数据取一个数据 MOV DX,0FFF8H OUT DX,AL ;从从A口输出口输出 MOV DX,0FFFCH PRINT2:IN AL,DX ;读读C口口 TEST AL,80H ;检测检测OBFA(PC7);为为1否?否?JZ PRINT2 ;为为0,则继续检测,则继续检测 INC BX ;为为1,说明数据已输出,说明数据已输出 LOOP PRINT1 ;准备取下一个数据输出准备取下一个数据输出 POP DX ;打印结束,恢复寄存器打印结束,恢复寄存器 POP CX POP BX POP AX RET ;返回返回 PRI
30、NT ENDP 本例与上例的主要区别是:在上例中,本例与上例的主要区别是:在上例中,由软件对由软件对PC7复位和置位来产生打印机的复位和置位来产生打印机的选通信号,而本例中,选通信号,而本例中,8255A工作在选通工作在选通方式,当执行输出指令时,自动由硬件从方式,当执行输出指令时,自动由硬件从PC7(OBFA)输出负脉冲选通信号。当打输出负脉冲选通信号。当打印机印机ACK变为有效时,自动将变为有效时,自动将PC7置为高置为高电平。电平。最简单的键盘如图最简单的键盘如图最简单的键盘如图最简单的键盘如图10.14(a)10.14(a)所示,其中每个所示,其中每个所示,其中每个所示,其中每个键对应
31、键对应键对应键对应I/OI/O端口的一位。没有键闭合时,各位均端口的一位。没有键闭合时,各位均端口的一位。没有键闭合时,各位均端口的一位。没有键闭合时,各位均处于高电平;当有一个键按下时,就使对应位处于高电平;当有一个键按下时,就使对应位处于高电平;当有一个键按下时,就使对应位处于高电平;当有一个键按下时,就使对应位接地而成为低电平,而其它位仍为高电平。这接地而成为低电平,而其它位仍为高电平。这接地而成为低电平,而其它位仍为高电平。这接地而成为低电平,而其它位仍为高电平。这样,样,样,样,CPUCPU只要检测到某一位为只要检测到某一位为只要检测到某一位为只要检测到某一位为0 0,便可判别出对,
32、便可判别出对,便可判别出对,便可判别出对应键已按下。应键已按下。应键已按下。应键已按下。10.6.2 8255A与键盘接口与键盘接口一、键盘的工作原理一、键盘的工作原理一、键盘的工作原理一、键盘的工作原理图10.14 键盘的结构 用图用图用图用图10.14(a)10.14(a)的结构设计键盘有一个很大的的结构设计键盘有一个很大的的结构设计键盘有一个很大的的结构设计键盘有一个很大的缺点:缺点:缺点:缺点:占用的占用的占用的占用的I/OI/O端口也太多端口也太多端口也太多端口也太多。所以,这种简单。所以,这种简单。所以,这种简单。所以,这种简单结构只用在只有几个键的小键盘中。结构只用在只有几个键的
33、小键盘中。结构只用在只有几个键的小键盘中。结构只用在只有几个键的小键盘中。通常使用的键盘是矩阵结构的。以通常使用的键盘是矩阵结构的。以通常使用的键盘是矩阵结构的。以通常使用的键盘是矩阵结构的。以3 3 3=93=9个键为例,如图个键为例,如图个键为例,如图个键为例,如图10.14(b)10.14(b),这个矩阵分为这个矩阵分为这个矩阵分为这个矩阵分为3 3行行行行3 3列,如果键列,如果键列,如果键列,如果键5 5按下,则第按下,则第按下,则第按下,则第1 1行和第行和第行和第行和第2 2列线接通而列线接通而列线接通而列线接通而形成通路。如果第形成通路。如果第形成通路。如果第形成通路。如果第1
34、 1行线接低电平,则键行线接低电平,则键行线接低电平,则键行线接低电平,则键5 5的的的的闭合,会使第闭合,会使第闭合,会使第闭合,会使第2 2列线也输出低电平。列线也输出低电平。列线也输出低电平。列线也输出低电平。二、键的识别二、键的识别二、键的识别二、键的识别(1)行扫描法行扫描法 图图图图10.1510.15是一个是一个是一个是一个8 8行行行行8 8列组成的键盘。列组成的键盘。列组成的键盘。列组成的键盘。行扫行扫行扫行扫描法识别按键的原理如下描法识别按键的原理如下描法识别按键的原理如下描法识别按键的原理如下:先使第:先使第:先使第:先使第0 0行接低电行接低电行接低电行接低电平,其余行
35、为高电平,然后看第平,其余行为高电平,然后看第平,其余行为高电平,然后看第平,其余行为高电平,然后看第0 0行是否有键行是否有键行是否有键行是否有键闭合。这是通过检查列线电位来实现的,即闭合。这是通过检查列线电位来实现的,即闭合。这是通过检查列线电位来实现的,即闭合。这是通过检查列线电位来实现的,即在第在第在第在第0 0行接低电平时,看是否有哪条列线变成行接低电平时,看是否有哪条列线变成行接低电平时,看是否有哪条列线变成行接低电平时,看是否有哪条列线变成低电平。低电平。低电平。低电平。图10.15 键盘接口电路 如果没有任何一条列线为低电平,如果没有任何一条列线为低电平,则说明第则说明第0行没
36、有任何键被按下。此后,行没有任何键被按下。此后,再将第再将第1行接低电平,检测是否有变为低行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行后一行。在扫描过程中,当发现某一行有键闭合时,便退出扫描,通过组合行有键闭合时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。线和列线即可识别此刻按下的是哪一键。实际应用中,一般先快速检查实际应用中,一般先快速检查键盘中是否有键按下,然后再确定按键盘中是否有键按下,然后再确定按键的具体位置。为此,先使所有行线键的具体位置。为此,先使所有行线为低,然后检查列线。这时如
37、果列线为低,然后检查列线。这时如果列线有一位为有一位为0,则说明必有键被按下,则说明必有键被按下,采用扫描法可进一步确定按键的具体采用扫描法可进一步确定按键的具体位置。位置。图图10.15中将行线与中将行线与8255A端口端口B相连,相连,端口端口B设置为输出。设置为输出。CPU使端口使端口B的某一的某一位为位为0,便相当于将该行线接低电平;某,便相当于将该行线接低电平;某位为位为1,则该行线接高电平。,则该行线接高电平。将列线与端将列线与端口口A相连,端口相连,端口A设置为输入。设置为输入。CPU只要只要读取端口读取端口A的数据,就可以判别是否有键的数据,就可以判别是否有键被按下及是第几列的
38、键被按下。被按下及是第几列的键被按下。从上面的原理可知,从上面的原理可知,从上面的原理可知,从上面的原理可知,键盘扫描程序的第一键盘扫描程序的第一键盘扫描程序的第一键盘扫描程序的第一步步步步应该判断是否有键被按下。为此,使输出端应该判断是否有键被按下。为此,使输出端应该判断是否有键被按下。为此,使输出端应该判断是否有键被按下。为此,使输出端口各位全为口各位全为口各位全为口各位全为0 0,即相当于将所有行线接低电平。,即相当于将所有行线接低电平。,即相当于将所有行线接低电平。,即相当于将所有行线接低电平。然后,从输入端口读取数据,如果读得的数据然后,从输入端口读取数据,如果读得的数据然后,从输入
39、端口读取数据,如果读得的数据然后,从输入端口读取数据,如果读得的数据不是不是不是不是FFHFFH,则说明必有列线处于低电平,从而则说明必有列线处于低电平,从而则说明必有列线处于低电平,从而则说明必有列线处于低电平,从而可断定必有键被按下。此时,为了消除键的抖可断定必有键被按下。此时,为了消除键的抖可断定必有键被按下。此时,为了消除键的抖可断定必有键被按下。此时,为了消除键的抖动,调用延迟程序。如果读得的数据是动,调用延迟程序。如果读得的数据是动,调用延迟程序。如果读得的数据是动,调用延迟程序。如果读得的数据是FFHFFH,则程序在循环中等待。这段程序如下:则程序在循环中等待。这段程序如下:则程
40、序在循环中等待。这段程序如下:则程序在循环中等待。这段程序如下:KEY1:MOV AL,00H MOV DX,ROWPORT ;ROWPORT为行线端口为行线端口 ;地址地址 OUT DX,AL ;使所有行线为低使所有行线为低 MOV DX,COLPORT ;COLPORT为列线端口地为列线端口地 ;址址 IN AL,DX ;读取列值读取列值 CMP AL,0FFH ;判定是否有列线为低电平判定是否有列线为低电平 JZ KEY1 ;没有没有,无闭合键无闭合键,则循环等待则循环等待 CALL DELAY ;有有,则延迟则延迟20ms清除抖动清除抖动 键盘扫描程序的第二步键盘扫描程序的第二步键盘扫
41、描程序的第二步键盘扫描程序的第二步是逐行扫描以判是逐行扫描以判是逐行扫描以判是逐行扫描以判断哪一个键被按下了。开始时,将计数值设断哪一个键被按下了。开始时,将计数值设断哪一个键被按下了。开始时,将计数值设断哪一个键被按下了。开始时,将计数值设置为行数。扫描初值置为行数。扫描初值置为行数。扫描初值置为行数。扫描初值1111111011111110使第使第使第使第0 0行为低电行为低电行为低电行为低电平,其它行为高。输出扫描初值后,马上读平,其它行为高。输出扫描初值后,马上读平,其它行为高。输出扫描初值后,马上读平,其它行为高。输出扫描初值后,马上读取列线的值,看是否有列线处于低电平。若取列线的值
42、,看是否有列线处于低电平。若取列线的值,看是否有列线处于低电平。若取列线的值,看是否有列线处于低电平。若无,则将扫描初值循环左移一位,变为无,则将扫描初值循环左移一位,变为无,则将扫描初值循环左移一位,变为无,则将扫描初值循环左移一位,变为1111110111111101,同时,计数值减,同时,计数值减,同时,计数值减,同时,计数值减1 1,如此下去,直,如此下去,直,如此下去,直,如此下去,直到计数值为到计数值为到计数值为到计数值为0 0,或找到按键所在行时止,程序,或找到按键所在行时止,程序,或找到按键所在行时止,程序,或找到按键所在行时止,程序段如下:段如下:段如下:段如下:MOV AH
43、,0FEH ;扫描初值送扫描初值送AH MOV CX,8 ;行数送行数送CX KEY2:MOV AL,AH MOV DX,ROWPORT OUT DX,AL ;输出行值(扫描值)输出行值(扫描值)MOV DX,COLPORT IN AL,DX ;读进列值读进列值 CMP AL,0FFH ;判断有无接地线判断有无接地线 JNZ KEY3 ;有,则转下一步处理有,则转下一步处理 ROL AH,1 ;无无,则修改扫描值则修改扫描值 ;准备下一行扫描准备下一行扫描 LOOP KEY2 ;计数一次计数一次,未扫完未扫完8行行,则继续循环则继续循环 JMP KEY1 ;所有行都没有键按下,则返回继所有行都
44、没有键按下,则返回继 ;续检测续检测 KEY3:;此时此时,AL=列值列值,AH=行值行值,进行后进行后 ;续处理续处理 将行线接一个数据端口,先让它工作在输将行线接一个数据端口,先让它工作在输将行线接一个数据端口,先让它工作在输将行线接一个数据端口,先让它工作在输出方式;将列线也接到一个数据端口,先让它出方式;将列线也接到一个数据端口,先让它出方式;将列线也接到一个数据端口,先让它出方式;将列线也接到一个数据端口,先让它工作在输入方式。程序使工作在输入方式。程序使工作在输入方式。程序使工作在输入方式。程序使CPUCPU通过输出端口往通过输出端口往通过输出端口往通过输出端口往各行线上送低电平,
45、然后读入列线值。如果此各行线上送低电平,然后读入列线值。如果此各行线上送低电平,然后读入列线值。如果此各行线上送低电平,然后读入列线值。如果此时有某键被按下,则程序再对两个端口进行方时有某键被按下,则程序再对两个端口进行方时有某键被按下,则程序再对两个端口进行方时有某键被按下,则程序再对两个端口进行方式设置,使接行线的端口改为输入方式,接列式设置,使接行线的端口改为输入方式,接列式设置,使接行线的端口改为输入方式,接列式设置,使接行线的端口改为输入方式,接列线的端口改为输出方式。并将刚才读得的列值线的端口改为输出方式。并将刚才读得的列值线的端口改为输出方式。并将刚才读得的列值线的端口改为输出方
46、式。并将刚才读得的列值从列线所接端口输出,再读取行线的输入值,从列线所接端口输出,再读取行线的输入值,从列线所接端口输出,再读取行线的输入值,从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为那么,闭合键所在的行线值必定为那么,闭合键所在的行线值必定为那么,闭合键所在的行线值必定为0 0。(2)行反转法行反转法 这样,当一个键被按下时,必定这样,当一个键被按下时,必定可以读得一对唯一的行值和列值。但可以读得一对唯一的行值和列值。但是,要实现上述行反转法,行、列线是,要实现上述行反转法,行、列线所接的数据端口应能够改变输入、输所接的数据端口应能够改变输入、输出方式出方式,而而
47、8255A的的3个端口正好具有个端口正好具有这个功能。这个功能。为了查找键代码,键盘程序设计时,可将各为了查找键代码,键盘程序设计时,可将各为了查找键代码,键盘程序设计时,可将各为了查找键代码,键盘程序设计时,可将各个键对应的行、列值放在一个表中,程序通过查个键对应的行、列值放在一个表中,程序通过查个键对应的行、列值放在一个表中,程序通过查个键对应的行、列值放在一个表中,程序通过查表来确定哪一个键被按下,进而在另一个表中找表来确定哪一个键被按下,进而在另一个表中找表来确定哪一个键被按下,进而在另一个表中找表来确定哪一个键被按下,进而在另一个表中找到这个键的代码。到这个键的代码。到这个键的代码。
48、到这个键的代码。如果遇到多个键同时闭合的情况,则输入的如果遇到多个键同时闭合的情况,则输入的如果遇到多个键同时闭合的情况,则输入的如果遇到多个键同时闭合的情况,则输入的行值或者列值中一定有一个以上的行值或者列值中一定有一个以上的行值或者列值中一定有一个以上的行值或者列值中一定有一个以上的0 0,而由程序,而由程序,而由程序,而由程序预选建立的键值表中不会有此值,因而可以判为预选建立的键值表中不会有此值,因而可以判为预选建立的键值表中不会有此值,因而可以判为预选建立的键值表中不会有此值,因而可以判为重键而重新查找。所以,用这种方法可以方便地重键而重新查找。所以,用这种方法可以方便地重键而重新查找
49、。所以,用这种方法可以方便地重键而重新查找。所以,用这种方法可以方便地解决重键问题。解决重键问题。解决重键问题。解决重键问题。KEY1:;KEY1:;设置行线接输出端口设置行线接输出端口设置行线接输出端口设置行线接输出端口ROWPORT,ROWPORT,;列线接输入端口列线接输入端口列线接输入端口列线接输入端口COLPORT,COLPORT,并并并并 ;判断是否有键按下判断是否有键按下判断是否有键按下判断是否有键按下 KEY2:MOV AL,00H KEY2:MOV AL,00H MOV DX,ROWPORT MOV DX,ROWPORT OUT DX,AL ;OUT DX,AL ;行线全为低
50、行线全为低行线全为低行线全为低 MOV DX,COLPORT MOV DX,COLPORT IN AL,DX ;IN AL,DX ;读取列值读取列值读取列值读取列值 CMP AL,0FFH CMP AL,0FFH JZ KEY2 ;JZ KEY2 ;无闭合键无闭合键无闭合键无闭合键,循环等待循环等待循环等待循环等待 PUSH AX ;PUSH AX ;有闭合键有闭合键有闭合键有闭合键,保存列值保存列值保存列值保存列值 PUSH AX PUSH AX ;设置行线接输入端口设置行线接输入端口设置行线接输入端口设置行线接输入端口ROWPORTROWPORT,;列线接输出端口列线接输出端口列线接输出端