大二下微机第9章_第1页
大二下微机第9章_第2页
大二下微机第9章_第3页
大二下微机第9章_第4页
大二下微机第9章_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、第九章第九章 可编程并行接口芯片可编程并行接口芯片8255A及其应用及其应用 并行接口概述 CPU与外设之间的信息传送都是通过接口电路 来进行的。 计算机 外部设备、计算机 计算机之间交换 信息称之为计算机通信。 计算机通信可分为两大类: 并行通信:8位或16位或32位数据同时传输,速 度快,信息率高,成本高 串行通信:一位一位数据传送(在一条线上顺序 传送),成本低 实现并行通信的接口就是并行接口。 并行接口的特点 在多根数据线上以数据字为单位同时传递 传递的数据不要求固定的格式 有可编程和不可编程之分,可编程结构居多 适合于近距离数据传送 速度较快 简单并行接口回顾 不设置握手控制信号线

2、不需要对接口芯片进行编程 执行IOW指令就可以将数据通过数据总 线输出到指定地址的锁存器中,并通过 锁存器输出 执行IOR指令,就可以从三态门上读入数 据 连接8个开关的基本输入接口 +5V A0 A1 A 2 A 3 A 4 A5 A6 A 7 A8 A 9 方式控制字方式控制字99H out 63h,al 8255应用 举例2 利用8255实现开关检测和继电器控制电路; 当开关闭合时,使继电器通电动作;开关断 开时,继电器不动作; 系统每隔100ms检测一次开关状态,实现相 应的继电器控制; 初始状态下继电器不动作。 CS A0 A1 WR RD DBPA0 PA7 PB0 PB7 +5V

3、 +12V K 继电器继电器 384H387H 388H38BHCS A0 A1 OUT1 CLK1 2MHzCLK0 OUT0 8259A PIC WR RD DB 8253 8255 中断请求信号中断请求信号 INTR Q1 R1 R2 D1 题目分析: 使8255的A端口和B端口均工作于方式0; 8253计数器0和计数器1均工作于方式3,利用OUT0的输出 作为计数器1的时钟信号,其输出频率为2KHz, OUT1输出 频率为10Hz(周期100ms); OUT1作为中断信号,每100ms产生一次中断; CPU响应中断后检测开关状态,控制继电器的动作; 8253两个计数器的计数初值分别为:

4、 CNT0:2MHz/2KHz =1000 (16位) CNT1:100ms/0.5ms=200 (8位) 8255的初始化 MOV DX,387H MOV AL,82H ;1 00 0 0 0 1 0 OUT DX,AL XOR AL,AL ;A口输出全0 MOV DX,384H OUT DX,AL 8253的初始化 设置工作方式: MOV DX,38BH MOV AL,36H OUT DX,AL MOV AL,56H OUT DX,AL 36H = 00 11 011 0 CNT0 16位 方式3 l置置计数初值:计数初值: MOV DX,388H MOV AX,1000 OUT DX,A

5、L MOV AL,AH OUT DX,AL MOV DX,389H MOV AL,200 OUT DX,AL 8255的控制程序(中断处理) (中断初始化程序略) 8253中断服务程序中的8255控制程序段如下: MOV DX,385H ;PB口地址 IN AL,DX ;读PB0状态 NOT AL ;变反 MOV DX,384H ;输出到继电器 OUT DX,AL 8255A的应用举例的应用举例3 某系统如图。要求不断检测某系统如图。要求不断检测开关开关 K7K0 的状态,并随时在发的状态,并随时在发 光二极管光二极管LED7LED0上显示。要求:若某开关断开,对应的上显示。要求:若某开关断开

