第 11 章.

Slides:



Advertisements
Similar presentations
第五章 键盘及其接口技术 本章要点: 1 .按键的抖动干扰及其解决方法。 2 .独立式键盘的结构原理及其接口电路。 3 .矩阵式键盘的结构原理及其行扫描法。 4 .编码器及其编码键盘接口电路。 返回总目录.
Advertisements

第五章 微型计算机和外设的数据传输 5.1 为什么用接口电路? 5.2 CPU和I/O设备之间的信号; 5.3 接口部件的I/O端口;
微型计算机原理及应用.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
实验四 利用中规模芯片设计时序电路(二).
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
5.4 顺序脉冲发生器、 三态逻辑和微机总线接口 顺序脉冲发生器 顺序脉冲 计数型 分类 移位型.
第10章 DOS功能调用与BIOS中断调用.
输入/输出及接口 输入/输出的传送方式 中断技术 80x86/Pentium中断系统 8259A可编程中断控制器 中断程序设计
本周实验安排 实验内容:(P231)人名排序的例子。
第7章 常用数字接口电路.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
第三节 CPU与外设间的数据传送方式 CPU与外设的工作速度不一致, 如何使两者高效、可靠地进行数据传送, 是本节讨论的问题。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第六章 输入/输出接口 6.1 输入/输出接口概述 6.2 I/O指令和地址译码 6.3 PC系统总线(放到本章后面详细讲述)
第7章 中断与异常.
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第6章 DMA传输 6.1 DMA传输原理 6.2 DMA控制器8237A A的编程使用 欢迎辞.
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
微型机系统与接口技术复习.
第9章 AT89S52单片机的 I/O扩展 1.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第三章 微机基本系统的设计 第一章 8086程序设计 第二章 MCS-51程序设计 第四章 存贮器与接口 第五章 并行接口
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS PC16450/PC16550
第 14 章 并行通信及其接口电路.
第七章 MCS-51并行口的扩展 MCS51单片机内部有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可外扩的并行口芯片很多,分成2类:不可编程的并行口芯片(74LS3734和74LS245)和可编程的并行口芯片(8255)。 7.1 不可编程并行口芯片的扩展 7.2 可编程并行口芯片的扩展.
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第 9 章 可编程外围接口芯片 8255A 中国科学技术大学 何克东.
第8章 PCH中的常规接口.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月20日.
第七章 可编程并行接口8255A §7.1并行接口的概述 §7.2 可编程并行接口8255A § A的0方式及其应用
第7章 微型机接口技术 可编程定时/计数器 可编程并行接口 串行接口与串行通信(概念) DMA控制器接口(不做要求) 模拟量输入/输出接口.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
第 13 章 中断系统.
CPU结构和功能.
第11章 基本I/O接口 罗文坚 中国科大 计算机学院
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
第7章 I/O接口和总线 7.1 I/O接口 7.2 总线.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
可编程定时计数器.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
(Random Access Memory)
微机原理与接口技术 第6章 并行输入输出接口(8255A)
微机原理及应用 主讲:郑海春.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
组合逻辑电路 ——中规模组合逻辑集成电路.
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第六章 I/O接口 一、I/O接口的功能 第一节 概 述 一、I/O 接口的功能 二、I/O接口的一般结构 第二节 输入输出寻址方式和指令
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
微机原理与接口技术 西安邮电大学计算机学院 杨锐.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
第8章 并行接口芯片 并行接口一般具有两个或两个以上的8位I/O接口。各个口的工作方式可由程序分别确定或改变,使用灵活,便于和各种外部设备连接。因此,又称可编程的外部接口(PPI) 目前各主要微处理器厂商都有自己的PPI产品,但它们的功能基本类似.
Presentation transcript:

第 11 章

教学重点 8255A的工作方式和编程 8255A的应用 简易键盘的扫描程序 LED数码管的多位显示 第11章 并行接口 教学重点 8255A的工作方式和编程 8255A的应用 简易键盘的扫描程序 LED数码管的多位显示

并行数据传输方式 以计算机的字长,通常是8位、16位或32位为传输单位, 一次传送一个字长的数据 适合于外部设备与微机之间进行近距离、大量和快速的 信息交换 例如:微机与并行接口打印机、磁盘驱动器 微机系统中最基本的信息交换方法 例如:系统板上各部件之间,接口电路板上各部件之间

11.1 并行接口电路8255A 具有多种功能的可编程并行接口电路芯片 分3个端口,共24个外设引脚 共三种输入输出工作方式 最基本的接口电路:三态缓冲器和锁存器 与CPU间、与外设间的接口电路:状态寄存器和控制寄存器 还有端口的译码和控制电路、中断控制电路 分3个端口,共24个外设引脚 共三种输入输出工作方式

