微机原理与接口技术:第九章 可编程并行接口芯片 8255A_第1页
微机原理与接口技术:第九章 可编程并行接口芯片 8255A_第2页
微机原理与接口技术:第九章 可编程并行接口芯片 8255A_第3页
微机原理与接口技术:第九章 可编程并行接口芯片 8255A_第4页
微机原理与接口技术:第九章 可编程并行接口芯片 8255A_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 I/O接口概述本章内容 并行接口 8255A学习目的 掌握可编程并行接口芯片 8255A的连接与编程 微机系统的信息交换有并行通信和串行通信两种方式。 并行通信是以微机的字长为传输单位;适合于外部设备与微机之间进行近距离、大量和快速的信息交换。 实现并行通信的接口称之为并行接口。 概 述 8255A是Intel86系列微处理机的配套并行接口芯片,它可为86系列CPU与外部设备之间提供并行输入/输出通道。一、8255A的内部结构和引脚信号1. 8255A内部结构8255A可编程外围设备接口(Programmable Peripheral Interface, 简写为PPI) ,其内部结构如图所

2、示。1 可编程并行接口芯片8255A图11.1 8255A内部结构A组控制部件数据总线缓冲器读/写控制部件B组控制部件 RESETA0A1A组端口A8位A组A组端口C(高4位)B组端口C(低4位)8位B组端口BPA7PA0PC7PC4PC3PC0PB7PB0双向D7D08255A包括四大部分:数据总线缓冲器、读写控制部件、A组和B组控制部件、端口A、B、C。(1) 并行输入 / 输出端口A、B、C端口A:包含一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器,输入输出数据均受到锁存。端口B和C: 都包含一个8位数据输入缓冲器和一个8位的数据输出锁存器/缓冲器,输出数据能锁存,输入数据不锁存

3、。端口C:可分成两个4位端口,分别定义为输入或输出端口,还可定义为控制、状态端口,配合端口A和端口B工作。(2) A组和B组控制部件A组A口:PA0PA7C口的高4位:PC4PC7B组B口:PB0PB7C口的低4位:PC0PC3 A组,B组的控制寄存器,接收来自数据总线的控制字,并根据控制字确定各端口的工作状态和工作方式。(3) 数据总线缓冲器三态双向8位缓冲器,是8255A与CPU 之间的数据接口。传送输入数据、输出数据、控制命令字。(4)读/写控制部件接收来自CPU地址总线信号和控制信号,并发出命令到两个控制组 (A组和B组)。CS:片选信号,接CPU高位地址的译码输出WR:写信号,WR有

4、效,CPU向8255A写入控制或数据信息。RD:读信号,RD有效,CPU读8255A的数据或状 态;RESET:复位信号。RESET有效时,清 8255A 所有控制寄存器内容, 并将各端口置成输入方式。2. 8255A的引脚8255A采用40线双列直插封装,引脚图如图所示。图11.2 8255A引脚定义432140371834.27D7D0A0A1RESETVCCGND986536358255APPI数据总线控制线电源线通道A通道B通道CCPU接口外设接口.PA7PA0.PB7PB0.PC7PC025141516 171312 11 10 * PA7PA0:A端口数据信号引脚* PB7PB0:

5、B端口数据信号引脚* PC7PC0:C端口数据信号引脚* D7D0: 8255A的8位数据线* A1A0: 端口选择信号 当A1A0=00时 选择端口A当A1A0=01时 选择端口B当A1A0=10时 选择端口C当A1A0=11时 选择控制端口表11.1 8255A的读写操作控制 8255A共有两个控制字:即工作方式控制字和对C口置位/复位控制字。1. 控制字(1)工作方式控制字:控制字和各位的含义如图所示。二 、 8255A的控制字及其工作方式D7 D6 D5 D4 D3 D2 D1 D0B组端口C(PC3PC0)1=输入, 0=输出端口B1=输入,0=输出方式选择0方式0, 1=方式1A组

6、端口C(PC7PC4)1=输入, 0=输出端口A1=输入,0=输出方式选择00端口A方式0, 01=端口A方式1,1=端口A方式2方式设置标志1=有效图11.3 8255A工作方式控制字格式(2) 端口C的置位/复位控制字控制字的格式如图所示。图11.4 8255A 置位/复位控制字格式D7 D6 D5 D4 D3 D2 D1 D0位的置位/复位1=置位,0=复位位 选 择D3 D2 D1 通道C位按位置位/复位控制标志0=有效0 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关于控

