微机接口第九章8255A.ppt

上传人:牧羊曲112 文档编号:6284518 上传时间:2023-10-13 格式:PPT 页数:115 大小:1.23MB
返回 下载 相关 举报
微机接口第九章8255A.ppt_第1页
第1页 / 共115页
微机接口第九章8255A.ppt_第2页
第2页 / 共115页
微机接口第九章8255A.ppt_第3页
第3页 / 共115页
微机接口第九章8255A.ppt_第4页
第4页 / 共115页
微机接口第九章8255A.ppt_第5页
第5页 / 共115页
点击查看更多>>
资源描述

《微机接口第九章8255A.ppt》由会员分享,可在线阅读,更多相关《微机接口第九章8255A.ppt(115页珍藏版)》请在三一办公上搜索。

1、I/O接口概述,并行接口 8255A,掌握可编程并行接口芯片 8255A的连接与编程,微机系统的信息交换有并行通信和串行通信两种方式。,并行通信是以微机的字长为传输单位;适合于外部设备与微机之间进行近距离、大量和快速的信息交换。,概 述,一、8255A的内部结构和引脚信号,1.8255A内部结构,11.1 可编程并行接口芯片8255A,图11.1 8255A内部结构,8255A包括四大部分:数据总线缓冲器、读写控制部件、A组和B组控制部件、端口A、B、C。,(1)并行输入/输出端口A、B、C,端口A:包含一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器,输入输出数据均受到锁存。,端口B和

2、C:都包含一个8位数据输入缓冲器和一个8位的数据输出锁存器/缓冲器,输出数据能锁存,输入数据不锁存。端口C:可分成两个4位端口,分别定义为输入或输出端口,还可定义为控制、状态端口,配合端口A和端口B工作。,(2)A组和B组控制部件,A组,B组的控制寄存器,接收来自数据总线的控制字,并根据控制字确定各端口的工作状态和工作方式。,(3)数据总线缓冲器,(4)读/写控制部件,接收来自CPU地址总线信号和控制信号,并发出命令到两个控制组(A组和B组)。,RESET:复位信号。RESET有效时,清 8255A 所有控制寄存器内容,并将各端口置成输入方式。,2.8255A的引脚,8255A采用40线双列直

3、插封装,引脚图如图所示。,图11.2 8255A引脚定义,*PA7PA0:A端口数据信号引脚,*PB7PB0: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的控制字及其工作方式,图11.3 8255A工作方式控制

4、字格式,(2)端口C的置位/复位控制字,控制字的格式如图所示。,图11.4 8255A 置位/复位控制字格式,关于控制字要说明几点:,(1)设置方式控制字时,A口、B口作为整体设置,而C口要分成上、下两部分分别设置。三个端口的工作方式由一个控制字规定。,(2)C口按位置位/复位控制字不是送到C口地址,而是送到控制寄存器地址;且一个控制字只能使C口一位置位或复位。,(3)方式控制字和按位置位/复位控制字均写入同一个控制寄存器地址,二者通过最高位D7来区别。D7=1为方式控制字,D7=0为按位置位/复位控制字。,(1)方式0 基本输入/输出方式,方式0是一种基本输入输出工作方式,它的24条I/O线

5、可以全部都用作传送数据,不设置应答信号线,常用于无条件传送,输出有锁存,输入只有缓冲能力而无锁存功能。,方式0控制字具体格式如图11.5所示,2.工作方式,图11.5 8255A工作方式0控制字格式,由控制字中D4D3D1D0 等4位的不同取值,可定义方式0的16种工作方式的组合,如表11.2所示。,方式0中,端口C被分成两个4位端口,它们可被定义为输入或输出端口,CPU与3个端口之间交换数据,可直接由CPU执行IN和OUT指令来完成。,表11.2 方式0的工作状态组合,(2)工作方式1选通式输入/输出方式,方式1选通输入,方式1操作使端口A或端口B作为锁存输入设备工作。端口C也可按方式1操作

