6.3 8255的编程应用.ppt_第1页
6.3 8255的编程应用.ppt_第2页
6.3 8255的编程应用.ppt_第3页
6.3 8255的编程应用.ppt_第4页
6.3 8255的编程应用.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、第二节 8255A的应用举例,8255与系统的连接示意图,D0D7,WR,RD,A1,A0,CS,DB,IOW,IOR,A1,A0,译码器,8255,PA口,PB口,PC口,D0D7,外 设,A2A15,系统总线,图8-8为8255A与8086总线连接,8255A右边的信号线与系统总线连接,左边的3个口分别与外设的数据输入输出线、状态信息连接。,图 8255A与8086系统连接图,8255内部结构与外部接线图,片内译码电路 A0A1=,数据端口A、B、C 每个端口8位,通过编程设定其为 输入口或输出口和外设传送信息 00 A口;01 B口; 10 C口;11 控制口,2.1 8255A初始化编

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

3、它的初始化程序段。 方式选择控制字:10010101B=95H C口置位/复位控制字:00001001=09H 初始化程序段: MOV DX,0120H MOV AL,95H OUT DX,AL MOV AL,09H OUT DX,AL,2.2 8255A初始化编程应用,1.简单开关接口电路 在工业控制领域,经常需要检测某些开关量的状态。在某一系统中,有8个开关K7K0,要求不断检测它们的通断状态,并通过发光二极管LED7LED0显示出来。开关断开,相应的LED点亮;开关合上,LED熄灭。选用8086CPU,8255A和译码器等芯片,构成应用电路。 8255A端口地址为0120H0123H,编

4、写一个完整的程序完成此功能。,图8-9 8086CPU、8255A和开关的接口电路,编程时先要确定方式控制字:,因为A口工作于方式0输入,B口为方式0输出,PC口未用,其中的各位可以被置0,这样,写入控制口0123H的控制字为10010000H,按键扫描及其显示:,可将A口的开关状态读入寄存器AL。若开关合上,AL中的相应位为0,断开则为1。当把AL中的内容从B口输出时候,相应于0的位置上的LED熄灭,表示对应的开关时合上的,否则LED点亮,指示开关断开,CODE SEGMENT ASSUME CS:CODE START: MOV DX, 0123H MOV AL, 10010000B OUT

5、 DX, AL TEST: MOV DX, 0120H IN AL, DX MOV DX, 0121H OUT DX, AL JMP TEST CODE ENDS END START,2. 8255A作为开关K0K3及七段LED显示器接口。要求开关设置的二进制信息,由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 D0 dp g f e d c b a,0(3FH)

6、 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) 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;指向端口

7、A OUT DX, AL;输出字形码显示 HLT,MOV DX,0EBH ;设置8255A工作方式 MOV AL,81H OUT DX,AL,MOV DX,0EAH ;指向端口C,读开关状态 IN AL,DX AND AL,0FH,LEA BX,TABLE ;显示代码表首地址送BX XLAT ;查表,取出相应的字形码送AL,8255A的A口和B口工作在方式0,A口为输入端口,接有四个开关。B口为输出端,接有一个七段发光二极管,连接电路如图所示。试编一程序要求七段发光二班管显示开关所拨通的数字。,作业:,3.8255与打印机的接口,打印机工作顺序(过程) 1) 数据与STB信号一起送入打印机,S

8、TB相当于启动信号,启动打印机接受数据; 2) 打印机处理数据,这时BUSY为高,表示“忙”; 3) 处理完数据,BUSY为0,且ACK为低,应答主机。,分析:PA端口与打印机的数据线相连;,OBF(PC7)与打印机的STB相连,启动打印机;,ACK(PC6)与打印机的ACK相连,打印机取走数据;,ACK信号通知8255数据已被取走,该信号自动使OBF为高,但由于打印机速度很慢,因此在打印时,会发出BUSY信号,此时,需查询BUSY为低才可以完成一次数据传输。所以用PC4接BUSY,设置为输入。,8255地址:340H343H,控制字:1010 1 A8H,MOV DX, 343H MOV A

9、L, 0A8H OUT DX, AL,DATA SEGMENT Pstring DB This is a sample of printer Counter EQU $-Pstring DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,START: MOV AX,DATA MOV DS, AX,MOV CX,Counter LEA BX, Pstring,LP1: MOV AL, BX MOV DX, 340H OUT DX, AL MOV DX, 342H LP2: IN AL, DX AND AL, 00010000H JNZ LP2,INC BX