7、制字要说明几点:(1) 设置方式控制字时,A口、B口作为整体设置,而C口要分成上、下两部分分别设置。三个端口的工作方式由一个控制字规定。(2) C口按位置位/复位控制字不是送到C口地址,而是送到控制寄存器地址;且一个控制字只能使C口一位置位或复位。(3) 方式控制字和按位置位/复位控制字均写入同一个控制寄存器地址,二者通过最高位D7来区别。D7=1为方式控制字,D7=0为按位置位/复位控制字。(1) 方式0 基本输入/输出方式方式0是一种基本输入输出工作方式,它的24条I/O线可以全部都用作传送数据,不设置应答信号线,常用于无条件传送,输出有锁存,输入只有缓冲能力而无锁存功能。方式0控制字具体

8、格式如图11.5所示2. 工作方式图11.5 8255A工作方式0控制字格式 由控制字中D4D3D1D0 等4位的不同取值,可定义方式0的16种工作方式的组合,如表11.2所示。 方式0中,端口C被分成两个4位端口,它们可被定义为输入或输出端口,CPU与3个端口之间交换数据,可直接由CPU执行IN和OUT指令来完成。表11.2 方式0的工作状态组合序号控制字D7,D0A组B组端口A端口C高4位(PC7PC4)端口B端口C低4位(PC3PC0)110000000输出输出输出输出210000001输出输出输出输入310000010输出输出输入输出410000011输出输出输入输入510001000

9、输出输入输出输出610001001输出输入输出输入710001010输出输入输入输出810001011输出输入输入输入910010000输入输出输出输出1010010001输入输出输出输入1110010010输入输出输入输出1210010011输入输出输入输入1310011000输入输入输出输出1410011001输入输入输出输入1510011010输入输入输入输出1610011011输入输入输入输入(2) 工作方式1选通式输入/输出方式 方式1选通输入方式1操作使端口A或端口B作为锁存输入设备工作。端口C也可按方式1操作使用但不是对数据,而是对控制信号,或当端口A或端口B为选通输入端口时的握

10、手信号。下图示出8255A方式1选通输入时的内部结构图。图11.6工作方式1输入控制字格式(a)端口A方式1输入(b)端口B方式1输入图11.7方式1输入端口状态IBF:输入缓冲器满信号,向外设输 出,高电平有效。STB:选通信号。由外设输入,低电平 有效。INTR:中断请求信号,高电平有效。INTE:中断允许信号,它是通过端口PC4(端口A)或PC2(端口B)的位来编程的内部位。 方式1选通输出当端口A或端口B为方式1输出时,各指定PC的3条线作为8255A与外设及CPU之间应答信号。下图为方式1选通输出操作的内部结构图。 图11.8 方式1输出控制字格式图11.9 方式1输出端口状态INT

11、RAPC3PC6PC7PA70方式1输出端口APC4,5I/OINTEA2WR方式1输出端口BINTRBPC0PC2PC1INTEBPB70WR(a)端口A方式1输出(b)端口B方式1输出OBF:输出缓冲器满信号。向外设 输出,低电平有效。ACK: 外设应答信号。由外设输入,低电平有效。INTE:中断允许信号。INTR:中断请求信号。高 电平有效。(3) 工作方式2双向选通输入/输出方式方式2只允许A组采用,此时端口A变为双向,允许数据在同一组8条线上发送和接收。下图示出方式2操作内部结构图。图11.10 端口A方式2控制字 图11.11 端口A工作在方式2的端口状态OBFA:输出缓冲器满信号

12、,向外设输出,低电平有效。ACKA:应答信号,由外设输入,低电平有效。STBA: 数据选通输入信号。由外设输入, 低电平有效。IBFA:输入缓冲器满信号,向外设输出,高电平有效。INTE:中断允许信号 (INTE1和INTE2)。高电平有效。INTRA:中断请求信号,高电平有效。 8255A中端口A工作在方式2时,允许端口B工作于方式0或方式1,完成输入/输出功能。4种组合状态及其工作方式控制字格式如表11.3。表11.3 方式2的组合状态与控制字格式3. 8255A的工作方式初始化(初始化) 根据8255A与CPU接口硬件电路图确 定8255A四个端口地址。 根据8255A的具体应用,确定8