6、使用但不是对数据,而是对控制信号,或当端口A或端口B为选通输入端口时的握手信号。,下图示出8255A方式1选通输入时的内部结构图。,图11.6工作方式1输入控制字格式,(a)端口A方式1输入,(b)端口B方式1输入,图11.7方式1输入端口状态,IBF:输入缓冲器满信号,向外设输 出,高电平有效。,INTE:中断允许信号,它是通过端口PC4(端口A)或PC2(端口B)的位来编程的内部位。,方式1选通输出,图11.8 方式1输出控制字格式,图11.9 方式1输出端口状态,(a)端口A方式1输出,(b)端口B方式1输出,INTE:中断允许信号。,INTR:中断请求信号。高 电平有效。,(3)工作方

7、式2双向选通输入/输出方式,方式2只允许A组采用,此时端口A变为双向,允许数据在同一组8条线上发送和接收。,下图示出方式2操作内部结构图。,图11.10 端口A方式2控制字,图11.11 端口A工作在方式2的端口状态,IBFA:输入缓冲器满信号,向外设输出,高电平有效。,INTE:中断允许信号(INTE1和INTE2)。高电平有效。,INTRA:中断请求信号,高电平有效。,8255A中端口A工作在方式2时,允许端口B工作于方式0或方式1,完成输入/输出功能。4种组合状态及其工作方式控制字格式如表11.3。,表11.3 方式2的组合状态与控制字格式,3.8255A的工作方式初始化(初始化),4.

8、8255A中PC口置位/复位操作,目前打印机一般采用并行接口Centronics标准,其主要信号与传送时序如图11.12。打印机接收主机传送数据的过程是这样的:,11.2 8255A的应用实例,一、8255A与打印机接口,1、用方式0与打印机接口,当主机准备好输出打印的一个数据时,通过8255A把数据送给打印机接口的数据引脚DATA0DATA7,同时送出一个数据选通信号STROBE 给打印机。打印机收到该信号后,把数据锁存到内部缓冲区,同时在BUSY信号线上发出忙信号。待打印机处理好输入数据时,打印机撤消忙信号,同时向主机送出一个响应信号ACK。主机根据信号BUSY或信号ACK决定是否输出下一

9、个数据。,图11.12 方式0的打印机接口,本例中,CPU与8255A采用查询方式输出数据。端口A设置为方式0,输出打印数据,端口C的PC7产生负脉冲选通信号,PC2连接打印机的BUSY信号查询其状态,PC0连接打印机的ACK信号。假设8255A的A、B、C口的I/O地址为FFF8H、FFFAH和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

10、AX;输出打印数据子程序,打印数据;在AH中 PUSH DXPM:MOV DX,0FFFCH,IN AL,DX;查询PC2AND AL,04H;BUSY=0?JNZ PM;忙,则等待,D2=1 表示忙MOV DX,0FFF8H;不忙,则输出数据MOV AL,AHOUT DX,ALMOV DX,0FFFEHMOV AL,0EH;使PC7=0,即置=0OUT DX,AL,NOP;适当延时,产生一定宽 度的低电平NOPMOV AL,0FH;使PC7=1,置=1OUT DX,ALPOP DX POP AXRET,STROBE,2、用方式1与打印机接口,图11.13 方式1的打印机接口,PRINT PR

11、OC 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;打印字节数送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 PRIN

12、T2;为0,则继续检测 INC BX;为1,说明数据已输出 LOOP PRINT1;准备取下一个数据输出 POP DX;打印结束,恢复寄存器 POP CX POP BX POP AX RET;返回PRINT ENDP,本例与上例的主要区别是:在上例中,由软件对PC7复位和置位来产生打印机的选通信号,而本例中,8255A工作在选通方式,当执行输出指令时,自动由硬件从PC7(OBFA)输出负脉冲选通信号。当打印机ACK变为有效时,自动将PC7置为高电平。,最简单的键盘如图11.14(a)所示,其中每个键对应I/O端口的一位。没有键闭合时,各位均处于高电平;当有一个键按下时,就使对应位接地而成为低电