10、 LOOP LP1 CODE ENDS ENDP START,4、键盘接口,键盘是微型计算机系统中最常用的一种输入设备。可以由多个开关组合而成。用来制造键盘的开关很好多种,最常用的有机械式、薄膜式、电容式和霍尔效应式等4种,对于大多数的键盘,按键被排列成行和列的矩阵,工作原理,在无键按下的时候,由于+5V上的上拉电阻的作用下,列线被置成高电平,分析:,按下某一键的时候,该键所在的行线和列线接通(如向被压下键所在的行线上输出一个低电平信号,则对于的列线也呈现低电平,从B口中读取列线信号时,可以检测到该列上低电平,读取B口中的状态,还可以检测到该行上的低电平,根据读入的行和列状态中的低电平,便能确

11、定哪个键被压下,键盘扫描过程:,(1)检测键盘上所有的键是否都松开,反复检测直至全松开。,(2)检测键盘上是否有键按下,反复检测直至有键按下。,(3)若有键按下,则消除键抖动后(硬件消抖动电路,软件延时消抖动下),再确认该键是否按下。,(4)对按下的键进行编码,即将该键所在的行号和列号转换成16进制代码。,(6)根据代码转相应功能子程序。,注:若在按键时,多个键盘同时按下,可取最后松开的按键作为本次按下的键。,(5)检测该键是否松开,反复检测直至松开。,检测矩阵中是否有键按下的一种简单的方法:,自输出口A向所有行线输出低电平(输出0),再通过B口的低4位读取列值,若其中有0,则便有键按下,上一

12、次压下的键是否松开:,向所有行线输出低电平,再读入各列值,只有当各行线和列线均为高电平,表示以前的键已经释放了,消除键抖动:,在检测到有键按下后,延长一定时间(20ms)再检查该键是否仍被压着,若是,才认定该键确实被按下了,确定被压下键所在的行列号:,为了获取行列信息,先从A口输出一个低电平到一行线,然后再从B口中读入各列的值,若没有一列是低电平,则压下的键不在此行。然后,再向下一行输出一个低电平,再检查各列线上是否有低电平,直到某一列出现低电平为止,获得该键的扫描码:,根据被按下的键所在的行号(03)和列号(03),就能得到该键的扫描码,初始化: PORT-A EQU 0288H ;8255

13、A口地址 PORT-B EQU 0289H ;8255B口地址 PORT-CTL EQU 028AH ;8255控制口地址 TABLE DB 77H, 7BH, 7DH,7EH DB 0B7H, 0BBH, 0BDH,0BEH DB 0D7H, 0DBH, 0DDH,0DEH DB 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, A

14、L,WO: MOV DX, PORT-B ;DX指向B口 IN AL, DX ;输入B口 AND AL,0FH CMP AL,0FH ;各键均松开? JNE WO ;否,继续等,WR: IN AL, DX ;输入B口 AND AL,0FH CMP AL,0FH ;是否有键按下 JE WR ;否,等待,MOV CX, 16EAH DELAY: LOOP DELAY,IN AL, DX ;输入B口 AND AL,0FH CMP AL,0FH ;是否有键按下 JE WR ;否,等待,MOV AL,0FEH ;置行扫描初值 MOV CL,AL ;暂存于C N-R: MOV DX,PORT-A OUT

15、DX, AL ;输出行扫描值 MOV DX, PORT-B ;DX指向B口 IN AL, DX ;输入B口 AND AL, 0FH CMP AL, 0FH ;有键按下 JNE ENCODE ;是,转编码 ROL CL, 01 ;否,修改扫描初值 MOV CL, AL JMP N-R ;扫描下一行,ENCODE: MOV BX,000FH ;置键代码初值 IN AL,DX ;读入行列号 NEXT-T: CMP AL, TABLEBX ;与表中行列号相等吗 JE DONE ;相等转DONE DEC BX ;不相等,修改位置 JNS NEXT-T ;未查完,继续 MOV AH, 01 ;查完,未查到

16、,置出错标志 JMP EXIT ;退出 DONE: MOV AL, BL ;键代码送AL MOV AH, 00 ; 键有效标志00AL EXIT: HLT,CPU向端口A送全“0”到行线,再从B口读入列状态。若读入的状态为全“1”,表示无键按下。,CPU向端口A的PA0送“0” ,其余行线送“1”,再从B口读入列状态。若读入的状态为全“1”,表示第0行无键按下;否则闭合键在第0行上。,在第0行无键按下的情况下,依此对行1,行2,行7进行上述操作,找出按键所在的行和列的编号。,初始化: PORT-A EQU 0288H ;8255A口地址 PORT-B EQU 0289H ;8255B口地址 P

17、ORT-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 AL, 00H OUT DX, AL MOV DX, PORT-B ;DX指向B口 IN AL, DX ;输入B口 CMP AL, 0FFH ;各键均未按下 JZ WAITK ;无键按下继续等,MOV CX, 16EAH DELAY: LOOP DELAY ;延时20ms,MOV BL,0

18、;送键号初值 MOV BH,11111110B ;置初始扫描模式 MOV CX,8,FNDROW: MOV AL,BH MOV DX,PORT-A OUT DX, AL ;输出行扫描值 MOV DX, PORT-B ;DX指向B口 IN AL, DX ;输入列码 CMP AL, 0FFH ; JNE FNDCOL ;有键按下查列号 ROL BH, 01 ;否,修改扫描初值 ADD BL, 8 ;指向下一行键号初值 LOOP FNDROW ;扫描下一行 JMP DONE ;8行扫描完,无键按下 FNDCOL: ROR AL,1 ;查哪一列有键按下 JNC RIGHT ;查到按下键的列号 INC BL JMP FNDCOL R

温馨提示

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

评论

0/150

提交评论