收藏 分享(赏)

9.2 8255的编程应用.ppt

上传人:czsj190 文档编号:5912160 上传时间:2019-03-21 格式:PPT 页数:39 大小:1.19MB
下载 相关 举报
9.2 8255的编程应用.ppt_第1页
第1页 / 共39页
9.2 8255的编程应用.ppt_第2页
第2页 / 共39页
9.2 8255的编程应用.ppt_第3页
第3页 / 共39页
9.2 8255的编程应用.ppt_第4页
第4页 / 共39页
9.2 8255的编程应用.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、第二节 8255A的应用举例,8255与系统的连接示意图,D0D7,WR,RD,A1,A0,CS,DB,IOW,IOR,A1,A0,译码器,8255,PA口,PB口,PC口,D0D7,外 设,A2A15,系统总线,8255内部结构与外部接线图,片内译码电路A0A1=,数据端口A、B、C 每个端口8位,通过编程设定其为 输入口或输出口和外设传送信息 00 A口;01 B口; 10 C口;11 控制口,8255A初始化编程,8255A初始化编程可以分两步进行:首先把方式选择控制字写入控制口,确定所用端口的工作方式,如果端口选择为工作方式1或方式2,还要确定CPU和8255A之间是用查询方式还是用中

2、断方式交换信息,并以此来组织C口置位/复位控制字,写入8255A控制口,使相应的中断允许标志(INTE)置0或置1,从而达到禁止或开放中断的目的。完成了初始化编程之后,CPU就可以用IN和OUT指令通过8255A与外设交换数据了。,【例1】: 8255A的控制器寄存器地址为0123H,工作状态为A口方式0输入,B口方式1输出,C口低半字节输入,C口高半字节输出,写出它的初始化程序段;如果要把C口的PC4置位,写出它的初始化程序段。方式选择控制字:10010101B=95H C口置位/复位控制字:00001001=09H初始化程序段:MOV DX,0123HMOV AL,95HOUT DX,AL

3、MOV AL,09HOUT DX,AL,8255A初始化编程应用,1.简单开关接口电路在工业控制领域,经常需要检测某些开关量的状态。在某一系统中,有8个开关K7K0,要求不断检测它们的通断状态,并通过发光二极管LED7LED0显示出来。开关断开,相应的LED点亮;开关合上,LED熄灭。选用8086CPU,8255A和译码器等芯片,构成应用电路。 8255A端口地址为0120H0123H,编写一个完整的程序完成此功能。,图8-9 8086CPU、8255A和开关的接口电路,编程时先要确定方式控制字:,因为A口工作于方式0输入,B口为方式0输出,PC口未用,其中的各位可以被置0,这样,写入控制口0

4、123H的控制字为10010000H,按键扫描及其显示:,可将A口的开关状态读入寄存器AL。若开关合上,AL中的相应位为0,断开则为1。当把AL中的内容从B口输出时候,相应于0的位置上的LED熄灭,表示对应的开关时合上的,否则LED点亮,指示开关断开,CODE SEGMENT ASSUME CS:CODESTART: MOV DX, 0123HMOV AL, 10010000BOUT DX, ALTEST:MOV DX, 0120HIN AL, DXMOV DX, 0121H OUT DX, ALJMP TEST CODE ENDSEND START,2.8255A作为开关K0K3及七段LED

5、显示器接口。要求开关设置的二进制信息,由PC0PC3输入,经程序转换为对应的七段LED显示器的字形代码后,由PA口输出显示。,LED显示器的结构,LED显示器的工作原理,软件译码法,PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7,8 2 5 5,DB7-DB0,D7 D6 D5 D4 D3 D2 D1 D0dp g f e d c b a,0(3FH) 0 0 1 1 1 1 1 1,9(6FH) 0 1 1 0 1 1 1 1,1(05H) 0 0 0 0 0 1 1 0,2(5BH) 0 1 0 1 1 0 1 1,3(4FH) 0 1 0 0 1 1 1 1,4(66H)

6、 0 1 1 0 0 1 1 0,5(6DH) 0 1 1 0 1 1 0 1,6(7DH) 0 1 1 1 1 1 0 1,7(07H) 0 0 0 0 0 1 1 1,8(7FH) 0 1 1 1 1 1 1 1,各端口地址为:E8HEBH,8255A各端口地址确定:,8255A方式选择控制字:,81H,实现操作的具体程序如下:,MOV DX, 0E8H ;指向端口A OUT DX, AL ;输出字形码显示 HLT,;设置8255A工作方式MOV AL,81H OUT 0EB ,AL,MOV DX,0EAH ;指向端口C,读开关状态 IN AL,DX AND AL,0FH,LEA BX,T