11.1.1 8255A的内部结构和引脚 数据 总线 缓冲器 内部控制线 内部数据线 D0~D7 A组 控制 端口A 端口C 上部 B组 下部 读写 逻辑 PC0~PC3 PB0~PB7 PC4~PC7 PA0~PA7 RD WR A0 A1 CS RESET

1. 外设数据端口 端口A:PA0~PA7 端口B:PB0~PB7 端口C:PC0~PC7 常作数据端口,功能最强大 常作数据端口 1. 外设数据端口 端口A:PA0~PA7 A组,支持工作方式0、1、2 端口B:PB0~PB7 B组,支持工作方式0、1 端口C:PC0~PC7 仅支持工作方式0 A组控制高4位PC4~PC7 B组控制低4位PC0~PC3 端口A:PA0~PA7 常作数据端口,功能最强大 端口B:PB0~PB7 常作数据端口 端口C:PC0~PC7 可作数据、状态和控制端口 分两个4位,每位可独立操作 控制最灵活,最难掌握

2. 与处理器接口 D0 ~ D7数据线 A0 ~ A1地址线 RD*读信号 WR*写信号 CS*片选信号 RESET复位信号 2. 与处理器接口 D0 ~ D7数据线 A0 ~ A1地址线 RD*读信号 WR*写信号 CS*片选信号 RESET复位信号 CS* A1 A0 I/O地址 读操作RD* 写操作WR* 0 0 0 0 0 1 0 1 0 0 1 1 60H 61H 62H 63H 读端口A 读端口B 读端口C 非法 写端口A 写端口B 写端口C 写控制字

11.1.2 8255A的工作方式 方式0:基本输入输出方式 方式1:选通输入输出方式 方式2:双向选通传送方式 适用于无条件传送和查询方式的接口电路 方式1:选通输入输出方式 适用于查询和中断方式的接口电路 方式2:双向选通传送方式 适用于与双向传送数据的外设

方式0输入时序 data 输入端口 D0~D7 RD CS,A1,A0 请体会这里8255A的数据缓冲作用

8255A对CPU通过它输出给外设的数据进行锁存 方式0输出时序 WR data 输出端口 D0~D7 CS,A1,A0 8255A对CPU通过它输出给外设的数据进行锁存

方式1输入引脚:A端口 数据选通信号 表示外设已经准备好数据 PA7~PA0 PC4 STBA PC5 IBFA 输入缓冲器满信号 INTEA IBFA INTRA STBA 中断允许触发器 输入缓冲器满信号 表示A口已经接收数据 中断请求信号 请求CPU接收数据

方式1需借用端口C用做联络信号 同时还具有中断请求和屏蔽功能 方式1输入引脚:B端口 PC2 PC1 PC0 PB7~PB0 INTEB IBFB INTRB STBB 数据选通信号 表示外设已经准备好数据 输入缓冲器满信号 表示A口已经接收数据 中断请求信号 请求CPU接收数据 中断允许触发器 方式1需借用端口C用做联络信号 同时还具有中断请求和屏蔽功能

方式1输入联络信号 STB*——选通信号,低电平有效 IBF——输入缓冲器满信号,高电平有效 INTR——中断请求信号,高电平有效 由外设提供的输入信号,当其有效时,将输入设备送来 的数据锁存至8255A的输入锁存器 IBF——输入缓冲器满信号,高电平有效 8255A输出的联络信号。当其有效时,表示数据已锁存在 输入锁存器 INTR——中断请求信号,高电平有效 8255A输出的信号,可用于向CPU提出中断请求,要求CPU 读取外设数据

STB*和IBF是外设和8255A间 的一对应答联络信号, 为的是可靠地输入数据 方式1输入时序 data INTR IBF 输入端口 D0~D7 STB RD STB*和IBF是外设和8255A间 的一对应答联络信号, 为的是可靠地输入数据

方式1中断控制 8255A的中断由中断允许触发器INTE控制 置位允许中断,复位禁止中断 对INTE的操作通过写入端口C的对应位实现,INTE触发器 对应端口C的位是作应答联络信号的输入信号的哪一位, 只要对那一位置位/复位就可以控制INTE触发器 选通输入方式下 端口A的INTEA对应PC4 端口B的INTEB对应PC2

方式1输出引脚:A端口 外设响应信号 表示外设已经接收到数据 PA7~PA0 PC6 ACKA PC7 OBFA 输出缓冲器满信号 INTEA OBFA INTRA ACKA 中断允许触发器 输出缓冲器满信号 表示CPU已经输出了数据 中断请求信号 请求CPU再次输出数据

方式1输出引脚:B端口 外设响应信号 表示外设已经接收到数据 PB7~PB0 PC2 ACKB PC1 OBFB 输出缓冲器满信号 INTEB OBFB INTRB ACKB 外设响应信号 表示外设已经接收到数据 输出缓冲器满信号 表示CPU已经输出了数据 中断请求信号 请求CPU再次输出数据 中断允许触发器