13、255A工 作方式控制字内容。 利用输出指令,将工作方式控制字送 至控制命令寄存器中。 4. 8255A中PC口置位/复位操作 根据8255A与CPU接口硬件电路确定 8255A四个端口的端口地址。 根据对PC口具体哪一位操作,确定 8255A的按位置位/复位控制字内容。 利用输出指令,将按位置位/复位控制 字送至8255A控制命令寄存器中。 目前打印机一般采用并行接口Centronics标准,其主要信号与传送时序如图11.12。打印机接收主机传送数据的过程是这样的:2 8255A的应用实例一、 8255A与打印机接口1、用方式0与打印机接口 当主机准备好输出打印的一个数据时,通过8255A把

14、数据送给打印机接口的数据引脚DATA0DATA7,同时送出一个数据选通信号STROBE 给打印机。打印机收到该信号后,把数据锁存到内部缓冲区,同时在BUSY信号线上发出忙信号。待打印机处理好输入数据时,打印机撤消忙信号,同时向主机送出一个响应信号ACK。主机根据信号BUSY或信号ACK决定是否输出下一个数据。图11.12 方式0的打印机接口 本例中,CPU与8255A采用查询方式输出数据。端口A设置为方式0,输出打印数据,端口C的PC7产生负脉冲选通信号,PC2连接打印机的BUSY信号查询其状态,PC0连接打印机的ACK信号。 假设8255A的A、B、C口的I/O地址为FFF8H、FFFAH和

15、FFFCH,控制端口地址为FFFEH。 ;初始化程序段 MOV DX , 0FFFEH MOV AL , 81H ; A口方式0输出, C口上半部输出, ;下半部输入 OUT DX , AL ; 输出工作方式字 MOV AL , 0FH ; C口的置位/复位控制字, ; 使PC7 = 1, 即置STROBE= 1 OUT DX , AL PUSH AX ;输出打印数据子程序, 打印数据 ; 在AH中 PUSH DXPM: MOV DX , 0FFFCHIN AL, DX ;查询PC2AND AL, 04H ;BUSY=0?JNZ PM ;忙,则等待,D2=1 表示忙MOV DX, 0FFF8H

16、 ;不忙,则输出数据MOV AL, AHOUT DX, ALMOV DX, 0FFFEHMOV AL,0EH ;使PC7=0,即置 = 0OUT DX, ALSTROBENOP ;适当延时,产生一定宽 度的低电平NOPMOV AL, 0FH ;使PC7=1,置 = 1OUT DX, ALPOP DX POP AXRETSTROBE2、用方式1与打印机接口 8255A的端口A工作于选通输出方式,PC7作为 OBFA输出信号,PC6作为ACKA 输入信号,而PC3作为INTRA输出信号;另外,可用程序控制INTEA(PC6),决定是否采用中断方式。打印机接口的时序与8255A的选通输出方式的时序类

17、似,但略有差别,用单稳电路74LS123即可满足双方的时序要求,见图11.13。图11.13 方式1的打印机接口 假设8255A的A、B、C口的I/O地址为FFF8H、FFFAH和FFFCH。控制端口的地址为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

18、MOV CX , M ;打印字节数送CX MOV BX , OFFSET BUF ; 取缓冲区首址 送BX PRINT1: MOV AL , BX ; 取一个数据 MOV DX , 0FFF8H OUT DX , AL ; 从A口输出 MOV DX , 0FFFCHPRINT2: 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

19、; 返回PRINT ENDP 本例与上例的主要区别是:在上例中,由软件对PC7复位和置位来产生打印机的选通信号,而本例中,8255A工作在选通方式,当执行输出指令时,自动由硬件从PC7(OBFA)输出负脉冲选通信号。当打印机ACK变为有效时,自动将PC7置为高电平。 最简单的键盘如图11.14(a)所示,其中每个键对应I/O端口的一位。没有键闭合时,各位均处于高电平;当有一个键按下时,就使对应位接地而成为低电平,而其它位仍为高电平。这样,CPU只要检测到某一位为0,便可判别出对应键已按下。二、 8255A与键盘接口1、键盘的工作原理图11.14 键盘的结构 用图11.14(a)的结构设计键盘有