7、ABLE ;显示代码表首地址送BX XLAT ;查表,取出相应的字形码送AL,8255A的A口和B口工作在方式0,A口为输入端口,接有四个开关。B口为输出端,接有一个七段发光二极管,连接电路如图所示。试编一程序要求七段发光二班管显示开关所拨通的数字。0120h-0123h,作业:,3.8255与打印机的接口,打印机工作顺序(过程) 1) 数据与STB信号一起送入打印机,STB相当于启动信号,启动打印机接受数据; 2) 打印机处理数据,这时BUSY为高,表示“忙”; 3) 处理完数据,BUSY为0,且ACK为低,应答主机。,分析:PA端口与打印机的数据线相连;,OBF(PC7)与打印机的STB相

8、连,启动打印机;,ACK(PC6)与打印机的ACK相连,打印机取走数据;,ACK信号通知8255数据已被取走,该信号自动使OBF为高,但由于打印机速度很慢,因此在打印时,会发出BUSY信号,此时,需查询BUSY为低才可以完成一次数据传输。所以用PC4接BUSY,设置为输入。,8255地址:340H343H,控制字:1010 1 A8H,MOV DX, 343H MOV AL, 0A8H OUT DX, AL,DATA SEGMENTPstring DB This is a sample of printer Counter EQU $-Pstring DATA ENDS,CODE SEGMEN

9、TASSUME CS:CODE,DS:DATA,START: MOV AX,DATAMOV DS, AX,MOV CX,Counter LEA BX, Pstring,LP1: MOV AL, BXMOV DX, 340HOUT DX, ALMOV DX, 342H LP2: IN AL, DXAND AL, 00010000H JNZ LP2,INC BXLOOP LP1 CODE ENDSENDP START,4、键盘接口,键盘是微型计算机系统中最常用的一种输入设备。可以由多个开关组合而成。用来制造键盘的开关很好多种,最常用的有机械式、薄膜式、电容式和霍尔效应式等4种,对于大多数的键盘,按

10、键被排列成行和列的矩阵,工作原理,在无键按下的时候,由于+5V上的上拉电阻的作用下,列线被置成高电平,分析:,按下某一键的时候,该键所在的行线和列线接通(如向被压下键所在的行线上输出一个低电平信号,则对于的列线也呈现低电平),从B口中读取列线信号时,可以检测到该列上低电平,读取B口中的状态,还可以检测到该行上的低电平,根据读入的行和列状态中的低电平,便能确定哪个键被压下,键盘扫描过程:,(1)检测键盘上所有的键是否都松开,反复检测直至全松开。,(2)检测键盘上是否有键按下,反复检测直至有键按下。,(3)若有键按下,则消除键抖动后(硬件消抖动电路,软件延时消抖动下),再确认该键是否按下。,(4)

11、对按下的键进行编码,即将该键所在的行号和列号转换成16进制代码。,(6)根据代码转相应功能子程序。,注:若在按键时,多个键盘同时按下,可取最后松开的按键作为本次按下的键。,(5)检测该键是否松开,反复检测直至松开。,检测矩阵中是否有键按下的一种简单的方法:,自输出口A向所有行线输出低电平(输出0),再通过B口的低4位读取列值,若其中有0,则便有键按下,上一次压下的键是否松开:,向所有行线输出低电平,再读入各列值,只有当各行线和列线均为高电平,表示以前的键已经释放了,消除键抖动:,在检测到有键按下后,延长一定时间(20ms)再检查该键是否仍被压着,若是,才认定该键确实被按下了,确定被压下键所在的

12、行列号:,为了获取行列信息,先从A口输出一个低电平到一行线,然后再从B口中读入各列的值,若没有一列是低电平,则压下的键不在此行。然后,再向下一行输出一个低电平,再检查各列线上是否有低电平,直到某一列出现低电平为止,获得该键的扫描码:,根据被按下的键所在的行号(03)和列号(03),就能得到该键的扫描码,初始化: PORT-A EQU 0288H ;8255A口地址 PORT-B EQU 0289H ;8255B口地址 PORT-CTL EQU 028AH ;8255控制口地址 TABLE DB 77H, 7BH, 7DH,7EHDB 0B7H, 0BBH, 0BDH,0BEH DB 0D7H,