端口A的INTEA对应PC6 端口B的INTEB对应PC2 方式1输出联络信号 OBF*——输出缓冲器满信号,低有效 8255A输出给外设的一个控制信号,当其有效时,表示 CPU已把数据输出给指定的端口,外设可以取走 ACK*——响应信号,低有效 外设的响应信号,指示8255A的端口数据已由外设接受 INTR——中断请求信号,高有效 当输出设备已接受数据后,8255A输出此信号向CPU提出 中断请求,要求CPU继续提供数据 端口A的INTEA对应PC6 端口B的INTEB对应PC2

OBF*和ACK*是外设和8255A间 的一对应答联络信号, 为的是可靠地输出数据 方式1输出时序 INTR data 输出端口 D0~D7 WR OBF ACK OBF*和ACK*是外设和8255A间 的一对应答联络信号, 为的是可靠地输出数据

方式2双向方式 方式2将方式1的选通输入输出功能组合成一个双 向数据端口,可以发送数据和接收数据 只有端口A可以工作于方式2,需要利用端口C的 5个信号线,其作用与方式1相同 方式2的数据输入过程与方式1的输入方式一样 方式2的数据输出过程与方式1的输出方式有一点 不同:数据输出时8255A不是在OBF*有效时向 外设输出数据,而是在外设提供响应信号ACK* 时才送出数据

方式2双向引脚 PA7~PA0 用PC6设置INTE1(输出) PC6 ACKA 用PC4设置INTE2(输入) 输入和输出中断通过 PC7 OBFA INTRA ACKA PC4 PC5 IBFA STBA INTE2 用PC6设置INTE1(输出) 用PC4设置INTE2(输入) 输入和输出中断通过 或门输出INTRA信号

方式2双向时序 data-out INTR data-in PA0~PA7 D0~D7 IBF WR OBF ACK STB RD

11.1.3 8255A的编程 初始化编程:一个方式控制字 工作过程中:通过数据端口对外设数据进行读写 采用控制I/O地址:A1A0=11 工作过程中:通过数据端口对外设数据进行读写 数据读写利用端口A、B和C的I/O地址,A1A0依次等于00、01、10 IBM PC/XT机上,端口A、B、C和控制端口的I/O地址 为60H、61H、62H和63H

1. 写入方式控制字:控制字格式

1. 写入方式控制字:示例 要求: 方式控制字:10110001B或B1H 初始化的程序段: 1. 写入方式控制字:示例 要求: A端口:方式1输入 C端口上半部:输出,C口下半部:输入 B端口:方式0输出 方式控制字:10110001B或B1H 初始化的程序段: mov dx,0fffeh ;假设控制端口为FFFEH mov al,0b1h ;方式控制字 out dx,al ;送到控制端口

2. 读写数据端口 初始化编程后: 8255A具有锁存输出数据的能力 当数据端口作为输入接口时,执行输入IN指令将从输入设备得到外设数据 2. 读写数据端口 初始化编程后: 当数据端口作为输入接口时,执行输入IN指令将从输入设备得到外设数据 当数据端口作为输出接口时,执行输出OUT指令将把CPU的数据送给输出设备 8255A具有锁存输出数据的能力 对输出方式的端口同样可以输入 不是读取外设数据 读取的是上次CPU给外设的数据

2. 读写数据端口:示例 利用8255A的输出锁存能力,可实现按位输出控制 对输出端口B的PB7位置位的程序段: 2. 读写数据端口:示例 利用8255A的输出锁存能力,可实现按位输出控制 对输出端口B的PB7位置位的程序段: mov dx,0fffah ;B端口假设为FFFAH in al,dx ;读出B端口原输出内容 or al,80h ;使PB7=1 out dx,al ;输出新的内容

3. 读写端口C:归纳1 在控制上,C端口上半部和A端口编为A组,C端口下半部和B端口编为B组

3. 读写端口C:归纳2 当A和B端口工作在方式 1或方式2时,C端口的 部分或全部引脚将被征 用 其余引脚仍可设定工作在方式0

3. 读写端口C:归纳3 对端口C的数据输出有两种办法 通过端口C的I/O地址:向C端口直接写入字节数据。这 一数据被写进C端口的输出锁存器,并从输出引脚输出, 但对设置为输入的引脚无效 通过控制端口:向C端口写入位控字,使C端口的某个引 脚输出1或0,或置位复位内部的中断允许触发器

端口C的位控制字 位控制字写入控制端口 特别便于置位复位内部中断允许 触发器INTE

3. 读写端口C:归纳4 读取的C端口数据有两种情况 未被A和B端口征用的引脚:将从定义为输入的端口读到 引脚输入信息;将从定义为输出的端口读到输出锁存器 中的信息 被A和B端口征用作为联络线的引脚:将读到反映8255A 状态的状态字