6、,对应的LED 点亮,若某开关合上,对应的点亮,若某开关合上,对应的LED熄灭,编写相应的控制程序。熄灭,编写相应的控制程序。 8255A PA7 PA0 K7 PB7 PB6 PB0 D7D0 RD WR A1 A2 A B C G2A G2B G1 Y0 Y1 Y2 Y3 Y4 O O O O O D7D0 RD WR A0 A1 CSA0 A3 A4 A7 8086 系统总线系统总线 LS138 M/IO DX指向控制口指向控制口 MOV AL, 10001011B ;控制字控制字 OUT DX, AL ;写入控制字;写入控制字 键盘扫描过程:键盘扫描过程: (1)检测键盘上所有的键是否

7、都松开,反复检测直至全松开。)检测键盘上所有的键是否都松开,反复检测直至全松开。 (2)检测键盘上是否有键按下,反复检测直至有键按下。)检测键盘上是否有键按下,反复检测直至有键按下。 (3)若有键按下,则消除键抖动后(硬件消抖动电路,软件)若有键按下,则消除键抖动后(硬件消抖动电路,软件 延时消抖动下),再确认该键是否按下。延时消抖动下),再确认该键是否按下。 (4)对按下的键进行编码,即将该键所在的行号和列号转换)对按下的键进行编码,即将该键所在的行号和列号转换 成成16进制代码。进制代码。 (6)根据代码转相应功能子程序。)根据代码转相应功能子程序。 (5)检测该键是否松开,反复检测直至松

8、开。)检测该键是否松开,反复检测直至松开。 检测是否有键按下的方法:检测是否有键按下的方法: CPU向端口向端口A送全送全“0”A口,口, 再从再从B口读入列状态。若读入的口读入列状态。若读入的 状态为全状态为全“1”,表示无键按下。,表示无键按下。 检测按下键所在的行号的方法:检测按下键所在的行号的方法: CPU先向端口先向端口A的的PA0送送“0” ,其余行线送,其余行线送“1”,再从,再从B口读入列状态,若口读入列状态,若 读入的状态为全读入的状态为全“1”,表示第,表示第0行无键按下;否则表示第行无键按下;否则表示第0行上有键按下。行上有键按下。 若第若第0行无键按下,再依此对行行无键

9、按下,再依此对行1,行,行2,行行7进行上述操作,直至找出按键进行上述操作,直至找出按键 所在的行和列的编号。所在的行和列的编号。 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 C 9 8 DE 4 0 F 6 1 5 B 2 7 3 A PA0 PA1 PA2 PA3 8255A 8 2 5 5 A +5V 将所按键行列号转换成将所按键行列号转换成(16进制进制)键代码的方法键代码的方法: 查表查表(略略) MOV DX, PORT-A ; DX指向指向A口口 MOV AL, 00H OUT DX, AL WO: MOV DX, PORT-B ; DX指向指向B口口 IN

10、AL, DX ; 输入输入B口口 AND AL,OFH COM AL,OFH ;各键均未按下;各键均未按下 JNE WO ;否,继续等;否,继续等 读入列值读入列值 键松开键松开 读入列值读入列值 有键按下有键按下 延时延时20ms消抖动消抖动 键仍按下键仍按下 逐行逐列查按键逐行逐列查按键 得行列码得行列码 查表得键代码查表得键代码 所有行置所有行置“0” N Y NWR: IN AL, DX ;输入输入B口口 AND AL,OFH COM AL,OFH ;是否有键按下;是否有键按下 JE WR ;否,等待;否,等待 MOV CX, 16EAH DLY: LOOP DLY WR: IN AL

11、, DX ;输入输入B口口 AND AL,OFH COM AL,OFH ;是否有键按下;是否有键按下 JE WR ;否,等待;否,等待 MOV AL,0FEH ;置行扫描初值;置行扫描初值 MOV CL,AL ;暂存于;暂存于C N-R: MOV DX,PORT-A OUT DX, AL ;输出行扫描值;输出行扫描值 MOV DX, PORT-B ;DX指向指向B口口 IN AL, DX ;输入;输入B口口 AND AL, OFH COM AL, OFH ;有键按下;有键按下 JNE ENCODE ;是,转编码;是,转编码 ROL CL, 01 ;否,修改扫描初值;否,修改扫描初值 MOV C