13、平,而其它位仍为高电平。这样,CPU只要检测到某一位为0,便可判别出对应键已按下。,二、8255A与键盘接口,1、键盘的工作原理,图11.14 键盘的结构,用图11.14(a)的结构设计键盘有一个很大的缺点:占用的I/O端口也太多。所以,这种简单结构只用在只有几个键的小键盘中。,通常使用的键盘是矩阵结构的。以33=9个键为例,如图11.14(b),这个矩阵分为3行3列,如果键5按下,则第1行和第2列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第2列线也输出低电平。,2、键的识别,(1)行扫描法,图11.15是一个8行8列组成的键盘。行扫描法识别按键的原理如下:先使第0行接低电平,

14、其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。,图11.15 键盘接口电路,如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。,图11.15中将行线与8255A端口B相连,端口B设置为输出。CPU使端口B的某一位为0,便相当于将该行线接低电平;某位为1,则该行线接高电平。将列线与端口A相连,端口A设置为输入。CPU只要读取端口A的数

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

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

17、,AL;输出行值(扫描值)MOV DX,COLPORT IN AL,DX;读进列值,CMP AL,0FFH;判断有无键按下 JNZ KEY3;有,则转下一步处理 ROL AH,1;无,则修改扫描值,;准备下一行扫描 LOOP KEY2;计数一次,未扫完8 行,则 继续循环 JMP KEY1;所有行都没有键按下,则 返回继续检测KEY3:;进行后续,处理此时AL=列值,AH=行值;,将行线接一个数据端口,先让它工作在输出方式;将列线也接到一个数据端口,先让它工作在输入方式。程序使CPU通过输出端口往各行线上送低电平,然后读入列线值。如果此时有某键被按下,则程序再对两个端口进行方式设置,使接行线的

18、端口改为输入方式,接列线的端口改为输出方式。并将刚才读得的列值从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为0。,(2)行反转法,为了查找键代码,键盘程序设计时,可将各个键对应的行、列值放在一个表中,程序通过查表来确定哪一个键被按下,进而在另一个表中找到这个键的代码。如果遇到多个键同时闭合的情况,则输入的行值或者列值中一定有一个以上的0,而由程序预先建立的键值表中不会有此值,因而可以判为重键而重新查找。用这种方法可以方便地解决重键问题。,KEY1:;设置行线接输出端口ROWPORT,;列线接输入端口COLPORT,并;判断是否有键按下KEY2:MOV AL,00H MO

19、V DX,ROWPORT OUT DX,AL;行线全为低 MOV DX,COLPORT IN AL,DX;读取列值 CMP AL,0FFH JZ KEY2;无闭合键,循环等待 PUSH AX;有闭合键,保存列值 PUSH AX,;设置行线接输入端口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

20、;CHAR为键对应的代码表 MOV CX,64;键的个数KEY3:CMP AX,SI;与键值比较 JZ KEY4;相同,说明查到 INC SI;不相同,继续比较 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的代码;全部键的代码,当用手按下一

21、个键时,往往会出现按键在闭合和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也会出现类似的情况,这就是抖动。抖动持续时间随操作员而异,一般不大于10ms。抖动问题不解决就会引起对闭合键的错误识别。,3、抖动和重键问题,图11.16 抖动和硬件消抖电路,所谓重键就是指两个或多个键同时闭合。出现重键时,读取的键值必然出现有一个以上的0。于是就产生了到底识别哪一个键的问题。对重键问题的处理,简单的情况下,可以不予识别,即认为重键是一个错误的按键。,通常情况,则是只承认先识别出来的键,对此时同时按下的其它键均不作识别,直到所有键都释放以后,才读入下一个键,称为连锁法。另外还有一种巡回法,它

22、的基本思想是:等被识别的键释放以后,就可以对其它闭合键作识别,而不必等待全部键释放。显然巡回法比较适合于快速键入操作。,LED数码管的主要部分是七段发光二极管,如图11.17(a)所示。这七段发光二极管分别称为a、b、c、d、e、f、g,有的产品还附带有一个小数点h,通过7个发光段的不同组合,可以显示09和AF共16个字母数字或其它异形字符。,三、8255A与LED数码管接口,1、LED数码管的工作原理,(a)数码管外型,图11.17 LED数码管,(b)共阳极结构,(d)与8255A的连接,(c)共阴极结构,图11.17 LED数码管,表11.4七段LED编码表,为了将一位十六进制数在一个L

23、ED上显示出来,就需要将十六进制数译为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 TABLE;取显示代码表首地址 XLAT

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

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

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