端口C的状态字 A组 B组 方式1输入 方式1输出 方式2双向 D7 D6 D5 D4 D3 D2 D1 D0 I/O IBFA INTEA INTRA INTEB IBFB INTRB 方式1输出 OBFA OBFB 方式2双向 INTE1 INTE2 ×

11.2 8255A的应用 作为通用的并行接口电路芯片,825A具有广泛 的应用 应用在IBM PC/XT微机上 应用于打印机接口电路 连接简易键盘 驱动LED数码管 ……

11.2.1 8255A在IBM PC/XT上的应用 工作在基本输入/输出方式0 系统的初始化编程: mov al,10011001b ;方式控制字99H out 63h,al

打印机接口的信号与时序 主机把数据送给引脚DATA0~DATA7 同时送出数据选通信号STROBE* 打印机在BUSY信号线上发出忙信号 打印机处理好输入的数据时 撤消忙信号 同时又送出一个响应信号ACK* BUSY DATA0~7 ACK STROBE

11.2.2 用8255A方式0与打印机接口 BUSY DATA0~7 8255A PC7 PC2 PA0~PA7 打印机 STROBE

8255A的初始化 例11.1 mov dx,0fffeh ;控制端口地址:FFFEH mov al,10000001B out dx,al ;A端口方式0输出,C端口上输出、下输入 mov al,00001111B ;端口C的复位置位控制字,使PC7=1 例11.1

打印子程序:查询 例11.1 printc proc push ax push dx prn: mov dx,0fffch ;读取端口C in al,dx ;查询打印机状态 and al,04h ;PC2=BUSY=0? jnz prn ;PC2=1,打印机忙,则循环等待 例11.1

打印子程序:输出 例11.1 mov dx,0fff8h ;PC2=0,打印机不忙,则输出数据 mov al,ah out dx,al ;将打印数据从端口A输出 例11.1

打印子程序:打印 例11.1 mov dx,0fffeh ;从PC7送出控制低脉冲 mov al,00001110B ;置STROBE*=0 out dx,al nop ;产生一定宽度的低电平 nop mov al,00001111B ;置=1 ;最终,STROBE*产生低脉冲信号 例11.1

打印子程序:返回 pop dx pop ax ret printc endp 例11.1

11.2.3 用8255A方式1与打印机接口 1000pf 2K 15 3 2 14 4 1 LS123 单稳 电路 +5V DATA0~7 PC6 INTR PC3 PC7 PA0~PA7 打印机 ACK OBF STROBE

8255A方式1与打印机接口时序配合 PA0~PA7 (DATA0~7) ACK OBF STROBE 方式1时序 打印机时序

8255A的初始化 例11.2 mov dx,0fffeh mov al,0a0h out dx,al mov al,0ch ;使INTEA(PC6)为0,禁止中断 …… mov cx,counter ;打印字节数送CX mov bx,offset buffer ;取字符串首地址 call prints ;调用打印子程序 例11.2

打印子程序:输出 例11.2 prints proc push ax ;保护寄存器 push dx print1: mov al,[bx] ;取一个数据 mov dx,0fff8h out dx,al ;从端口A输出 例11.2

打印子程序:查询 例11.2 mov dx,0fffch print2: in al,dx test al,80h ;检测(PC7)为1否? jz print2 ;为0,说明打印机没有响应,继续检测 例11.2

打印子程序:返回 例11.2 inc bx ;为1,说明打印机已接受数据 loop print1 ;准备取下一个数据输出 pop dx ;打印结束,恢复寄存器 pop ax ret ;返回 prints endp 例11.2

11.2.4 双机并行通信接口 PA0~PA7 PC4 PC0 8255A 甲方(发送) PC7 PC6 已方(接收)

甲机的初始化 例11.3 mov dx,0fffeh mov al,0a0h out dx,al ;工作方式字:端口A方式1输出 mov al,0dh ;使PC6(INTEA)=1,允许中断 例11.3

甲机发送程序 例11.3 trsmt: mov dx,0fffch in al,dx ;查询PC3(INTRA)=1? and al,08h jz trsmt mov dx,0fff8h ;发送数据 mov al,ah out dx,al 例11.3

乙机的初始化 例11.3 mov dx,0fffeh mov al,98h out dx,al ;工作方式字:端口A方式0输入 ;使PC0(ACK*)=1,因尚未收到数据 例11.3

乙机:查询接收 例11.3 receive: mov dx,0fffch in al,dx ;查询PC4(OBF*)=0? and al,10h jnz receive mov dx,0fff8h ;接收数据 mov ah,al 例11.3

乙机:接收响应 例11.3 mov dx,0fffeh mov al,00h ;使PC0(ACK*)=0 out dx,al nop ;适当延时,产生一定宽度的低脉冲 mov al,01h ;使PC0(ACK*)=1 out dx,al ;产生低脉冲ACK*信号 例11.3