20、一个很大的缺点:占用的I/O端口也太多。所以,这种简单结构只用在只有几个键的小键盘中。 通常使用的键盘是矩阵结构的。以33=9个键为例,如图11.14(b),这个矩阵分为3行3列,如果键5按下,则第1行和第2列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第2列线也输出低电平。2、键的识别(1)行扫描法 图11.15是一个8行8列组成的键盘。行扫描法识别按键的原理如下:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。 图11.15 键盘接口电路 如果没有任何一条列线为低电平,则说明第0行没

21、有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。 实际应用中,一般先快速检查键盘中是否有键按下,然后再确定按键的具体位置。为此,先使所有行线为低,然后检查列线。这时如果列线有一位为0,则说明必有键被按下, 采用扫描法可进一步确定按键的具体位置。 图11.15中将行线与8255A端口B相连,端口B设置为输出。CPU使端口B的某一位为0,便相当于将该行线接低电平;某位为1,则该行线接高电平。将列线与端口A相连,端口A设置为输入。CPU只要读取端口A的数

22、据,就可以判别是否有键被按下及是第几列的键被按下。 从上面的原理可知,键盘扫描程序的第一步应该判断是否有键被按下。为此,使输出端口各位全为0,即相当于将所有行线接低电平。然后,从输入端口读取数据,如果读得的数据不是FFH,则说明必有列线处于低电平,从而可断定必有键被按下。此时,为了消除键的抖动,调用延迟程序。如果读得的数据是FFH,则程序在循环中等待。这段程序如下:KEY1: MOV AL , 00H MOV DX , ROWPORT ;ROWPORT为行线 ;端口地址 OUT DX , AL ;使所有行线为低 MOV DX , COLPORT ; COLPORT为列线 ;端口地址 IN AL

23、 , DX ;读取列值 CMP AL , 0FFH ;判定是否有列线为低电平 JZ KEY1 ;没有,无闭合键,则循环等待 CALL DELAY ;有, 则延迟20ms清除抖动 键盘扫描程序的第二步是逐行扫描以判断哪一个键被按下了。开始时,将计数值设置为行数。扫描初值11111110使第0行为低电平,其它行为高。输出扫描初值后,马上读取列线的值,看是否有列线处于低电平。若无,则将扫描初值循环左移一位,变为11111101,同时,计数值减1,如此下去,直到计数值为0,或找到按键所在行时止,程序段如下: MOV AH , 0FEH ;扫描初值送AH MOV CX , 8 ;行数送CXKEY2: M

24、OV 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 ; 所有行都没有键按下,则 返回继续检测KEY3: ; 进行后续, 处理此时AL=列值, AH=行值 ; 将行线接一个数据端口,先让它工作在输出方式;将列线也接到一个数据端口,先让它工作在

25、输入方式。程序使CPU通过输出端口往各行线上送低电平,然后读入列线值。如果此时有某键被按下,则程序再对两个端口进行方式设置,使接行线的端口改为输入方式,接列线的端口改为输出方式。并将刚才读得的列值从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为0。 (2) 行反转法 这样,当一个键被按下时,必定可以读得一对唯一的行值和列值。但是,要实现上述行反转法,行、列线所接的数据端口应能够改变输入、输出方式,而8255A的3个端口正好具有这个功能。 为了查找键代码,键盘程序设计时,可将各个键对应的行、列值放在一个表中,程序通过查表来确定哪一个键被按下,进而在另一个表中找到这个键的代码

26、。 如果遇到多个键同时闭合的情况,则输入的行值或者列值中一定有一个以上的0,而由程序预先建立的键值表中不会有此值,因而可以判为重键而重新查找。用这种方法可以方便地解决重键问题。KEY1: ;设置行线接输出端口ROWPORT, ;列线接输入端口COLPORT, 并 ;判断是否有键按下KEY2: MOV AL , 00H MOV DX , ROWPORT OUT DX , AL ; 行线全为低 MOV DX , COLPORT IN AL , DX ; 读取列值 CMP AL , 0FFH JZ KEY2 ; 无闭合键 , 循环等待 PUSH AX ; 有闭合键 , 保存列值 PUSH AX ;设

