微机CH7,可编程接口芯片8255A及应用

第七章可编程外围接口芯片8255A及其应用 7 18255A的工作原理一 8255A的结构二 8255A的控制字及初始化编程三 8255A工作方式和C口状态字7 28255A的举例 教材第九章内容 7 18255A的工作原理 8255A是一种通用的可编程并行I O接口芯片 一般不需附加外部逻辑电路就可直接为CPU与外设之间提供数据通道 通过对它进行编程 可为CPU与外设之间的通信提供无条件 有条件和中断方式的接口电路 因此应用较广泛 8255A综述 1 外形40引脚的芯片 双列直插式封装 一 8255A的结构和功能 8255A的引脚图 管脚小结 1 与外设连接的管脚8255A有三个数据端口 每个端口是8位的 由此与外设相连接的管脚共有24位 A口有八个I O引脚PA7 PA0B口有八个I O引脚PB7 PB0C口有八个I O引脚PC7 PC0 2 与CPU连接的管脚数据线D7 D0 读写控制线RD WR 片选信号CS 端口地址控制线A0和A1 复位线RESET 3 电源线和地线电源线VCC 一般取 5V 电源地线GND 2 内部结构数据端口A B C 其中C口被分成C口上半部分和C口下半部分两个部分 A组和B组控制逻辑 数据总线缓冲器 读 写控制逻辑 8255A与系统的连接示意图 3 各部分功能简介数据端口A B C 可用来和外设传送信息 每个端口8位 通过编程设定其为输入口或输出口 8255数据端口功能表 控制端口D A组和B组控制电路 8位端口 无对外引脚 接收CPU送的控制字 决定A组和B组的工作方式 或对C口的每位执行置位 复位等操作 数据总线缓冲器 D0 D7 由1个8位双向三态缓冲器构成 8255A内各端口通过数据缓冲器与系统总线相连 地址译码与读写控制逻辑根据系统送来的地址信号和控制信号 对数据信息 控制信息和状态信息的传送进行管理 CS 片选信号 低有效 有效时允许8255A与CPU交换信息RD 读信号 低有效 有效时允许CPU从8255A端口中读数据 状态 WR 写信号 低有效 有效时允许CPU将控制字 数据写入8255A RESET 复位信号 高有效 复位后 控制寄存器内容被清零 A口 B口和C口被置成输入方式 A1 A0 端口的选择信号 00 端口A01 端口B10 端口C11 端口D 控制口 8255A的基本操作 8255A的初始化编程 通过输出指令让CPU对8255A控制字寄存器写数据 来设置8255A的初始状态8255A有两类控制字1 方式选择控制字 选择各端口的工作方式及操作类型 输入 输出 2 置位复位控制字 对C端口的任一位进行置位或复位操作 二 8255A的控制字及初始化编程 1 方式选择控制字 通过对8255A的控制口写入置位 复位控制字 可使端口C的任意一个引脚的输出单独置1或清0 2 置位 复位控制字 例1 设8255A的各端口地址为90H 93H 若要求各端口的工作状态如下 应怎样对8255A进行初始化编程 A口 方式0输出 B口 方式0输入 上C口 方式0输入 下C口 方式0输出 分析 控制口地址 93H工作方式控制字为 10001010B即8AH初始化程序片断 MOVAL 8AHOUT93H AL 例2 设一片8255A的口地址为60H 63H 要求从PC5的引脚输出一个正脉冲 分析 先将PC5清零 再将其置1 最后再清零 MOVAL 00001010BOUT63H ALMOVAL 00001011BOUT63H ALMOVAL 00001010BOUT63H AL 思考 例2中若要求输出方波信号 则程序片段为 AGAIN MOVAL 00001011BOUT63H ALCALLDELAY 调用延时子程序MOVAL 00001010BOUT63H ALCALLDELAY 调用延时子程序JMPAGAIN 8255A有3种工作方式 方式0 基本的输入输出方式方式1 选通输入输出方式方式2 双向总线I O方式各端口的工作方式 是通过编程向控制口写入方式选择控制字设置的 A口可工作在方式0 方式1 方式2下 B口 方式0和方式1 C口 方式0或作为A口 B口的状态或控制信号 三 8255A工作方式和C口状态字 1 方式0 称为基本输入 输出工作方式 适用场合 不需要用应答信号的无条件数据传送 如 读一组开关状态 控制一组指示灯方式0的基本功能 具有两个8位口 A口和B口 两个4位口 上口C和下C口 任意端口都可作为输入或输出 但不能同时实现输入及输出 设置为输出口时有锁存能力 设置为输入口时无锁存能力 方式0举例 2 方式1 称为选通输入输出工作方式 适用场合 查询方式或中断方式的数据传送 如 与打印机的接口方式1的主要功能 两个选通的8位数据端口 可输入或输出 每个端口有三条控制线 C口提供 固定指定的 不能用程序改变 若只有一个口工作在方式1 余下的13位可工作在方式0 方式1的两个8位数据口的输入 输出数据都能锁存 1 选通输入方式A口 B口都工作在选通输入方式其端口控制字 状态 联络信号如下图所示 选通输入 输出方式可以分为3种情况 选通信号 缓冲器满信号 中断请求信号 标志位 选通信号 缓冲器满信号 中断请求信号 注意 由于INTEA INTEB无外部引出脚 因此当PC4或PC2脚上出现高电平或低电平信号时 不会改变中断允许触发器的状态 2 选通输出方式A口 B口都工作在选通输出方式其端口控制字 状态 联络信号如下图所示 选通输入 输出方式可以分为3种情况 输出缓冲器满 外设回答信号 2 选通输出方式 续 3 选通输入 输出方式8255A工作于方式1时 允许对A口和B口分别定义 一个端口作输入 另一个端口作输出 选通输入 输出方式可以分为3种情况 3 选通输入 输出方式 续 3 方式2 称为双向总线方式 适用场合 查询方式或中断方式的数据传送 如 在主机和软盘驱动器交换数据时方式2的主要功能 只有A口可以工作于这种方式 在这种方式下 CPU与外设交换数据时 可在单一的8位端口数据线PA7 PA0上进行 既可以通过A口把数据传送到外设 又可以从A口接收从外设送过来的数据 而且输入和输出数据均能锁存 输入和输出过程不能同时进行 注意 输入输出共用一个INTR 有效时 CPU需通过查询PC7 和PC5 判断是输入还是输出引起的中断 4 C口状态字当8255A工作于方式0时 C口各位作输入输出用 当8255A工作于方式1和方式2时 C口产生或接收与外设间的联络信号 此时 读取C口的内容可使编程人员测试或检查外设的状态 用输入指令对C口进行读操作就可读取C口的状态 即 INAL PC口 C口的状态字有以下几种格式 1 方式1状态字输入状态字 输出状态字 D2 D0 D2 D0 2 方式2状态字 方式1举例 例1 在某一系统中 有8个开关K7 K0 要求每隔1S检测它们的通断状态 并随时在发光二极管LED7 LED0上显示出来 要求 开关断开 相应的LED点亮 开关合上 LED熄灭 硬件电路设计图 7 28255A的应用举例 分析 确定各端口地址A口 F0HB口 F2HC口 F4H控制口 F6H控制字 A口工作于方式0输入 B口为方式0输出 C口未用 控制字中与C口对应的位可以被置为0 写入控制端口F6H的控制字为 10010000B要求功能的实现 从A口读入的数据直接输出至B口即可满足要求 参考程序片断 MOVAL 10010000B 控制字OUT0F6H AL 写入控制字LP INAL 0F0H 从A口读入开关状态OUT0F2H AL B口控制LED 指示开关状态CALLDELAY1SJMPLP 思考 若地址大于FFH 则程序应该怎么改 若要 开关断开 相应的LED熄灭 程序怎么改 注意 1 CPU与8255A之间数据传输以BYTE为单位 2 8255A的方式0使用步骤 确定地址 写控制字 初始化 输入输出操作 1 七段LED的工作原理和接口电路 数字 5 例2 数码管与8255A接口举例 十六进制数共阴极的七段显示码表 1 静态显示方式 2 数码管的显示方式 这种方式的共阴极或共阳极点连在一起 接地或接 5V 每一个数码管与一个并行口相连 所以在同一时间内 每个数码管可以显示不同的内容 但每个数码管都需要一个8位的I O口 占用I O太多 成本高 2 动态显示方式 这种方式数码管的数据端与一个I O口并连 而每个数码管的控制端 公共端 分别与另一个I O口的某一位相连 可通过程序控制 使得在某一时间段内只让某个数码管显示 下一时间段内让另一个数码管显示 这样让4个数码管轮流显示 只要轮流的速度快 人眼不会感到闪烁 好像在同时显示 设计一接口电路 要求从8255A的A口输入由8个开关组成的数据信息 用2位16进制数表示 并通过B口输出至数码管显示 要求编写完整的源程序实现数据的输入和输出显示 这里 8255的端口地址为 60H 62H 64H 66H 数码管采用共阴极接法 3 接口电路设计 A2 A1 编程思路 1 建立一个0 F的数码显示表 2 读A口数据 8位 分成低4位和高4位 然后分别到表中查找出对应的数码 通过B口送出 3 由于2个数码管数据端连接的都是B口 所以当想让低位数码管亮时 必须先让高位数码管灭 同样 当想让高位数码管亮时 必须先让低位数码管灭 4 程序设计 DATASEGMENTTABDB3FH 06H 5BH 4FH 66H 6DH 7DH 07HDB7FH 6FH 77H 7CH 39H 5EH 79H 71HPORTAEQU60HPORTBEQU62HPORTCEQU64HCWREQU66HFSZEQU90H 8255A为方式0 A口输入 B口输出 参考程序 C口位控方式输出PC7LEQU00001110B PC7输出低电平PC7HEQU00001111B PC7输出高电平PC6LEQU00001100B PC6输出低电平PC6HEQU00001101B PC6输出高电平DATAENDSCODESEGMENTASSUMEDS DATA CS CODE 参考程序 START MOVAX DATAMOVDS AXMOVAL FSZ 设8255的工作方式OUTCWR ALMOVBX OFFSETTAB 设段选码表首地址S1 INAL PORTA 从8255A口输入数据MOVCL AL 暂存数据ANDAL 0FH 取数据的低4位XLAT 查表 得段选码MOVAH AL 暂存低位显示MOVAL PC6HOUTCWR AL 灭高位数码管 参考程序 MOVAL AHOUTPORTB AL 送至8255B口MOVAL PC7LOUTCWR AL 点亮低位数码管MOVAL CLANDAL 0F0H 取数据高4位MOVCL 4SHRAL CL 高4位移至低4位XLAT 查表得高位数的段选码MOVAH AL 暂存数据MOVAL PC7HOUTCWR AL 灭低位数码管 参考程序 MOVAL AHOUTPORTB AL 送至8255B口MOVAL PC6LOUTCWR AL 点亮高位数码管JMPS1 继续扫描MOVAH 4CHINT21HCODEENDSENDSTART 参考程序 设计CPU 8086 与打印机的接口电路 要求 使用8255A作为接口芯片 并用A口作为输出口 这里 8255A的基地址为 340H 编写完整的源程序 实现将内存某一段单元中的内容送到打印机进行打印 例3 打印机与8255接口举例 1 打印机接口信号并行打印机接口中除8位数据线外 还应有选通 忙碌 应答 出错 缺纸等信号 这些信号有打印机输出的状态信息 也有计算机发出的信息 常用的有 DATA1 DATA8 8位并行数据 输入 STROB 选通信号 低有效 输入 有效时将8位并行数据送到打印机的输入缓冲器中 ACK 应答信号 低有效 输出 有效时 表示数据已被接受 打印机准备接收下一个数据 BUSY 忙信号 高有效 输出 有效时表示打印机不能接收数据下列情况BUSY为高 数据输入期间 打