请在对比过程中,掌握例题、习题和完成实验要求 要求⑴类似习题11.8 要求⑵对应例题11.2 实验5 并行接口实验 请在对比过程中,掌握例题、习题和完成实验要求 要求⑴类似习题11.8 要求⑵对应例题11.2 提示

11.3 键盘及其接口 键盘是微机系统最常使用的输入设备 小键盘:适用于单板机或以微处理器为基础的仪器,实 现数据、地址、命令及指令等的输入 11.3 键盘及其接口 键盘是微机系统最常使用的输入设备 小键盘:适用于单板机或以微处理器为基础的仪器,实 现数据、地址、命令及指令等的输入 独立键盘:通过5芯电缆与PC微机主机连接

11.3.1 简易键盘的工作原理 最简单的线性结构键盘 每一个引脚连接一个键 输入0/1反映健是否高低 +5V

11.3.1 简易键盘的工作原理 常用的矩阵结构键盘 检 测 线 控制线 +5V 每行连接一个引脚 每列连接一个引脚 11.3.1 简易键盘的工作原理 常用的矩阵结构键盘 每行连接一个引脚 每列连接一个引脚 利用控制线为低、 读取检测线来识别闭合键 +5V 控制线 检 测 线

1. 扫描法 先使第0行接低电平,其余行为高电平,然后看 第0行是否有键闭合(通过检查列线电位实现) 1. 扫描法 先使第0行接低电平,其余行为高电平,然后看 第0行是否有键闭合(通过检查列线电位实现) 此后,再将第1行接地,然后检测列线是否有变 为低电位的线。如此往下一行一行地扫描,直 到最后一行 在扫描过程中,当发现某一行有键闭合时,便 在扫描中途退出 通过组合行线和列线可识别此刻按下的是哪一 键

第1段:是否有键按下 键盘扫描程序 key1: mov al,00 mov dx,rowport out dx,al ;使所有行线为低电平 mov dx,colport in al,dx ;读取列值 cmp al,0ffh ;判定是否有列线为低电平 jz key1 ;无闭合键,循环等待 call delay ;有,延迟20ms清除抖动 键盘扫描程序

第2段:识别按键(扫描) 键盘扫描程序 mov cx,8 ;行数送CX mov ah,0feh ;扫描初值送AH key2: mov al,ah mov dx,rowport out dx,al ;输出行值(扫描值) mov dx,colport in al,dx ;读进列值 键盘扫描程序

第2段:识别按键(判断) 键盘扫描程序 cmp al,0ffh ;判断有无低电平的列线 jnz key3 ;有,则转下一步处理 rol ah,1 ;无,则移位扫描值 loop key2 ;准备下一行扫描 jmp key1 ;所有行都没有键按下,则返回继续检测 key3: …… ;此时,al=列值,ah=行值 键盘扫描程序

条件:连接行线和列线的接口电路 必须支持动态改变输入、输出方式 2. 反转法 首先,将行线作为控制线接一个输出端口,将 列线作为检测线接一个输入端口 CPU通过输出端口将行线(控制线)全部设置为低电平, 然后从输入端口读取列线(检测线) 然后,将行线和列线的作用互换,即将列线作 为控制线接输出端口,行线作为检测线接输入 端口 将刚才读得的列值从列线所接端口输出,再读取行线的 输入值 这样,当一个键被按下时,必定可以读得一对 唯一的行值和列值 条件:连接行线和列线的接口电路 必须支持动态改变输入、输出方式

第1段:是否有键按下 键盘扫描程序 …… ;设置行线接输出端口,列线接输入端口 key2: mov al,00 mov dx,rowport out dx,al ;设置行线全为低 mov dx,colport in al,dx ;读取列值 cmp al,0ffh jz key2 ;无闭合键,循环等待 push ax ;有闭合键,保存列值 push ax 键盘扫描程序

第2段:识别按键(反转法) 键盘扫描程序 …… ;设置行线接输入端口,列线接输出端 mov dx,colport pop ax out dx,al ;输出列值 mov dx,rowport in al,dx ;读取行值 pop bx ;组合行列值 mov ah,bl ;此时,al=行值,ah=列值 键盘扫描程序

行列值表和键代码表 键盘扫描程序 ;键盘的行列值表 table dw 0fefeh ;键0的行列值(键值) dw 0fdfeh ;键1的行列值 dw 0fbfeh ;键2的行列值 …… ;其他键的行列值 ;键盘的键代码表 char db …… ;键0的代码值 db …… ;键1的代码值 …… ;其他键的代码值 键盘扫描程序

第3段:查找键代码 键盘扫描程序 mov si,offset table mov di,offset char mov cx,64 ;CX=键的个数 key3: cmp ax,[si] ;与键值比较 jz key4 ;相同,说明查到 inc si ;不相同,继续比较 inc si inc di loop key3 jmp key1 ;全部比较完,仍无相同,说明是重键 键盘扫描程序