27、,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 DISP;没有,显示下一个数字 RET;8位数码管都显示一遍,返回 TABLE DB 0C0H,0F9H,0A4H,0B0H;显示代码表 DB 99H,92H,82H,0F8H DB 80H,98H,88H,83H

28、DB 0C6H,0A1H,86H,8EHBUFDATA DB 8 DUP(0);数字缓冲区,例:设8255A的端口地址为344H347H。由16个按键组成44矩阵式键盘,编写程序读取按键(定义键值为0F)将键值写入输出口,在数码管上显示,以观察输入的键位。,四、8255A与键盘/LED接口,8255A与键盘和LED连接电路,程序流程如下:,流程图,相应程序如下:,DATA SEGMENTdisc DB 0BBH,0A0H,097H,0B5H,0ACH,3DHDB 3FH,0A1H,0BFH,0BDH,0AFH,3EH,0B6HDB 1FH,0FH;0f 显示段码表DISO DB Press a

29、ny of the keys to quit!.24H;提示信息DQQ DB 0DATA Ends,CODE SEGMENTMAIN PROC FARASSUME CS:CODE DS:DATA START:MOV AL,3;清屏幕MOV AH,0INT 10HMOV AX,DATA;显示提示信息MOV DS,AXMOV AH,2;光标定位MOV BH,0MOV DX,0614HINT 10HMOV DX,OFFSET DISO;显示:“Press”,QWE:MOV DX,347H;8255A控制寄存器初始化MOV AL,80H;B口、C口设为输出OUT DX,ALMOV DX,345H;34

30、5H为8255A的B口地址MOV BL,DQQMOV BH,0MOV DI,BXMOV AL,DI;取0F显示字形码OUT DX,AL;将显示字形码送B口MOV DX,346H;8255A C口地址MOV AL,0E0HOUT DX,AL;,MOV BX,DLYC1LPO:MOV CX,DLYC2;延时LP1:LOOP LP1DEC BXJNZ LPOKS:MOV DX,350H;指示灯显示MOV AL,DQQ;按下键的二进制值OUT DX,ALMOV DX,347H;8255A初始化,写控制字88HMOV AL,88H;PC0PC3为输出,PC4PC7为输入OUT DX,AL;B口输出,方式

31、0,A口输出。,KSLP:MOV DX,346H;读键盘IN AL,DXAND AL,0F0HCMP AL,0F0HJNE KP;有键按下,转处理判别MOV DX,350H;若键未按,查S1S4键是否退出IN AL,DXAND AL,0F0HCMP AL,0F0HJNE KPR;S1S4任一健按下,则转KPR退出JMP KSLP,KP:MOV CX,0F000H;扫描键盘KP0:LOOP KP0;消抖延时MOV DX,346HIN AL,DXAND AL,0F0HCMP AL,0F0HJE KSLP;消抖后无键按下,则转回,视作干扰MOV CX,0004H;扫描4行MOV DX,346HMOV

32、 BX,0F700H;BH扫描输出行码,先扫第0行(PC3=0);BL键值,KP1:MOV AL,BH;行扫描OUT DX,ALIN AL,DXAND AL,0F0HCMP AL,0F0HJNE KP2;是这一行的键按下,转出判断列ADD BL,04H;键值加4ROR BH,1;准备扫描下一行LOOP KP1JMP QWE;4行扫完未找到,转显示,KP2:MOV CX,0004H;扫描4列KP3:ROL AL,1;列扫描TEST AL,01JZ KP4;AL=0,即是此列,转出INC BL;键值加1LOOP KP3,KP4:MOV DQQ,BL;键盘送显示缓存KS5:MOV DX,346H;等待键释放IN AL,DXAND AL,0F0HCMP AL,0F0HJNE KS5;仍按下,继续等待MOV CX,0F000H,KP6:LOOP KP6;消抖延时MOV DX,346HIN AL,DXAND AL,0F0HCMP AL,0F0HJNE KS5JMP QWE;键处理结束,KPR:MOV AL,0;退出MOV DX,0350H;关所有的LED灯OUT DX,ALMOV AX,4C00HINT 21HMain ENDPCODE ENDSEND START,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号