12、L, AL JMP N-R ;扫描下一行;扫描下一行 ENCODE: MOV BX,000FH 找出按下键所在的行号的方法:找出按下键所在的行号的方法: CPU先向端口先向端口A的的PA0送送“0” ,其余行线送,其余行线送“1”,再从,再从B口读入列状态,口读入列状态, 若读入的状态为全若读入的状态为全“1”,表示第,表示第0行无键按下;否则表示第行无键按下;否则表示第0行上有键按下。行上有键按下。 若第若第0行无键按下,再依此对行行无键按下,再依此对行1,行,行2,行行7进行上述操作,直至找出进行上述操作,直至找出 按键所在的行和列的编号。按键所在的行和列的编号。 得所按键行列号的方法:直

13、接从得所按键行列号的方法:直接从B口读取口读取 将所按键行列号转换成将所按键行列号转换成(16进制进制)键代码的方法键代码的方法: DATA SEGMENT TABLE DB 77H, 7BH, 7DH,7EH DB 0B7H, 0BBH, 0BDH,0BEH DB 0D7H, 0DBH, 0DDH,0DEH DB 0E7H, 0EBH, 0EDH,0EEH DATAENDS 每键有一个编代码,每键有一个编代码, 本例采用从左至右、从下本例采用从左至右、从下 至上顺序码至上顺序码 0F 为了编程方便,每个为了编程方便,每个 键应有一个对应的扫描码键应有一个对应的扫描码 ( 行列码行列码 ),如

14、表。,如表。 键值键值(编号编号)行码行码列码列码(行列行列)扫描码扫描码 00111011177H 1011110117BH 2011101117DH 3011101117EH 410110111B7H 建立扫描码表建立扫描码表 ENCODE: MOV BX,000FH ;置键代码初值;置键代码初值 IN AL,DX ;读入行列号;读入行列号 NEXT-T: COM AL, TABLEBX ;与表中行列号相等吗;与表中行列号相等吗 JE DONE ;相等转;相等转DONE DEC BX ;不相等,修改位置;不相等,修改位置 JNS NEXT-T ;未查完,继续;未查完,继续 MOV AH,

15、01 ;查完,未查到,置出错标志;查完,未查到,置出错标志 JMP EXIT ;退出;退出 DONE: MOV AL, BL ;键代码送;键代码送AL MOV AH, 00 ; 键有效标志键有效标志00AL 得所按键行列号的方法:直接从得所按键行列号的方法:直接从B口读取口读取 将所按键行列号转换成将所按键行列号转换成(16进制进制)键代码的方法键代码的方法: 查表查表 DATA SEGMENT TABLE DB 77H, 7BH, 7DH,7EH DB 0B7H, 0BBH, 0BDH,0BEH DB 0D7H, 0DBH, 0DDH,0DEH DB 0E7H, 0EBH, 0EDH,0EE

16、H DATAENDS MOV AL,0FEH ;置行扫描初值;置行扫描初值 MOV CL,AL ;暂存于;暂存于C N-R: MOV DX,PORT-A OUT DX, AL ;输出行扫描值;输出行扫描值 MOV DX, PORT-B ;DX指向指向B口口 IN AL, DX ;输入;输入B口口 AND AL, OFH COM AL, OFH ;有键按下;有键按下 JNE ENCODE ;是,转编码;是,转编码 ROL CL, 01 ;否,修改扫描初值;否,修改扫描初值 MOV CL, AL JMP N-R ;扫描下一行;扫描下一行 ENCODE: MOV BX,000FH ;置键代码初值;置键代码初值 IN AL,DX ;读入行列号;读入行列号 NEXT-T: COM AL, TABLEBX ;与表中行列号相等吗;与表中行列号相等吗 JE DONE ;相等转;相等转DONE DEC BX ;不相等,修改位置;不相等,修改位置 JNS

温馨提示

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

评论

0/150

提交评论