第4段:等待按键释放 键盘扫描程序 key4: mov al,[di] ;获取键代码送AL …… ;判断按键是否释放,没有则等待 call delay ;按键释放,延时消除抖动 …… ;后续处理 键盘扫描程序

3. 抖动和重健问题 机械按键存在抖动现象 重键指两个或多个键同时闭合 3. 抖动和重健问题 机械按键存在抖动现象 当按下或释放一个键时,往往会出现按键在闭合位置和 断开位置之间跳几下才稳定到闭合状态 抖动的持续时间通常不大于10ms 采用硬件消抖电路或软件延时方法解决 重键指两个或多个键同时闭合 出现重键时,读取的键值必然出现有一个以上的0 是否给予识别和识别哪一个键

重健问题的处理 简单情况:不予识别,认为是错误的按键 通常情况:只承认先识别出来的键 正常的组合键:都识别出来 连锁法:直到所有键都释放后,读入下一个键 巡回法:等被识别的键释放以后,就可以对其他闭合键作识别,而不必等待全部键 释放 正常的组合键:都识别出来

11.3.2 PC机键盘的工作原理 DB PB6 PB7 PA IRQ1 T1 P10 P21 P11 P22 P20 4 GND 1 CLOCK 2 DATA 5 +5V 3 RESET PC机键盘 系统板 8048 8255A 8259A LS322 串 并 转 换 器 键 盘 阵 列 按键 选通

接通扫描码反映该键在键盘上的位置 断开扫描码(接通扫描码最高位置1) =接通扫描码+80H 1. PC机键盘的工作过程 键盘电路正常工作时不断地扫描键盘矩阵 有按键,则确定按键位置之后以串行数据形式发送给系 统板键盘接口电路 键按下时,发送该键的接通扫描码 键松开时,发送该键的断开扫描码 若一直按住某键,则以拍发速率(每秒2~30次)连续 发送该键的接通扫描码 接通扫描码反映该键在键盘上的位置 断开扫描码(接通扫描码最高位置1) =接通扫描码+80H

2. 键盘接口电路的工作过程 接收一个串行形式字符以后,进行串并转换 然后产生键盘中断IRQ1请求,等待读取键盘数据 2. 键盘接口电路的工作过程 接收一个串行形式字符以后,进行串并转换 然后产生键盘中断IRQ1请求,等待读取键盘数据 CPU响应中断,则进入09H键盘中断服务程序: ① 读取键盘扫描码:用IN AL,60H即可 ② 响应键盘:系统使PB7=1 ③ 允许键盘工作:系统使PB7=0 ④ 处理键盘数据 ⑤ 给8259A中断结束EOI命令,中断返回

3. PC机键盘中断服务程序 09H号中断服务程序(kbint过程) 键盘I/O功能程序(kbget子程序) 功能调用(主程序) 完成常规的操作 处理键盘数据:将获取的扫描码通过查表转换为对应的ASCII码送缓冲区。对于不能 显示的按键,则转换为0,且不再送至缓冲区 键盘I/O功能程序(kbget子程序) 从缓冲区中读取转换后的ASCII码 功能调用(主程序) 循环显示键入的字符

键盘缓冲区 中断服务程序与子程序之间传递参数 先进先出循环队列 队列空 进队列 出队列 队列满 buffer 1 2 9 队列始端 队列末端

键盘缓冲区 例11.4 buffer db 10 dup(0) bufptr1 dw 0 ;队列头指针 1 2 9 bufptr1 队列始端 bufptr2 队列末端 例11.4

键盘代码表 例11.4 scantb db 0,1,’1234567890-=’,08h ;键盘第1排的按键,从ESC到退格 db 0,’qwertyuiop[]’,0dh ;键盘第2排的按键,从Tab到回车 …… db 0,0,’789-456+1230.’ ;右边小键盘,从Num Lock到Del 例11.4

设置中断向量1 例11.4 mov ax,3509h int 21h push es push bx ;保存09H号原中断向量 cli ;关中断 push ds ;设置09H号新中断向量 mov ax,seg kbint mov ds,ax mov dx,offset kbint 例11.4

设置中断向量2 例11.4 mov ax,2509h int 21h pop ds in al,21h ;允许IRQ1中断,其他不变 push ax and al,0fdh out 21h,al sti ;开中断 例11.4

调用并显示 例11.4 start1: call kbget ;获取按键的ASCII码 cmp al,1 jz start2 ;是ESC键,则退出 push ax ;保护字符 mov dl,al ;显示字符 mov ah,2 int 21h pop ax ;恢复字符 例11.4

处理回车符 例11.4 cmp al,0dh ;该字符是回车符吗? jnz start1 ;不是,取下一个按键字符 mov dl,0ah ;是回车符,则再进行换行 mov ah,2 int 21h jmp start1 ;继续取字符 例11.4

恢复中断向量 例11.4 start2: cli pop ax out 21h,al pop dx pop ds mov ax,2509h int 21h sti mov ax,4c00h ;返回DOS 例11.4