27、置行线接输入端口ROWPORT, ;列线接输出端口COLPORT, MOV DX , COLPORTPOP AXOUT DX , AL ; 输出列值MOV DX , ROWPORTIN AL , DX ; 读取行值 POP BX ; 结合行列值 ,此时MOV AH , BL ; AL=行值 ,AH=列值 ;查找键代码MOV SI , OFFSET TABLE ; TABLE为键值表MOV DI , OFFSET CHAR ; CHAR为键对应的代码表 MOV CX , 64 ; 键的个数KEY3: CMP AX, SI ;与键值比较 JZ KEY4 ; 相同 ,说明查到 INC SI ;不相同

28、 ,继续比较 INC SI INC DI LOOP KEY3 JMP KEY1 ;全部比较完, 仍无相同, 说明是重键 KEY4: MOV AL , DI ; 获取键代码送AL ; 判断按键是否释放,没有则等待 CALL DELAY ; 按键释放, 延时消除抖动 ;后续处理TABLE DW 0FEFEH ; 键0的行列值(键值) DW 0FDFEH ;键1的行列值 DW 0FBFEH ;键2的行列值 ;全部键的行列值CHAR DB ;键0的代码 DB ;键1的代码 ;全部键的代码 当用手按下一个键时,往往会出现按键在闭合和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也会出现类似的

29、情况,这就是抖动。抖动持续时间随操作员而异,一般不大于10ms。抖动问题不解决就会引起对闭合键的错误识别。 利用硬件很容易消除抖动,如图11.16的硬件消抖电路所示。3、抖动和重键问题图11.16 抖动和硬件消抖电路 所谓重键就是指两个或多个键同时闭合。出现重键时,读取的键值必然出现有一个以上的0。于是就产生了到底识别哪一个键的问题。 对重键问题的处理,简单的情况下,可以不予识别,即认为重键是一个错误的按键。 通常情况,则是只承认先识别出来的键,对此时同时按下的其它键均不作识别,直到所有键都释放以后,才读入下一个键,称为连锁法。另外还有一种巡回法,它的基本思想是:等被识别的键释放以后,就可以对

30、其它闭合键作识别,而不必等待全部键释放。显然巡回法比较适合于快速键入操作。 LED数码管的主要部分是七段发光二极管,如图11.17(a)所示。这七段发光二极管分别称为a、b、c、d、e、f、g,有的产品还附带有一个小数点h,通过7个发光段的不同组合,可以显示09和AF共16个字母数字或其它异形字符。三、8255A与LED数码管接口1、LED数码管的工作原理 LED数码管有共阳极、共阴极两种结构,如图11.17(b)和(c)所示。表11.4表示了共阴极与共阳极结构字符0F的编码表。编码的低位为a,高位为g。 由于发光二极管发光时,通过的平均电流为10mA20mA,而通常的输出锁存器不能提供这么大

31、的电流,所以LED各段必须接驱动电路,如图11.17(d)所示。(a)数码管外型 图11.17 LED数码管(b)共阳极结构(d) 与8255A的连接 (c) 共阴极结构 图11.17 LED数码管显示数字编码共阴极共阳极 0 3FH C0H 1 06H F9H 2 5BH A4H 3 4FH B0H 4 66H 99H 5 6DH 92H 6 7DH 82H 7 07H F8H 8 7FH 80H 9 67H 98H A 77H 88H B 7CH 83H C 39H C6H D 5EH A1H E 79H 86H F 71H 8EH . 80H 7FH表11.4七段LED编码表 为了将一位

32、十六进制数在一个LED上显示出来,就需要将十六进制数译为LED的7位显示代码。 硬件译码:采用专用的带驱动的LED段译码器。 软件译码:在程序设计时,将0F这16个数字(也可为09)对应的显示代码组成一个表。 比如,用共阴极数码管如图11.17(d)所示连接,则0的显示代码为3FH,1的显示代码为06H,并在表中按顺序排列,则要显示的数字可以很方便地通过8086的换码指令译码为该数字对应的显示代码。1位数字的LED显示程序如下: MOV BX , OFFSET BUFDATA ; BUFDATA区存放 待显示的数字 MOV AL , BX ; 取出要显示的数字 MOV BX , OFFSET