13、 0DBH, 0DDH,0DEHDB 0E7H, 0EBH, 0EDH,0EEH,8255初始化:方式0,A口输出,B口、C口输入 MOV DX, PORT-CTL ;DX指向控制口MOV AL, 10001011B ;控制字 OUT DX, AL ;写入控制字,MOV DX, PORT-A ;DX指向A口MOV AL, 00H OUT DX, AL,WO: MOV DX, PORT-B ;DX指向B口IN AL, DX ;输入B口AND AL,0FHCMP AL,0FH ;各键均松开?JNE WO ;否,继续等,WR: IN AL, DX ;输入B口AND AL,0FHCMP AL,0FH

14、;是否有键按下JE WR ;否,等待,MOV CX, 16EAH DELAY: LOOP DELAY,IN AL, DX ;输入B口AND AL,0FHCMP AL,0FH ;是否有键按下JE WR ;否,等待,MOV AL,0FEH ;置行扫描初值MOV CL,AL ;暂存于C N-R: MOV DX,PORT-AOUT DX, AL ;输出行扫描值MOV DX, PORT-B ;DX指向B口IN AL, DX ;输入B口AND AL, 0FHCMP AL, 0FH ;有键按下JNE ENCODE ;是,转编码ROL CL, 01 ;否,修改扫描初值MOV CL, ALJMP N-R ;扫描

15、下一行,ENCODE: MOV BX,000FH ;置键代码初值IN AL,DX ;读入行列号 NEXT-T: CMP AL, TABLEBX ;与表中行列号相等吗JE DONE ;相等转DONEDEC BX ;不相等,修改位置JNS NEXT-T ;未查完,继续MOV AH, 01 ;查完,未查到,置出错标志JMP EXIT ;退出 DONE: MOV AL, BL ;键代码送ALMOV AH, 00 ; 键有效标志00AL EXIT: HLT,CPU向端口A送全“0”到行线,再从B口读入列状态。若读入的状态为全“1”,表示无键按下。,CPU向端口A的PA0送“0” ,其余行线送“1”,再从

16、B口读入列状态。若读入的状态为全“1”,表示第0行无键按下;否则闭合键在第0行上。,在第0行无键按下的情况下,依此对行1,行2,行7进行上述操作,找出按键所在的行和列的编号。,初始化: PORT-A EQU 0288H ;8255A口地址 PORT-B EQU 0289H ;8255B口地址 PORT-CTL EQU 028BH ;8255控制口地址,8255初始化:方式0,A口输出,B口、C口输入 MOV DX, PORT-CTL ;DX指向控制口MOV AL, 10000011B ;控制字 OUT DX, AL ;写入控制字,WAITK:MOV DX, PORT-A ;DX指向A口MOV

17、AL, 00HOUT DX, ALMOV DX, PORT-B ;DX指向B口IN AL, DX ;输入B口CMP AL, 0FFH ;各键均未按下JZ WAITK ;无键按下继续等,MOV CX, 16EAH DELAY: LOOP DELAY ;延时20ms,MOV BL,0 ;送键号初值MOV BH,11111110B ;置初始扫描模式MOV CX,8,FNDROW: MOV AL,BHMOV DX,PORT-AOUT DX, AL ;输出行扫描值MOV DX, PORT-B ;DX指向B口IN AL, DX ;输入列码CMP AL, 0FFH ;JNE FNDCOL ;有键按下查列号R

18、OL BH, 01 ;否,修改扫描初值ADD BL, 8 ;指向下一行键号初值 LOOP FNDROW ;扫描下一行JMP DONE ;8行扫描完,无键按下 FNDCOL: ROR AL,1 ;查哪一列有键按下JNC RIGHT ;查到按下键的列号INC BLJMP FNDCOL RIGHT: : ;按下键的编号在BL中,5红绿灯控制电路编制程序,通过8255A控制发光二极管,以模拟交通路灯的管理,首先我们应该了解交通灯的熄灭规律。设有一个十字路口:南北路口、东西路口。初始状态为2个路口的红灯全亮。之后,南北路口的绿灯亮,东西路口的红灯亮,南北路口方向通车。延迟一段时间后, 南北路口的绿灯熄灭,而南北路口的黄灯开始闪烁。闪烁若干次后,南北路口的红灯亮,而同时东西路口的绿灯亮,东西路口方向开始通车,延迟一段时间后,东西路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次后,再切换到南北路口方向。之后,重复上述过程。,红 黄 绿 红 黄 绿,

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

当前位置:首页 > 学术论文 > 大学论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报