子程序:判断缓冲区空否 例11.4 kbget proc kbget1: push bx ;保护BX cli mov bx,bufptr1 ;取头指针 cmp bx,bufptr2 ;与尾指针相等否? jnz kbget2 ;不相等,说明缓冲区有字符,转移 sti ;相等,说明缓冲区空 pop bx jmp kbget1 ;等待缓冲区有字符 例11.4

子程序:获取按键字符 例11.4 kbget2: mov al,buffer[bx] ;取字符送AL inc bx ;队列头指针增量 cmp bx,10 ;是否指向队列末端 jc kbget3 ;没有,转移 mov bx,0 ;指针指向队列末端,则循环,指向始端 kbget3: mov bufptr1,bx ;设定新队列头指针 sti pop bx ret kbget endp 例11.4

中断服务程序:响应键盘 例11.4 kbint proc sti ;开中断 push ax ;保护寄存器 push bx in al,60h ;读取键盘扫描码 push ax in al,61h ;使PB7=1,响应键盘 or al,80h out 61h,al and al,7fh ;使PB7=0,允许键盘 例11.4

中断服务程序:数据处理 例11.4 test al,80h ;是断开扫描码? jnz kbint2 ;是,则退出 pop ax test al,80h ;是断开扫描码? jnz kbint2 ;是,则退出 mov bx,offset scantb ;是接通扫描码,取表首地址 xlat ;将扫描码转换成ASCII码 cmp al,0 ;是否为合法的ASCII码? jz kbint2 ;不是,则退出 例11.4

中断服务程序:指针增量 例11.4 mov bx,bufptr2 mov buffer[bx],al ;将ASCII码存入缓冲区队列尾 inc bx ;队列尾指针增量 cmp bx,10 ;是否指向队列末端? jc kbint1 ;没有,转移 mov bx,0 ;指针指向队列末端,则循环,指向始端 例11.4

中断服务程序:判断缓冲区满否 例11.4 kbint1: cmp bx,bufptr1 jz kbint2 ;若队列满,则退出 mov bufptr2,bx ;队列不满,设置新的队列尾指针 buffer 41H 31H 1 32H 2 39H 9 队列始端 bufptr2 bufptr1 队列末端 例11.4

中断服务程序:中断返回 例11.4 kbint2: mov al,20h ;向8259A发送普通中断结束命令 out 20h,al pop bx ;恢复寄存器 pop ax iret ;中断返回 kbint endp 例11.4

认真阅读教材中扫描法和反转法识别按键的程序段 延时子程序也可以采用实时时钟的硬件延时,它更精 确 延时子程序可以采用软件延时程序 实验6 小键盘实验 认真阅读教材中扫描法和反转法识别按键的程序段 延时子程序也可以采用实时时钟的硬件延时,它更精 确 延时子程序可以采用软件延时程序 提示

11.4 LED数码管及其接口 发光二极管LED是最简单的显示设备 由7段LED就可以组成的LED数码管

1. LED数码管的工作原理 主要部分是7段发光管 顺时针分别称为a、b、c、d、e、f、g 有的产品还附带有一个小数点h 通过7个发光段的不同组合 主要显示0~9 也可显示A~F(16进制数) 还可显示个别特殊字符:-、P h g f e d c b a

LED数码管的结构 共阳极 共阴极 阳极 +5V a b c d e f g h 阴极 a b c d e f g h

2. 单个LED数码管的显示 a PA0 b PA1 c 驱 PA2 d 动 PA3 e 电 PA4 f 路 PA5 g PA6 h PA7

单个数码管的显示 软件译码 LEDtb db 3fh,06h,5bh,…… ;显示代码表 …… mov al,1 ;AL←要显示的数字 mov bx,offset LEDtb xlat ;换码:AL←DS:[BX+AL] mov dx,port out dx,al ;输出显示 软件译码

3. 多个LED数码管的显示 8个数码管:用2个8位输出端口控制 硬件上用公用的驱动电路来驱动各数码管 软件上用扫描方法实现数码显示

位控制端口电路 D7 D6 D5 D4 D3 D2 D1 D0 阳极 位0 位1 位2 D0~D7 位控制 反 相 寄 存 驱 动 bitport, IOW

位控制端口作用 控制哪个(位)数码管显示 当位控制端口的控制码某位为低电平时,经反相驱动, 便在相应数码管的阳极加上了高电平,这个数码管就 可以显示数据 位控制:Di=0,相应位发光 D7 D6 D5 D4 D3 D2 D1 D0 位7 位6 位5 位4 位3 位2 位1 位0

段控制端口电路 位0 阳极 位1 位2 a b c d e f g h … … D0 D1 D2 D3 D4 D5 D6 D7 正 相 寄 存 驱 动 D0~D7 段控制 segport, IOW

