9.2 8255的编程应用_第1页
9.2 8255的编程应用_第2页
9.2 8255的编程应用_第3页
9.2 8255的编程应用_第4页
9.2 8255的编程应用_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第二节8255A的应用举例 8255与系统的连接示意图 D0 D7 WR RD A1 A0 CS DB IOW IOR A1 A0 译码器 8255 PA口 PB口 PC口 D0 D7 外设 A2 A15 系统总线 8255内部结构与外部接线图 片内译码电路A0A1 数据端口A B C每个端口8位 通过编程设定其为输入口或输出口和外设传送信息00A口 01B口 10C口 11控制口 8255A初始化编程 8255A初始化编程可以分两步进行 首先把方式选择控制字写入控制口 确定所用端口的工作方式 如果端口选择为工作方式1或方式2 还要确定CPU和8255A之间是用查询方式还是用中断方式交换信息 并以此来组织C口置位 复位控制字 写入8255A控制口 使相应的中断允许标志 INTE 置0或置1 从而达到禁止或开放中断的目的 完成了初始化编程之后 CPU就可以用IN和OUT指令通过8255A与外设交换数据了 例1 8255A的控制器寄存器地址为0123H 工作状态为A口方式0输入 B口方式1输出 C口低半字节输入 C口高半字节输出 写出它的初始化程序段 如果要把C口的PC4置位 写出它的初始化程序段 方式选择控制字 10010101B 95HC口置位 复位控制字 00001001 09H初始化程序段 MOVDX 0123HMOVAL 95HOUTDX ALMOVAL 09HOUTDX AL 8255A初始化编程应用 1 简单开关接口电路在工业控制领域 经常需要检测某些开关量的状态 在某一系统中 有8个开关K7 K0 要求不断检测它们的通断状态 并通过发光二极管LED7 LED0显示出来 开关断开 相应的LED点亮 开关合上 LED熄灭 选用8086CPU 8255A和译码器等芯片 构成应用电路 8255A端口地址为0120H 0123H 编写一个完整的程序完成此功能 图8 98086CPU 8255A和开关的接口电路 编程时先要确定方式控制字 因为A口工作于方式0输入 B口为方式0输出 PC口未用 其中的各位可以被置0 这样 写入控制口0123H的控制字为10010000H 按键扫描及其显示 可将A口的开关状态读入寄存器AL 若开关合上 AL中的相应位为0 断开则为1 当把AL中的内容从B口输出时候 相应于0的位置上的LED熄灭 表示对应的开关时合上的 否则LED点亮 指示开关断开 CODESEGMENTASSUMECS CODESTART MOVDX 0123HMOVAL 10010000BOUTDX ALTEST MOVDX 0120HINAL DXMOVDX 0121HOUTDX ALJMPTESTCODEENDSENDSTART 2 8255A作为开关K0 K3及七段LED显示器接口 要求开关设置的二进制信息 由PC0 PC3输入 经程序转换为对应的七段LED显示器的字形代码后 由PA口输出显示 LED显示器的结构 LED显示器的工作原理 软件译码法 PA0PA1PA2PA3PA4PA5PA6PA7 8255 DB7 DB0 D7D6D5D4D3D2D1D0dpgfedcba 0 3FH 00111111 9 6FH 01101111 1 05H 00000110 2 5BH 01011011 3 4FH 01001111 4 66H 01100110 5 6DH 01101101 6 7DH 01111101 7 07H 00000111 8 7FH 01111111 各端口地址为 E8H EBH 8255A各端口地址确定 8255A方式选择控制字 81H 实现操作的具体程序如下 MOVDX 0E8H 指向端口AOUTDX AL 输出字形码显示HLT 设置8255A工作方式MOVAL 81HOUT0EB AL MOVDX 0EAH 指向端口C 读开关状态INAL DXANDAL 0FH LEABX TABLE 显示代码表首地址送BXXLAT 查表 取出相应的字形码送AL 8255A的A口和B口工作在方式0 A口为输入端口 接有四个开关 B口为输出端 接有一个七段发光二极管 连接电路如图所示 试编一程序要求七段发光二班管显示开关所拨通的数字 0120h 0123h 作业 3 8255与打印机的接口 打印机工作顺序 过程 1 数据与STB信号一起送入打印机 STB相当于启动信号 启动打印机接受数据 2 打印机处理数据 这时BUSY为高 表示 忙 3 处理完数据 BUSY为0 且ACK为低 应答主机 分析 PA端口与打印机的数据线相连 OBF PC7 与打印机的STB相连 启动打印机 ACK PC6 与打印机的ACK相连 打印机取走数据 ACK信号通知8255数据已被取走 该信号自动使OBF为高 但由于打印机速度很慢 因此在打印时 会发出BUSY信号 此时 需查询BUSY为低才可以完成一次数据传输 所以用PC4接BUSY 设置为输入 8255地址 340H 343H 控制字 10101 A8H MOVDX 343HMOVAL 0A8HOUTDX AL DATASEGMENTPstringDB Thisisasampleofprinter CounterEQU PstringDATAENDS CODESEGMENTASSUMECS CODE DS DATA START MOVAX DATAMOVDS AX MOVCX CounterLEABX Pstring LP1 MOVAL BX MOVDX 340HOUTDX ALMOVDX 342HLP2 INAL DXANDAL 00010000HJNZLP2 INCBXLOOPLP1CODEENDSENDPSTART 4 键盘接口 键盘是微型计算机系统中最常用的一种输入设备 可以由多个开关组合而成 用来制造键盘的开关很好多种 最常用的有机械式 薄膜式 电容式和霍尔效应式等4种 对于大多数的键盘 按键被排列成行和列的矩阵 工作原理 在无键按下的时候 由于 5V上的上拉电阻的作用下 列线被置成高电平 分析 按下某一键的时候 该键所在的行线和列线接通 如向被压下键所在的行线上输出一个低电平信号 则对于的列线也呈现低电平 从B口中读取列线信号时 可以检测到该列上低电平 读取B口中的状态 还可以检测到该行上的低电平 根据读入的行和列状态中的低电平 便能确定哪个键被压下 键盘扫描过程 1 检测键盘上所有的键是否都松开 反复检测直至全松开 2 检测键盘上是否有键按下 反复检测直至有键按下 3 若有键按下 则消除键抖动后 硬件消抖动电路 软件延时消抖动下 再确认该键是否按下 4 对按下的键进行编码 即将该键所在的行号和列号转换成16进制代码 6 根据代码转相应功能子程序 注 若在按键时 多个键盘同时按下 可取最后松开的按键作为本次按下的键 5 检测该键是否松开 反复检测直至松开 检测矩阵中是否有键按下的一种简单的方法 自输出口A向所有行线输出低电平 输出0 再通过B口的低4位读取列值 若其中有0 则便有键按下 上一次压下的键是否松开 向所有行线输出低电平 再读入各列值 只有当各行线和列线均为高电平 表示以前的键已经释放了 消除键抖动 在检测到有键按下后 延长一定时间 20ms 再检查该键是否仍被压着 若是 才认定该键确实被按下了 确定被压下键所在的行列号 为了获取行列信息 先从A口输出一个低电平到一行线 然后再从B口中读入各列的值 若没有一列是低电平 则压下的键不在此行 然后 再向下一行输出一个低电平 再检查各列线上是否有低电平 直到某一列出现低电平为止 获得该键的扫描码 根据被按下的键所在的行号 0 3 和列号 0 3 就能得到该键的扫描码 初始化 PORT AEQU0288H 8255A口地址PORT BEQU0289H 8255B口地址PORT CTLEQU028AH 8255控制口地址TABLEDB77H 7BH 7DH 7EHDB0B7H 0BBH 0BDH 0BEHDB0D7H 0DBH 0DDH 0DEHDB0E7H 0EBH 0EDH 0EEH 8255初始化 方式0 A口输出 B口 C口输入MOVDX PORT CTL DX指向控制口MOVAL 10001011B 控制字OUTDX AL 写入控制字 MOVDX PORT A DX指向A口MOVAL 00HOUTDX AL WO MOVDX PORT B DX指向B口INAL DX 输入B口ANDAL 0FHCMPAL 0FH 各键均松开 JNEWO 否 继续等 WR INAL DX 输入B口ANDAL 0FHCMPAL 0FH 是否有键按下JEWR 否 等待 MOVCX 16EAHDELAY LOOPDELAY INAL DX 输入B口ANDAL 0FHCMPAL 0FH 是否有键按下JEWR 否 等待 MOVAL 0FEH 置行扫描初值MOVCL AL 暂存于CN R MOVDX PORT AOUTDX AL 输出行扫描值MOVDX PORT B DX指向B口INAL DX 输入B口ANDAL 0FHCMPAL 0FH 有键按下JNEENCODE 是 转编码ROLCL 01 否 修改扫描初值MOVCL ALJMPN R 扫描下一行 ENCODE MOVBX 000FH 置键代码初值INAL DX 读入行列号NEXT T CMPAL TABLE BX 与表中行列号相等吗JEDONE 相等转DONEDECBX 不相等 修改位置JNSNEXT T 未查完 继续MOVAH 01 查完 未查到 置出错标志JMPEXIT 退出DONE MOVAL BL 键代码送ALMOVAH 00 键有效标志00 ALEXIT HLT CPU向端口A送全 0 到行线 再从B口读入列状态 若读入的状态为全 1 表示无键按下 CPU向端口A的PA0送 0 其余行线送 1 再从B口读入列状态 若读入的状态为全 1 表示第0行无键按下 否则闭合键在第0行上 在第0行无键按下的情况下 依此对行1 行2 行7进行上述操作 找出按键所在的行和列的编号 初始化 PORT AEQU0288H 8255A口地址PORT BEQU0289H 8255B口地址PORT CTLEQU028BH 8255控制口地址 8255初始化 方式0 A口输出 B口 C口输入MOVDX PORT CTL DX指向控制口MOVAL 10000011B 控制字OUTDX AL 写入控制字 WAITK MOVDX PORT A DX指向A口MOVAL 00HOUTDX ALMOVDX PORT B DX指向B口INAL DX 输入B口CMPAL 0FFH 各键均未按下JZWAITK 无键按下继续等 MOVCX 16EAHDELAY LOOPDELAY 延时20ms MOVBL 0 送键号初值MOVBH 11111110B 置初始扫描模式MOVCX 8 FNDROW MOVAL BHMOVDX PORT AOUTDX AL 输出行扫描值MOVDX PORT B DX指向B口INAL DX 输入列码CMPAL 0FFH JNEFNDCOL 有键按下查列号ROLBH 01 否 修改扫描初值ADDBL 8 指向下一行键号初值LOOPFNDROW 扫描下一行JMPDONE 8行扫描完 无键按下FNDCOL RORAL 1 查哪一列有键按下JNCRIGHT 查到按下键的列号INCBLJMPFNDCOLRIGHT 按下键的编号在BL中 5

温馨提示

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

评论

0/150

提交评论