33、TABLE ;取显示代码表首地址 XLAT ;换码为显示代码 MOV DX , PORT ;PORT为与数码管 ;相接的端口地址 OUT DX , AL ; 输出显示 TABLE DB 3FH , 06H , 5BH , ; 显示代码表 实际使用时,往往要用几个数码管实现多位显示。如果每一个数码管占用一个独立的输出端口,将占用太多的通道,驱动电路的数目也很多。 图11.18是多位显示的接口电路示意图,这是一种常用的方案。在这种方案中,硬件上用公共的驱动电路来驱动各数码管;软件上用扫描方法实现数字显示。2、多位显示反相驱动器位控制端口同相驱动器段控制端口图11.18 多位数码管显示接口示意图 从

34、图中可以看到,用2个8位输出端口就可以实现8个数码管的显示控制。其中,一个端口用作位控制,即控制哪个(位)数码管显示。对于图11.18的共阳极数码管,当位控制端口的控制码某位为低电平时,经反相驱动,便在相应的数码管的阳极加上了高电平,这个数码管就可以显示数据。 但具体显示什么数码,则由另一个端口,即段控制端口决定。段控制端口通过段驱动电路送出显示代码到数码管响应段。此端口由8个数码管共用,因此当CPU送出一个显示代码时,各数码管的阴极都收到了此代码。但是,只有位控制码中为低的位所对应的数码管才显示数字,其它管子并不发光。 综上所述,只要CPU通过段控制端口送出段代码,然后通过位控制端口送出位代

35、码,指定的数码管便显示相应的数字。如果CPU顺序地输出段码和位码,依次让每个数码管显示数字,并不断地重复,当重复频率达到一定程度,利用人眼的视觉暂留特性,从数码管上便可见到相当稳定的数字显示。 程序设计时可以开辟一个BUFDATA缓冲区,依次存放要显示的数字。还需要建立一个显示代码表TABLE,依次存放0F对应的七段显示代码。显示代码是和硬件连接有关的,在图11.18的接口电路中,数字0的显示代码为C0H,1的显示代码为F9H,。 下面是一段将8位数码管依次显示一遍的子程序。 MOV DI , OFFSET BUFDATA ;指向数字缓冲区 MOV CL , 0FEH ; 指向最右边数码管DI

36、SP: 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 ; 延时1ms,让数码管有充分的点亮时间 INC DI ; 指向下一个数字 ROL CL , 1 ; 指向下一个数码管 CMP CL , 0FEH ; 是否指向最右边的数码管 JNZ DIS

37、P ; 没有,显示下一个数字 RET ; 8位数码管都显示一遍 , 返回 TABLE DB 0C0H , 0F9H , 0A4H , 0B0H ;显示代码表 DB 99H , 92H , 82H , 0F8H DB 80H , 98H , 88H , 83H DB 0C6H , 0A1H , 86H , 8EHBUFDATA DB 8 DUP ( 0 ) ;数字缓冲区例:设8255A的端口地址为344H347H。由16个按键组成44矩阵式键盘,编写程序读取按键(定义键值为0F)将键值写入输出口,在数码管上显示,以观察输入的键位。电路图如图所示。四、8255A与键盘/LED接口8255A与键盘和

38、LED连接电路8255APB0PB1PB2PB3PB4PB5PB6PB7PC7PC6PC5PC4PC3PC2PC1PC0LED3LED2LED1LED0+5VD0D7D0D7RDWRA0A1RSTCSIORIOWA0A1ResetY1程序流程如下:开始在CRT上显示提示信息写8255A控制字80H字型码送B口延时且关指示灯写8255A控制字88H有键按下行扫描键盘列扫描键盘延时消抖等待释放S1S4按下否 退 出YNNY流程图相应程序如下:DATA SEGMENTdisc DB 0BBH, 0A0H, 097H, 0B5H, 0ACH, 3DHDB 3FH, 0A1H, 0BFH, 0BDH, 0AFH, 3EH, 0B6HDB 1FH, 0FH ; 0f 显示段码表DISO DB Press any of the keys to quit !. 24H; 提示信息DQQ DB 0DATA EndsCODE SEGMENTMAIN PROC FARASSUME CS:CODE DS:DATA START: MOV AL, 3 ; 清屏幕MOV AH, 0INT 10HMOV AX, DATA ;显示提示信息MOV DS, AXMOV AH, 2 ;光标定位MOV BH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论