通过位、段控制端口的共同作用 才能确定哪个数码管显示什么数码 段控制端口作用 控制哪个段显示,决定具体显示什么数码 段控制端口送出显示代码到数码管相应段 此端口由8个数码管共用 通过位、段控制端口的共同作用 才能确定哪个数码管显示什么数码 段控制:Di=0,相应段发光 D7 D6 D5 D4 D3 D2 D1 D0 h g f e d c b a

数码缓冲区 例11.5 ;数据段 LEDdt db 8 dup(0) ;数码缓冲区 ;主程序 mov si,offset LEDdt call LEDdisp ;调用显示子程序 例11.5

获取显示代码 例11.5 LEDdisp proc push ax push bx push dx mov bx,offset LEDtb mov ah,0feh ;指向最左边数码管 LED1: lodsb ;取出要显示的数字 xlat cs:LEDtb ;得到显示代码:AL←CS:[BX+AL] 例11.5

数码显示 例11.5 mov dx,segport ;segport为段控制端口 out dx,al ;送出段码 mov al,ah ;取出位显示代码 mov dx,bitport ;bitport为位控制端口 out dx,al ;送出位码 call delay ;实现数码管延时显示 例11.5

显示下位数码 例11.5 rol ah,1 ;指向下一个数码管 cmp ah,0feh ;最右边的数码管? jnz LED1 ;显示下一个数字 pop dx pop bx pop ax ret ;8位数码管都显示 LEDtb db 0c0h,0f9h, …… LEDdisp endp 例11.5

软件延时 例11.5 timer = 10 ;延时常量 delay proc push bx push cx mov bx,timer delay1: xor cx,cx delay2: loop delay2 ;内循环:216次循环 例11.5

通过控制重复频率和延时时间 就可以得到各种显示效果 软件延时 dec bx jnz delay1 pop cx pop bx ret delay endp 通过控制重复频率和延时时间 就可以得到各种显示效果 例11.5

请认真阅读教材中8位数码管显示子程序 延时子程序建议采用实时时钟的硬件延时,它更精确, 也便于控制时间 延时子程序可以采用软件延时程序 实验7 LED数码管显示实验 请认真阅读教材中8位数码管显示子程序 延时子程序建议采用实时时钟的硬件延时,它更精确, 也便于控制时间 延时子程序可以采用软件延时程序 提示

11.5 并行打印机接口 一般采用Centronics标准接口或其简化接口 Centronics接口是的一个并行接口协议 11.5 并行打印机接口 一般采用Centronics标准接口或其简化接口 Centronics接口是的一个并行接口协议 这个协议规定了36脚簧式插头座和信号含义 其中前11条线是关键信号,他们是8条数据线、3 条联络线(选通、响应和打印机忙) 还有一些特殊控制线、状态线 PC系列机的并行打印机接口是一个25针插口

1. 控制打印机的输出信号 SLCTIN*选择输入——相当于打印机选中信号 INIT*初始化——使打印机被复位成初始状态 1. 控制打印机的输出信号 SLCTIN*选择输入——相当于打印机选中信号 INIT*初始化——使打印机被复位成初始状态 AUTOFEEDXT*自动走纸——使打印机打印后 自动走纸一行 STROBE*选通——用于使打印机接收数据的选 通信号。负脉冲的宽度在接收端应大于0.5s, 数据才可靠地存入打印机数据缓冲区

2. 反映打印机状态的输入信号 BUSY忙——表示打印机不能接收数据 2. 反映打印机状态的输入信号 BUSY忙——表示打印机不能接收数据 ACK*响应——打印机接收一个数据字节后就回 送一个响应的负脉冲信号(脉宽约为5s),表 示打印机已准备好接收新数据 PE纸用完——说明打印机无纸 SLCT选择——表示处于联机选中状态 ERROR*错误——当打印机处于无纸、脱机或错 误状态之一时,这个信号变为低电平

3. 输出数据线 打印时序 DATA0~DATA7——8位并行数据信号线 打印数据通过它们送至打印机 3. 输出数据线 DATA0~DATA7——8位并行数据信号线 打印数据通过它们送至打印机 8位数据的可靠输出通过选通STROBE*、响应ACK*和 忙BUSY三个联络信号控制 打印时序

打印机时序 BUSY DATA0~7 ACK STROBE

第11章教学要求 2. 掌握8255A的各种工作方式、编程及方式0/1的应用 1. 掌握8255A的结构特点和引脚功能 3. 理解简易键盘的工作原理、抖动和重键问题及解决方法 4. 掌握键盘扫描程序(扫描法、行反转法)的编写

第11章教学要求(续) 习题11(第 274 页)—— 6. 掌握LED数码管的工作原理和多位显示方法 5. 了解PC机键盘的工作原理 7. 了解并行打印机接口的引脚定义和接口时序 习题11(第 274 页)—— 11.4 11.7 11.8 11.10 11.11 11.15