书签 分享 收藏 举报 版权申诉 / 97
上传文档赚钱

类型第9章并行接口课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:5169287
  • 上传时间:2023-02-15
  • 格式:PPT
  • 页数:97
  • 大小:529.01KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第9章并行接口课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    并行 接口 课件
    资源描述:

    1、第9章 并行接口9.1 并行接口原理9.2 可编程并行接口芯片8255A9.3 8255A应用举例9.4 简易键盘接口9.5 LED显示器及其接口9.1 并行接口原理图9-1是一个典型的并行接口和外设连接的示意图。图中的并行接口是一个双通道的并行接口,包括输入锁存寄存器、输出缓冲寄存器、控制寄存器和状态寄存器。9.1.1 并行接口功能一般而言,一个并行接口电路应具有以下3方面的功能:实现与系统总线的连接,提供数据的输入输出功能,这是并行接口电路基本的功能。实现与I/O设备的连接,具有与I/O设备进行应答的同步机构,保证有效地进行数据的接收/发送:有中断请求与处理功能,使得数据的输入/输出可以采

    2、用中断的方法来实现功能。9.1.2 内部结构按功能分,接口电路分为:数据寄存器、控制寄存器、状态寄存器、其他控制电路等 9.1.3 外部信号并行接口电路的外部信号可分成两部分:与I/O设备相连的接口信号;与CPU相连的接口信号。1与I/O设备的接口信号数据信号:用于接口电路与I/O设备进行输入/输出数据。控制信号:用于接口电路向I/O设备提供控制功能。状态信号:用于接口电路接收I/O设备提供的状态信息。2与CPU的接口信号数据信号:用于实现接口电路与CPU的数据交换。地址译码信号:用于选择不同的接口电路以及接口电路内部不同的寄存器。读写信号:用于确定CPU当前对接口电路的操作性质,是读或是写。

    3、中断申请与应答信号:用于实现中断请求和中断响应操作。9.2 可编程并行接口芯片8255A常用的并行接口电路有两大类,一类是不可编程的接口电路,如74LS244/245、74LS273/373等。其特点是电路简单、使用方便;缺点是使用不够灵活,一旦硬件联接以后,功能很难改变。另一类是可编程接口,其特点是使用灵活,可以在不改变硬件的情况下,通过软件编程来改变电路的功能。随着大规模集成电路技术的发展,出现了许多通用的可编程的并行接口电路芯片。Intel 8255A就是一个与TTL电平完全兼容的可编程并行接口芯片,其通用性强、使用灵活,具有多种输入输出工作方式,可以通过程序来设置。9.2.1 8255

    4、A的内部结构 8255A的内部组成框图如9-2所示,由4部分组成。1数据总线缓冲器它是三态8位双向缓冲器,CPU通过输入/输出指令来实现对缓冲器发送或接收数据。8255A的控制信息和状态信息也是通过该缓冲器传送的。28位端口PA、PB和PC8255A有3个8位端口PA、PB和PC,各端口都可以由程序设定为不同的工作方式。端口PA1个8位的数据输入锁存器和1个8位的数据输出锁存/缓冲器。端口PB1个8位的数据输入缓冲器和1个8位的输入、输出锁存/缓冲器。端口PC1个8位数据输入缓冲器和1个8位输出锁存/缓冲器。通常,将端口PA与端口PB用作输入输出的数据端口,端口PC用作控制或状态信息的端口。在

    5、方式控制字的控制下,端口PC可以分为上下两部分,分别与端口PA和端口PB配合使用,用作控制信号(输出),或作为状态信号(输入)。与外部设备的接口信号:PA0PA7端口A的外设数据线。PB0PB7端口B的外设数据线。PC0PC7端口C的外设数据线。3A组和B组的控制电路A组控制部件用来控制端口PA和端口PC的高4位(PC7PC4),B组控制部件用来控制端口PB和端口PC的低4位(PC3PC0)。这两组控制电路根据CPU发出的方式选择控制字来控制8255A的工作方式,接收来自读写控制逻辑的命令,并向与其相连的端口发出适当的控制信号。4读/写控制逻辑用于管理数据信息、控制信息和状态信息的传送。它接收

    6、来自CPU地址总线的A1、A0地址信号和控制总线的有关信号(、RESET),向8255A的A、B两组控制部件发送命令。WRRD8255A是一个40引脚双列直插的芯片,其引脚如图9-3所示。控制信号 、以及A1、A0与8255A各端口的操作关系如表9-1所示。CS RDWR与CPU的接口信号:D7D0数据线、双向、三态,可连接CPU的数据总线。CS 片选信号、输入、低电平有效。只有当 为“0”时,8255A芯片才工作。通常,接地址译码信号。A1、A0片内寄存器选择信号(端口选择),输入。8255A内部有3个数据端口和1个控制端口。规定当A1,A0为00时,选中端口PA;为01时,选中端口PB;为

    7、10时,选中端口PC;为11时,选中控制端口。RESET复位信号、输入、高电平有效。当接收到RESET信号时,所有的内部寄存器都被清除,同时3个数据端口被自动设置为输入状态。RD 读信号、输入、低电平有效。当有效时,CPU可以从8255A中读取数据。WR 写信号、输入、低电平有效。当有效时,CPU可以向8255A写入数据或命令字。RDCS9.2.2 8255A的控制字8255A有两个控制字:方式控制字和端口C按位置位/复位控制字。由于写入同一个控制端口,为了使8255A能识别是哪一个控制字,控制字采用特征位的方法。控制字中最高位D7为特征位,当D7=0,表示当前控制字是按位置位/复位控制字。当

    8、D7=1,表示当前控制字是方式控制字。1方式控制字方式控制字的作用是:确定A、B、C 3个并行口的工作方式及端口功能,即确定是作为输入端口还是为输出端口。由方式控制字可知:(1)8255A的3种基本工作方式如下:方式0基本的输入/输出方式。方式1选通输入/输出方式。方式2双向传输方式。(2)在方式1工作时,方式控制字总是把A、B、C 3个端口分为两组来设定工作方式。其中,A组为端口A和端口C的高4位(PC7PC4);B组为端口B和端口C的低4位(PC3PC0)。(3)端口A可工作于3种方式中的任种。端口B只能工作于方式0或方式1。在方式0时,端口C可以分成2个4位端口,用作数据输入/输出端口;

    9、还可以分别用来为A端口、B端口输入/输出时提供控制信号和状态信号。方式控制字的格式如图9-4所示。n在对8255A进行初始化时,应向控制寄存器写入方式控制字,确定各端口的工作方式及功能。在系统复位时,复位信号RESET有效,8255A被复位,所有的数据端口(端口A、端口B、端口C)均被置为输入方式,且一直保持到向8255A写入新的方式选择控制字为止。n例9-1 如果把端口A设定为方式1,输出;端口B设定为方式0,输入;端口C上半部设定为输入,下半部设定为输出。则方式选择控制字应为:10101010B=AAH。n若将此控制字内容写入8255A的控制寄存器,即实现了对8255A工作方式的设定,就是

    10、完成了对8255A的初始化。设控制口地址为303H,初始化的程序段为:nMOV DX,303H ;8255A的控制口地址nMOV AL,OAAH;控制字nOUT DX,AL ;控制字写入控制端口2端口C按位置位/复位控制字按位置位/复位控制字的作用是使端口C的某一位输出为高电平或低电平,以用于控制或应答信号。端口C按位置位/复位控制字的格式如图9-5所示。例9-2 如果要使端口C的PC4端输出高电平,则按位置位/复位控制字应为00001001B=09H,将该控制字写入8255A的控制寄存器,即可在PC4引脚得到一个高电平。设控制口地址为09H,则程序段如下:MOV AL,09H;控制字,PC4

    11、置1OUT 063H,AL;控制字写入控制端口实际上,端口A和端口B同样具有进行按位置位/复位的功能。只要将端口A或端口B的内容读出来,与某一数相“或”(可使某一位或某几位为1),或者与某一数相“与”(可使其一位或某几位为0),然后再写入原端口,即可实现对某一位或某几位置位/复位。9.2.3 8255A的工作方式8255A有3种工作方式,由方式控制字选择。1工作方式0:基本的输入/输出方式(1)方式0是一种基本的输入/输出方式,它不需要应答式的联络信号,其基本功能如下:2个8位端口(端口A和端口B)和2个4位端口(端口C的上、下部分)。任何一个端口可以作为输入或输出端口。输出数据可被锁存,输入

    12、数据不被锁存。每个端口的输入/输出可有16种不同的组合。执行方式0输入操作时,若外设数据已经准备好,CPU就可以用输入指令从这个端口读入数据。执行方式0输出操作时,由输出指令把CPU的数据输出给外设,在CPU执行OUT指令以后,输出数据就锁存在相应的端口上。因此,工作方式0时,8255A在输入操作时相当于一个三态缓种器,在输出操作时则相当于一个数据锁存器。(2)图9-6和图9-7分别为方式0的输入、输出时序图。方式0适合于两种情况:一种是无条件传送,另一种是查询方式传送。图9-7 方式0输出时序图在无条件传送时,发送方和接收方不需要应答信号。在这种情况下,对接口要求很简单,只要能够传送数据就可

    13、以。因此,在无条件传送时使用8255A时,3个数据端口可以实现3路数据传输。查询式传送时,需要有应答信号。由于方式0不提供固定的应答信号,所以,通常用端口PA和端口PB作为数据端口,用端口PC的高4位和低4位分别设置为输入和输出,作为控制信号的输出和状态信号的输入。2工作方式1:选通输入/输出方式这是一种采用选通(应答式)联络信号的输入/输出方式。在这种方式中,端口A仍用作输入或输出的数据端口,端口C的某些位用作接收或产生联络应答信号。主要功能如下:有两组选通工作方式的端口,每组包含1个8位数据端口和3条控制线。每组端口提供有中断请求逻辑和中断允许触发器。对中断允许触发器INTE的操作是通过端

    14、口C的置位/复位控制字进行的。置位允许中断,复位禁止中断。INTE触发器对应端口C的位是作应答联络信号的输入信号的那一位(输入方式为,输出方式为,因此只要对该位置位/复位就可以控制INTE触发器。两组端口若只有1组工作于方式1,则剩下的13位都可以工作于方式0。若两组端口都工作于方式1,端口C剩下的2位还可以由方式控制字指定为输入或输出,同时具有置位/复位功能。输入和输出数据都被锁存。(1)方式1的输入1)方式1的输入组态。方式控制字选择A组、B组工作于方式1输入时,其端口组态如图9-8所示。2)联络信号的定义 选通信号,低电平有效。这是由外部设备提供的输入信号,当其有效时,将输入设备送来的数

    15、据锁存输入锁存器。IBF输入缓冲器满信号,高电平有效。这是8255A输出的联络信号。当其有效时,表示数据己锁存在输入锁存器中。它由前沿置高、信号的后沿置低。INTER中断请求信号,高电平有效。这是8255A输出的信号,可用于向CPU提出中断请求,要求CPU读取外设数据。当为高电平,IBF为高电平、中断允许时被置为有效;信号的前沿将其恢复为低电平。STBA组的中断允许触发器INTEA对应于PC4,B组的INTEB对应于PC2。3)方式1的输入时序。图9-9为方式1的输入时序图。图9-9 方式1的输入时序图以端口PA为例,方式1的输入过程如下:当外设准备好数据,在送出数据的同时,向PC4送出一个选

    16、通信号。8255A的端口A数据锁存器在下降沿控制下,将数据锁存。然后,8255A通过PC5,向外设送出高电平的IBF,表示锁存数据已完成,暂时不要再送数据。如果INTE为“1”,即端口PA允许中断,位于PC3的INTR变成高电平输出,向CPU发出中断请求。CPU响应中断,执行IN指令时,对端口PA执行读操作,同时由信号的下降沿清除中断请求信号,然后使IBF复位为低电平。外设在检测到IBF为低电平后,开始下一个数据字节的传送。(2)方式1输出。1)方式1的输出组态。8255A的端口A、端口B工作于方式1输出时其端口组态如图9-10所示。2)联络信号的定义。输出缓冲器满信号,低电平有效。这是825

    17、5A输出给外设的一个控制信号,当其有效时,表示CPU已将数据输出给指定的端口,外设可以将数据取走。它由输出信号的后沿置为有效,由ACK有效恢复为高电平。外设应答信号,低电平有效。表示8255A的端口数据已由外设取走。INTR中断请求信号,高电平有效。当输出设备已接收数据后,8255A输出此信号向CPU提出中断请求,请求CPU继续提供数据。当为高电平,为高电平和INTE为高电平(允许中断)时,使其有效,而写信号的前沿使其复位。OBFACKA组中断允许触发器INTEA由PC6位控制,B组的INTEB由PC2位控制。3)方式l的输出时序。方式1的输出时序如图9-11所示。在方式1输出时,CPU向端口

    18、写入一个字节数据以后,有效,通知外设读取数据。当外设读取数据以后,向端口发一个信号,其后沿将置位INTR信号(若INTE=1),向CPU发出中断请求,要求CPU在中断服务程序中发送新的数据。因此,在方式1时,规定一个端口作为输入口或输出口的同时,自动规定了有关的控制信号,尤其是规定了相应的中断请求信号。3工作方式2:双向选通输入/输出方式I(1)方式2的功能。这种方式使外设可在单一的8位数据上,既能发送数据,又能接收数据。工作时可用程序查询方式,也可用中断方式传送数据。其主要功能如下:只可用于A组,B组仍为工作方式0或方式1。1个8位的双向数据端口A和5根控制线。输入和输出数据都被锁存。(2)

    19、方式2的组态端口A方式2的组态如图9-12所示。(3)联络信号的定义。选通输入信号,低电平有效。这是外设供给8255A的选通信号,把数据锁存在输入锁存器,IBF输入缓冲器满信号,高电平有效。这是8255A输出的控制信号,表示数据已进入锁存器。在CPU未读取数据前,IBF始终为高电平,阻止新的数据输入。响应输入信号,低电平有效。的下降沿启动端口A的三态输出缓冲器送出数据,上升沿是数据已输出的响应信号。其他时间输出缓冲器处于高阻状态。INTR中断请求信号,高电平有效。输入或输出数据时,都用它作为中断请求信号。输出的中断允许触发器INTE1由PC6置位/复位控制,输入的中断允许触发器INTE2由PC

    20、4控制。STBACK(4)方式2的工作时序。图9-13为方式2的工作时序图。图9-13 方式2时序图方式2是一种双向工作方式。如果一个并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入/输出动作不同时进行,那么,将这个外设与8255A的端口A相连,并使它工作在方式2,就会非常合适。例如,软盘驱动器就是这样一种外设,主机既可以往软盘驱动器输出数据,又可以从软盘驱动器输入数据,但数据的输出和输入过程总是不重合的。所以,可以将软盘驱动器的数据线与8255A的PA7PA0相连,将端口PA设置为工作方式2,对应的端口PC用作联络信号,就可通过8255A输入输出软盘的信息。9.3 8255A应用

    21、举例 9.3.1 查询方式的双机并行通信例9-3 甲乙两台微机之间并行传送1KB数据。甲机发送,乙机接收。甲机的8255A采用方式1工作,乙机的8255A采用方式0工作。两台微机的CPU与接口之间都采用查询方式交换数据。(1)接口电路设计。接口电路的连接如图9-14所示。甲机的8255A是方式1发送,因此,把端口PA指定为输出,发送数据,而PC7和PC6引脚分别固定作联络线和。乙机的8255A是方式0接收数据,故把端口PA定义为输入,另外,选用引脚PC7和PC3作为联络线。虽然两侧的8255A都设置了联络线,但有本质的差别:甲机的8255A是方式1,其联络线是固定的,不可替换;乙机的8255A

    22、是方式0,其联络线是不固定的,可以选择。(2)接口软件编程。接口驱动程序包括发送程序和接收程序。甲机发送如下程序段:MOV DX,303H ;8255A命令端口MOV AL,l0100000B;初始化工作方式字OUT DX,AL MOV AL,0DH ;设置发送数据区的指针OUT DX,ALMOV SI,OFFSET BUFS;设置发送数据区的指针OUT CX,3FFH ;发送字节数MOV DX,300H;向端口A写第1个数,产生第1个OBF信号MOV AL,SI ;送给乙方,以便获取乙方的ACK信号 OUT DX,AL INC SI ;内存地址加1 DEC CX ;传送字节数减1L:M0V

    23、DX,302H ;8255A状态端口(端口C)IN AL,DX ;查发送断清求则INTRSA=1 AND AL,08H ;是否PC3=1 JZ L ;若无中断请求,则等待;若有中断请求,则向端口A写数 M0V DX,300H ;8255A端口 PA地址 M0V AL,SI ;从内存取数 0UT DX,AL ;通过端口A向乙机发送第2个数据 INC SI ;内存地址加1 DEC CX ;字节数减1 JNZ L ;字节未完,继续 M0V AX,4COOH ;己完,退出 INT 21H ;返回DOS BUFS DB.;定义1024个数据 在发送程序中,是查询输出时状态字的中断请求INTR位(PC3)

    24、。实际上,也可以查询发送缓冲器满(PC7)的状态。只有当发送缓冲器空时,CPU才能发送下个数据。乙机接收如下程序段:MOV DX,303H ;8255A命令端口MOV AL,10011000B;初始化工作方式字OUT DX,ALMOV AL,00000111B;置=1(PC3=1)OUT DX,ALMOV DI,OFFSETBUFR;设置接收数据区的指针MOV CX,3FFH ;接收字节数L1:MOV DX,302H ;8255A端口PCIN AL,DX ;查甲机的=O?(乙机的PC7=O)AND AL,80H ;即查P机是否有数据发来JNZ L1 ;若无数据发来,则等待;若有数据,则从端口A

    25、读数 MOV DX,300H ;8255A端口PA地址IN AL,DX ;从端口A读入数据M0V DI,AL ;存入内存MOV DX,303H ;产生信号,并发回给甲机MOV DX,OO000110B;PC2置“O”OUT DX,ALNOPNOPMOV AL,00000111B;PC3置“1”OUT DX,ALINC DI ;内存地址加1DEC CX ;字节数减1JNZ L1 ;字节未完,则继续MOV AX,4COOH;已完,退出INT 2lH ;返回DOSBUFR DB l024 DUP(?)9.3.2 与打印机接口例9-4 假设利用8255的A口方式0与打印机相连,将内存缓冲区BUFF中的

    26、字符打印输出。硬件连接见图9-15。设8255的工作频率与CPU的工作频率相当。打印机接口要求在有效时,才能接收数据;而在BUSY有效时,则表示打印机忙,不能接收数据。程序如下:DATA SEGMENTBUFF DB HELLO,WORLD!,13,10,PORTA EQU 60HPORTB EQU 61HPORTC EQU 62HPORTCN EQU 63HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFFMOV AL,88H ;8255初始化,A口方式0输出,C口上

    27、半部输入OUT PORTCN AL ;C口下半部输出MOV AL,01H ;置位PC0,无效OUT PORTCN,ALWAIT:IN AL,PORTC ;读打印机状态,若“忙”则 等待 TEST AL,80HJNZ WAITMOV AL,SICMP Al,$JZ PRINT_OVEROUT PORTA,ALMOV AL,00H ;产生选通信号,打印机接收数据,开始打印OUT PORTCN ,ALMOV AL,01HOUT PORTCN ,ALINC SIJMP WAITPRINT-OVER:MOV AH,4CHINT 21HCODE ENDSEND START 本例中,C口的按位置/复位控制字

    28、用来产生打印机的控制信号,控制打印机启/停。此时,C口的按位置/复位控制字实现C口的位操作。9.4 简易键盘接口 9.4.1 键盘的工作原理最简单的键盘如图9-16(a)所示,其中每个键对应I/O端口的一位。没有键闭合时,各位均处于高电平;当有一个键按下时,就使对应位接地而成为低电平。这样,CPU只要检测到某一位为“0”,便可判别对应键已经按下。但是,用图9-16(a)的结构设计键盘有一个很大的缺点。这就是当键盘上的键较多时,占用的I/O端口太多。比如一个有64键的键盘,就需要64条连线,需占用8个8位端口,这是我们不希望的。所以,这种简单结构只用在仅有几个键的系统中。通常使用的键盘是矩阵结构

    29、的。对于88=64个键的键盘,采用矩阵方式就只要用16条引线(2个8位端口)便完成键盘的连接。以33=9个键为例,如图9-16(b),这个矩阵分为3行3列,如果键4按下,则第1行和第1列线接通而形成通路。如果第1行线接地电位,则由于键4的闭合,会使第1列线也输出地电位。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。9.4.2 键的识别方法为了识别键盘上的闭合键,通常可以采用两种方式:逐行扫描法和行列反转法。1逐行扫描法图9-17是一个8行8列组成的键盘。行线与8255的A端口相连,列线与8255的B端口相连。CPU使8255的A端口某一位为0,相当于将该行线接地;某位为1,相当于将该

    30、行线接高电平。行扫描法识别按键的原理如下:(1)使所有行线为低电平,然后读入列线值并进行检查。如果列线有一位为低,则说明必有键被按下。(2)使第0行输出低电平,然后读入列线值并进行检查。如果有某列线变为低电平,则表示第0行和此列线相交的位置上的键被按下。如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。(3)将第1行接低电平,然后读入列线值并进行检查。检测列线是否有变为低电位的线。如此往下一行一行地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,也就是读入的列线值中有一位为低时,即可识别出此刻是哪一键被按下。第一步是判断是否有键按下。为了消除键的抖动,所以调用了延迟程序。这

    31、段程序如下:KEY1:MOV AL,00MOV DX,ROWPORT;ROWPORT为行线端口地址OUT DX,AL ;使所有行线为低MOV DX,COLPOET;COLPOET为列线端口地址IN EL,DX ;读取列值AND AL,0FFHCOMP AL,0FFH ;判定是否有列线为低电平JZ KY1 ;没有,无闭合键,则循环等待CALL DELAY ;有,则延迟20ms清除抖动 第二步是判断哪一个键被按下了。首先,将计数值设置为行数,然后设置扫描初值。扫描初值11111110使第0行接低,其他行为高。输出扫描初值后,马上读取列线的值,看是否有列线处于低。若无,则将扫描初值循环左移一位,变为

    32、111111101,这样使第1行接低,其他行为高。同时,计数值减1,如此下去,一直查到计数值为0。如果在此过程中,查到有列线为低,则组合此时的行值和列值,进行下一步查找键值代码的工作。程序段如下:MOV AH,0FEH ;扫描初值送AHMOV CX,8 ;行数送CXKEY2:MOV AL,AHMOV DX,ROWPORTOUT DX,AL ;输出行值(扫描值)MOV DX,COLPOETIN AL,DX ;读进列值AND AL,0FFHCMP AL,0FFH ;判断有无接地线JNZ KEY3 ;有,则转下一步处理ROL AH,1 ;无,则移位扫描值LOOP KEY2 ;准备下一行扫描JMP K

    33、EY1 ;所有行都没有键按下,则返回继续检测KEY3:;此时,AL=列值,AH=行值,进行后续处理 2行列反转法行列反转法也是识别按键的常用方法。它的原理为:(1)判断是否有键按下(同行扫描法)。(2)将行线工作在输出方式,将列线工作在输入方式,CPU通过8255的A端口往各行线上全部送低电平,然后从8255的B端口读入列线值。如果此时有某键被按下,则必定会使某列线值为低。(3)程序再对两个端口进行行列反转,使接行线的A端口设为输入方式,将列线的B端口设为输出方式。然后将刚才读得的列值从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为0。这样,当一个键被按下时,必定可以读得

    34、一对唯一的行值和列值。为查找键代码,键盘程序设计时,可将各个键对应的行、列值放在一个表中,程序通过查表来确定具体按下的为哪一个键,进而在这个表中找到这个键的代码。从而确定是哪一个键。如果遇到多个键同时闭合的情况,则输入的行值或者列值中一定有一个以上的0,而由程序预先建立的键值表中不会有此值,因而可以判为重键而重新查找。所以,用这种方法可以方便地解决重键问题。图9-17情况下的行反转法键盘扫描程序如下:KEY1:;设置行线接输出端口ROWPORT,列线接输入端COLPORT 并判断是否有键按下(同行扫描法)KEY2:MOV AL,00MOV DX,ROWPORTOUT DX,AL ;行线全为低M

    35、OV DX,COLPORTIN AL,DX ;读取列值AND AL,0FFHCOMP AL,0FFHJZ KEY2 ;无闭合键,循环等待PUSH AX ;有闭合键,保存列值PUSH AX ;设置行线接输入端口ROWPORT,列线接输出端COLPORT MOV DX,COLPORT POP AX OUT DX,AL ;输出列值 MOV DX,ROWPORT IN AL,DX ;读取行值 POP BX ;结合行列值,此时 MOV AH,BL ;AL=行值,AH=列值 ;查找键代码 MOV SI,OFFSET TABLE;TABLE为键值表 MOV DI,OFFSET CHAR ;CHAR为键对应的

    36、代码 MOV CX,64 ;键的个数 KEY3:CMP AX,SI ;与键值比较JZ KEY4 ;相同,说明查到INC SI ;不相同,继续比较INC SIINC DILOOP KEY3JMP KEY1 ;全部比较完,仍无相同,说明是重键KEY4:MOV AL,DI ;获取键代码送AL ;判断按键是否释放,没有则等待CALL DELAY ;按键释放,延时消除抖动 ;后续处理 TABLE DW 0FEFEH ;键0的行列值(键值)DW 0FDFEH ;键1的行列值DW 0FBFEH ;键2的行列值 ;全部键的行列值CHAR DB ;键0的代码DB ;键1的代码 ;全部键的代码 例9-5 假设有一

    37、个44的矩阵键盘通过并行接口芯片8255与微机相连。8255的A口作为输出口,与键盘的行线相连;B口为输入口,与键盘列线相连。接口硬件的连接如图9-18所示,设8255的A口地址为60H,B口地址为61H,控制寄存器地址为63H,请编写键盘扫描程序。采用逐行扫描法:让所有行线全为0,读入所有的列线值,如果有列线值为0,则说明有键按下;然后从第0行开始,每扫描一行,令该行所对应的行线为0,其余行线为1;然后读入列线状态,如果有一列为0,则该行该列交叉处的键被按下,如果所有列都为1,则行号加1,顺序扫描下一行。键号从左上角开始为0号,从左向右、从上到下依次编号,右下脚的编号为15。程序如下:MOV

    38、 AL,82H ;方式0,A口输出,B口输入 OUT 63H,ALBEGIN:MOV AL,0 ;检查看是否有键按下 OUT 60H,ALWAIT:IN AL,61H AND AL,OFH COMP AL,OFH JZ WAIT ;无键按下则转上去等待 SM:MOV DL,4 ;行数送DL MOV AL,OFEH ;扫描码,0行为0 MOV CH,0 ;键号初值为0SROW:OUT 60H,AL ;扫描一行 RCL AL,1 ;修改扫描行 MOV AH,AL ;保存下次要扫描的扫描码 IN AL,61H ;读列线状态 AND AL,OFHCMP AL,OFH ;检查是否有列线为0JNZ SCO

    39、1 ;有列线为0转到ADD CH,4 ;否则键号+4,指向下一行的第一个键的键号MOV AL,AH ;取回行扫描码DEC DL ;行数减1JNZ SROW ;行没扫描完则转去扫描下一行JMP BEGINSCO1:RCR AL,1 JNC PROCE ;该列为0,转处理程序,此时CH中是键号INC CH ;如果该列不为0,键号+l,继续查找列线JMP SCO1PROCE:;键处理程序 从上面的程序可以看出,CPU要不断地查询是不是有键按下,因此在此查询方式下CPU的效率是比较低的。可以做一点修改,使得任意按下一个键就会产生中断,在中断处理程序里再对键盘进行键号扫描,这样就可以大大提高CPU的效率

    40、。另外,为了防止按键抖动问题,我们可以在查到有键按下的情况下,延迟20ms左右,再开始扫描键号。3抖动和重键问题当用手按下一个键时,往往会出现按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也会出现类似的情况,这就是抖动,如图9-19所示。抖动的持续时间随操作员而异,不过通常总是不大于l0ms,抖动问题会引起对闭合键的错误识别。图9-19 抖动和硬件消抖电路 用硬件电路很容易消除抖动,在图9-19中采用带滞环的施密特硬件消抖电路。在键数很多的情况下,用软件方法也很实用。这就是通过延时20ms来等待抖动消失,然后再读入键值。在前面键盘扫描程序中就是用这种方法来消除抖动的

    41、。所谓重键就是指两个或多个键同时闭合。出现重键时,读取的键值必然出现有一个以上的0。于是就产生了到底是否给予识别和识别哪一个键的问题。n对重键问题的处理,简单的情况下,可以不予识别。通常情况,则是只承认先识别出来的键,对此时同时按下的其他键均不作识别,直到所有键都释放以后,才读入下一个键。这就是前面讲的键盘扫描程序使用的方法,称为连锁法。n另外还有一种巡回法,它的基本思想是:等被识别的键释放以后,就可以对其他闭合键作识别,而不必等待全部键释放。显然巡回法比较适合于快速键入操作。当然,对于重键,我们也可认为是正常的组合键,这只要将它们都识别出来就可以了。n说明:前面讲的行列反转法也可以方便地解决

    42、重键问题。9.5 LED显示器及其接口 9.5.1 七段LED显示器原理 LED的主要部分是7段发光管,如图9-20(a)所示。这7段发光管分别为ag段,有些产品还附带一个小数点h。通过7个发光段的不同组合,可以显示09和AF共16个字母数字及其他特殊字符。例如,当a、b、c段亮,显示“7”;当a、b、c、d、e、g段亮,则显示“d”。LED可以分为共阳极和共阴极两种结构,如图9-20(b)和(c)所示。其中,图(b)为共阳极结构,数码显示端输入低电平有效,当某一段得到低电平时,便发光。图(c)为共阴极结构,数码显示端输入高电平有效,当某段处于高电平时便发光。表9-2和9-3分别为共阴极和共阳

    43、极LED显示数字与显示代码之间的对应关系。显示数字各段控制信号显示代码gfedcba001111113FH1000011006H210110115BH310011114FH4110011066H511011016DH611111017DH7111111107H811111117FH911011116FH表9-2 共阴极数码管 表9-3 共阳极数码管 显示数字各段控制信号显示代码gfedcba0100000040H1111100179H2010010024H3011000030H4001100119H5001001012H6000001002H7111100078H8000000000H9001

    44、000010H 为了在LED上显示数据,首先必须把显示数据转换为LED的7位显示代码。实现这种转换可以采用下面两种方法。(1)专用芯片。即采用专用的带驱动器的LED段译码器,如CD 4511,可以实现对BCD码的译码,但不能对大于9的二进制数译码。CD4511有4位显示数据输入,7位显示段输出,3位控制信号输入。使用时,只要将CD 4511的输入端与微机系统输出端口的某4个数据位相连,而CD4511的输出直接与LED的ag相接,便可实现对l位BCD码的显示。具体电路如图9-21所示。(2)软件译码法。图9-22所示的采用8255A的LED接口,在软件设计时,在数据段定义0F共16个数字(也可以

    45、为09或其他符号)的显示代码表,在程序中利用XLAT指令进行软件译码。假设用共阳极LED来显示数据,0F的显示代码表就可以按0F的顺序定义如下:DISPCODE DB 0C0H,0F9H,06H,0EH 利用8086的换码指令XLAT,便可方便地实现数字到显示代码的译码。假设要显示的数据存放在BL的低4位中,利用下面指令就可以实现软件译码。MOV AL,BL ;把要显示的数据送入ALAND AL,0FH ;屏蔽无用位LEA BX DISPCODE;显示代码表的首地址送BXXLAT ;换码,相应的显示代码即被存入AL 9.5.2 多位数显示电路图9-23是多位显示的接口电路示意,硬件上用公用的驱

    46、动电路来驱动各数码管,软件上用扫描方法实现数字显示。从图中可以看到,用2个8位输出端口就可以实现8个数码管的显示控制。其中,一个端口用作位控制,即控制哪个数码管显示。对于图9-26的共阳极数码管,当位控制端口的控制码某位为低电平时,经反相驱动,便在相应数码管的阳极加上了高电平,这个数码管就可以显示数据。但具体显示什么数码,则由另一个端口,即段控制端口决定。n段控制端口通过段驱动电路送出显示代码到数码管相应段。此端口由8个数码管共用,因此当CPU送出一个显示代码时,各数码管的阴极都收到了此代码。但是,只有位控制码中为低的位对应的数码管才得到导通而显示数字,其他数码管并不发光。n由上所述,只要CP

    47、U通过段控制端口送出段显示代码,然后通过位控制端口送出位显示代码,指定的数码管便显示相应的数字。如果CPU顺序地输出段码和位码,依次让每个数码管显示数字,并不断地重复显示,利用眼睛的视觉惯性,当重复频率达到一定程度,从数码管上便可见到相当稳定的数字显示。n显而易见,重复频率越高,每位数码管延时显示的时间越长,数字显示得就越稳定,显示亮度也就越高。程序设计时可以开辟一个BUFDATA缓冲区,存放要显示的数字,第一个数字在最左边的数码管显示,下一个数字送到左边第二个数码管显示,依次类推。另外,还需要建立一个显示代码表table,从前向后依次存放0F对应的七段显示代码。显示代码是和硬件连接有关的,在

    48、图9-23的接口电路中,数字0的显示代码为C0H,1的显示代码为F9H,。下面是一段实现8位数码管依次显示一遍的子程序。MOV DI,OFFSET BUFDATA;指向数字缓冲区MOV CL,0FEH ;指向最左边数码管DISP:MOV AL,DI ;取出数字MOV BX,OFFSET TABLE ;指向显示代码表XLAT ;得到显示代码MOV DX,SEGPORT ;SEGPORT为段控制端口OUT DX,AL ;送出段码MOV AL,CL ;取出位显示代码 MOV DX,BITPORT ;BITPORT 为位控制端口OUT DX,AL ;送出位码CALL DELAY ;实现数码管延时显示INC DI ;指向下一个数字ROL CL,1 ;指向下一个数码管CMP CL,0FEH ;是否指向最右边的数码管 JNZ DISP ;没有,显示下一个数字 RET ;8位数码管都显示一遍,返回TABLE DB 0C0H,0F9H,0A4H,0B0H;显示代码表 DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0C1H,86H,8EHBUFDATA DB 8 DUP(0);数字缓冲区

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第9章并行接口课件.ppt
    链接地址:https://www.163wenku.com/p-5169287.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库