第11章 基本I/O接口 罗文坚 中国科大 计算机学院 http://staff.ustc.edu.cn/~wjluo/mcps/

Slides:



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

第五章 微型计算机和外设的数据传输 5.1 为什么用接口电路? 5.2 CPU和I/O设备之间的信号; 5.3 接口部件的I/O端口;
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
实验四 利用中规模芯片设计时序电路(二).
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
5.4 顺序脉冲发生器、 三态逻辑和微机总线接口 顺序脉冲发生器 顺序脉冲 计数型 分类 移位型.
计算机基础知识 丁家营镇九年制学校 徐中先.
第五章 总线 及其形成 本节课之前,大家学习了:
第一章 绪论.
第7章 常用数字接口电路.
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
第三节 CPU与外设间的数据传送方式 CPU与外设的工作速度不一致, 如何使两者高效、可靠地进行数据传送, 是本节讨论的问题。
第 11 章.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第六章 输入/输出接口 6.1 输入/输出接口概述 6.2 I/O指令和地址译码 6.3 PC系统总线(放到本章后面详细讲述)
第八章 数据通信.
第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日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
微型机系统与接口技术复习.
第9章 AT89S52单片机的 I/O扩展 1.
第5章 输入输出与接口技术.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第三章 微机基本系统的设计 第一章 8086程序设计 第二章 MCS-51程序设计 第四章 存贮器与接口 第五章 并行接口
第 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方式及其应用
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
第7章 微型机接口技术 可编程定时/计数器 可编程并行接口 串行接口与串行通信(概念) DMA控制器接口(不做要求) 模拟量输入/输出接口.
第二章 8086/8088系统结构 主要内容 8086/8088微处理器的内部结构 8086/8088 CPU 的引脚与功能
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
逆向工程-汇编语言
CPU结构和功能.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第7章 I/O接口和总线 7.1 I/O接口 7.2 总线.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第九章 微处理器外部结构和总线操作时序.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
可编程定时计数器.
计算机组成原理 课程设计.
(Random Access Memory)
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
微机原理与接口技术 第6章 并行输入输出接口(8255A)
微机原理及应用 主讲:郑海春.
第三章 MCS 51的硬件结构.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
实验五 MSI组合逻辑功 能部件的应用与测试
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
第六章 I/O接口 一、I/O接口的功能 第一节 概 述 一、I/O 接口的功能 二、I/O接口的一般结构 第二节 输入输出寻址方式和指令
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
信号发生电路 -非正弦波发生电路.
微机原理与接口技术 西安邮电大学计算机学院 杨锐.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
第8章 并行接口芯片 并行接口一般具有两个或两个以上的8位I/O接口。各个口的工作方式可由程序分别确定或改变,使用灵活,便于和各种外部设备连接。因此,又称可编程的外部接口(PPI) 目前各主要微处理器厂商都有自己的PPI产品,但它们的功能基本类似.
工业机器人入门使用教程 ESTUN机器人 主讲人:李老师
DSP技术与应用 电子与信息技术系.
Presentation transcript:

第11章 基本I/O接口 罗文坚 中国科大 计算机学院 http://staff.ustc.edu.cn/~wjluo/mcps/

本章内容 I/O接口概述 I/O端口地址译码 可编程外围设备接口 8254可编程间隔定时器 16550可编程通信接口 模/数转换器与数/模转换器

I/O接口概述 I/O指令 独立编址I/O和存储器映像I/O PC机I/O映像 基本输入输出接口 握手 关于接口电路的注释

I/O指令 I/O设备与累加器(AL、AX、EAX)之间传送数据: IN,OUT指令。 I/O设备与存储器之间传送数据: INS,INSB,INSW,INSD指令。 OUTS,OUTSB,OUTSW,OUTSD指令。 INS和OUTS指令前可以加REP前缀。 除8086/8088外,Intel微处理器都支持INS/OUTS。 Pentium4和Core2的64位模式下,并没有64位的I/O指令。

I/O指令 I/O端口的位宽是8位。 任意两个8位的连续编址端口是一个16位的端口。 任意四个8位的连续编址端口是一个32位的端口。 例,以字的方式访问端口100H,实际上就是访问了100H和101H两个端口。 端口100H包含数据的低8位,端口101H包含数据的高8位。

I/O指令 与存储器类似,16位端口地址应当对齐到偶地址(0,2,4,……),32位端口地址应当对齐到4的倍数(0,4,8,……)。 CPU支持非对齐端口的读写,但要增加额外的总线周期。

独立编址I/O和存储器映像I/O 有两种不同的方法连接I/O与微处理器: 独立编址I/O(Isolated I/O) 存储器映像I/O(Memory-mapped I/O)

独立编址I/O 独立编址I/O:I/O端口和存储器的地址空间相隔离。 优点: 缺点: 存储器同I/O端口的操作指令不同,程序比较清晰; I/O与微处理器之间传送的数据必须用IN、OUT、INS、OUTS指令存取。 独立编址、统一编址 8086/8088的独立编址I/O

存储器映像I/O 存储器映像I/O:存储器映像I/O设备被视为存储器映像中的一个存储单元。不IN、OUT、INS、OUTS使用指令。 优点: IORC#和IOWC#信号在存储器映像I/O系统中不起作用,可减少译码所需电路的数量。 缺点: 一部分存储器被用作I/O映像,减少了可用存储器的数量。

PC机I/O映像 PC机的部分I/O映像用于专用功能。 端口0000H~03FFH之间的I/O空间通常留给计算机系统和ISA总线。 端口0400H~FFFFH之间的I/O空间通常给用户应用、主板功能及PCI总线。 80287算术运算协处理器使用I/O地址00F8H~00FFH进行通信。 80386~Core2使用I/O端口800000F8H~800000FFH与协处理器通信。

基本输入输出接口 基本输入设备:一组三态缓冲器。 该基本输入电路并不是可有可无的。只要输入数据接到微处理器上,就必须有此电路。 有时,它作为独立的电路出现,有时被包含在一个可编程I/O设备中。

基本输入输出接口 基本输出设备:一组数据锁存器。 通常,必须为某个外部设备保持数据。 有时,它作为独立的电路出现,有时被包含在I/O设备内部。 74LS374是八D触发器(三态同相),74LS373是八D锁存器(三态同相)。 触发器对时钟脉冲边沿(上升或下降)敏感,在边沿来临时变化状态;锁存器对时钟脉冲电平(持续时间)敏感,在一持续电平期间都运作。

握手 许多I/O设备接收或发送信息的速度比CPU慢很多。 此时,常用的I/O控制方法为握手(handshaking)或查询(polling),以使得I/O设备与CPU同步。 例,打印机与微处理器之间的数据通信。 数据通过数据线(D7~D0)传送;BUSY指示打印机忙;STB#是时钟脉冲,用于发送数据给打印机打印。

握手 例,打印机与微处理器之间的数据通信。 一个打印BL中ASCII内容的汇编语言程序。 PRINT PROC NEAR .REPEAT IN AL, BUSY;测试忙标志 TEST AL, BUSY_BIT .UNTIL ZERO MOV AL, BL OUT PRINTER, AL;把数据送到打印机 RET PRINT ENDP

关于接口电路的注释 输入设备:电平转换 如果输入设备是TTL或与TTL兼容的电路,可与微处理器及其接口部件相连。 TTL电平的逻辑0为0.0~0.8V,逻辑1为2.0~5.0V。 一个开关型设备要用作TTL兼容的输入设备,需做一些调整。 例,将一个单刀单掷开关作为TLL设备连接。 上拉下拉电阻的主要作用是在电路驱动器关闭时给线路(节点)以一个固定的电平。 上拉电阻的标准范围通常在1K~10K。

关于接口电路的注释 输入设备:消除抖动 机械开关闭合时,其触点会自然反跳(抖动)。为防止抖动,需要增加去抖动电路。

关于接口电路的注释 输出设备:在连接任何输出设备之前,必须了解来自微处理器或TTL接口部件的电压和电流是多少。 例,将一个简单的LED与微处理器外围引脚相连。 使用晶体管 使用反相器

关于接口电路的注释 例,将一个12V直流电机与微处理器相连,且电机电流为1A。 采用达林顿复合晶体管将直流电机与系统相连。

本章内容 I/O接口概述 I/O端口地址译码 可编程外围设备接口 8254可编程间隔定时器 16550可编程通信接口 模/数转换器与数/模转换器

I/O端口地址译码 I/O端口地址译码与存储器地址译码非常相似。 如果是存储器映像的I/O设备,则其地址译码方式与存储器的译码方式完全相同。 地址引脚数目不同。 使用IORC#和IOWC#激活I/O设备执行一次读写操作。早期CPU中,使用IO/M#=1与RD#或WR#,目前的CPU使用M/IO=0与W/R#。

译码8位I/O地址 例,译码8位I/O端口的译码器,为端口F0H~F7H产生低有效输出。

译码8位I/O地址 例,产生端口F0H~F7H选择信号的PLD。

译码8位I/O地址 例,产生端口F0H~F7H选择信号的PLD。 PLD的VHDL代码描述。

译码8位I/O地址 例,产生端口F0H~F7H选择信号的PLD。 PLD的VHDL代码描述。

译码16位I/O地址 例,用于端口EFF8H~EFFFH的译码电路。

8位与16位I/O端口 8086、80186、80286和80386SX的I/O体

8位与16位I/O端口 选择40H和41H输出数据的I/O端口译码器

8位与16位I/O端口 I/O地址为64H和65H的一个16位I/O端口

32位I/O端口 对80486DX地址为70H~73H的32位输入端口译码

Pentium~Core2的I/O体 对于Pentium~Core2,I/O端口出现在不同的I/O体中,具体有I/O端口地址确定。 例, 8位端口0034H出现在Pentium的I/O体5中。 16位端口0034H~0035H出现在Pentium的I/O体5和I/O体6中。 最宽的I/O传送是32位,现在还没有64位I/O指令支持64位传送。

Pentium~Core2的I/O体 Pentium4接口到16位I/O端口,端口地址在2000H~2001H。

Pentium~Core2的I/O体 当I/O端口扩展到64位时,应当尽量避免I/O端口的宽度跨越64位边界。 例,16位端口的地址2007H和2008H,端口地址2007H在I/O体7,端口地址2008H在I/O体0,两者的被译码的地址是不同的。

本章内容 I/O接口概述 I/O端口地址译码 可编程外围设备接口 8254可编程间隔定时器 16550可编程通信接口 模/数转换器与数/模转换器

可编程外围设备接口 82C55基本描述 82C55编程 方式0操作 与82C55接口的LCD显示器 方式1选通输入 方式1选通输出 方式2双向操作 82C55方式小结 串行EEPROM接口

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

82C55的基本特征 82C55有24个引脚可用于I/O,每组12个引脚可进行编程,以3种不同的操作方式工作。 82C55可将任一TTL兼容设备与微处理器相连。 如果使用82C55(CMOS型)与高于8MHz时钟的微处理器一起工作,则需要插入等待状态。 82C55可以为每个输出提供至少2.5mA的灌电流(logic 0),最大为4mA。 82C55在Pentium 4系统中仍有使用。尽管不是单独的82C55芯片,但编程是兼容的。

82C55的引脚 DIP封装

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

8255A的内部结构 8255A由四个部分组成。 数据总线缓冲器:双向、三态 读/写控制逻辑 三个八位数据端口:PA、PB、PC A组和B组的控制电路 根据CPU送来的编程命令控制8255A工作的电路 内部有控制寄存器,用来接收CPU送来的命令字 A组控制部件用来控制PA口和PC口的高4位 B组控制部件用来控制PB口和PC口的低4位

数据端口 端口A:PA0~PA7 包含一个8位的数据输入锁存器,一个8位的数据输出锁存器/缓冲器。 因此,A端口作输入和输出时数据均能锁存。 常作数据端口,功能最强大。 端口B:PB0~PB7 包含一个8位的数据输入缓冲器,一个8位的数据输入/输出锁存器/缓冲器。 B组,支持工作方式0、1。 常作数据端口。

数据端口 端口C:PC0~PC7 包含一个8位的数据输入缓冲器,一个8位的数据输出锁存器/缓冲器,无输入锁存功能。 仅支持工作方式0。 可作数据、状态和控制端口。 分为两个4位,每位可独立操作。 A组控制高4位PC4~PC7。 B组控制低4位PC0~PC3。

读写控制逻辑 读写控制逻辑 用来管理数据信息、控制字和状态字的传送,它接收来自CPU地址总线的A1、A0和控制总线的有关信号,向8255A 的A、B两组控制部件发送命令。 RESET:复位信号 CS#:片选 RD#、WR#:读信号、写信号 A1、A0:端口选择信号。 8255A内部有3个数据端口(PA、PB、PC)和一个控制字寄存器端口。

系统复位 8255A的RESET输入端为高电平时,使8255A复位,所有的数据端口都被置成输入方式。 如果希望它已这种方式工作,就不用再另外进行初始化。

端口功能选择

与80386SX低位I/O体相连的82C55 82C55的端口地址为C0H~C4H。

8255A的工作方式 方式0:基本输入输出方式 适用于无条件传送和查询方式的接口电路。 查询方式下,可以使用PC口作为握手控制。 规定输出信号可以被锁存,而输入信号不能锁存。 方式1:选通输入输出方式 适用于查询和中断方式的接口电路。 输入输出都锁存。 方式2:双向选通输入输出方式 适用于双向传送数据的外设。

82C55编程 初始化编程: 工作过程中: 采用控制I/O端口地址:A1A0=11。 命令字节A:控制字的MSB=1,又称为方式控制字 决定A、B、C口的输入输出方式。 命令字节B:控制字的MSB=0,又称为端口C的按位置位/复位控制字 对C口的每一位的输出(0/1)进行控制。 工作过程中: 通过数据端口对外设数据进行读写。 数据读写利用端口A、B和C的I/O地址,A1A0依次等于00、01、10。

82C55编程 命令字节A对A组和B组的功能进行编程,又称作方式控制字。

82C55编程 当82C55被编程为方式1或方式2时,可用命令字节B对端口C进行置位或复位。 注意:A1A0=11

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

82C55编程 读写数据端口:在初始化编程之后 当数据端口作为输入接口时,执行输入IN指令将从输入设备得到外设数据。 当数据端口作为输出接口时,执行输出OUT指令将把CPU的数据送给输出设备。 思考1:对输出端口进行读操作,结果如何? 思考2:能对输入端口进行写操作吗?

82C55编程 对输出端口进行读操作 例,置位输出端口B的PB7位的程序段: 不是读取外设数据,而是读取上一次CPU发给外设的数据。 8255A具有锁存输出数据的能力。因此,可以读入被设置为输出方式的端口锁存器中的值,进行按位处理后再次输出。 例,置位输出端口B的PB7位的程序段: mov dx, 0fffah ;B端口假设为FFFAH in al, dx ;读出B端口原输出内容 or al, 80h ;使PB7=1 out dx, al ;输出新的内容

82C55编程 关于端口C的说明 C端口被分成两个4位端口,两个4位端口均只能以方式0工作,可分别选择输入或输出。 在控制上,C端口上半部和A端口编为A组,C端口下半部和B端口编为B组。 当A和B端口工作在方式1或方式2时,C端口的部分或全部引脚将被征用,即被征用引脚的功能不由方式字定义,而是由A、B口的工作方式确定。 其余引脚仍可设定工作在方式0。

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

82C55编程 关于端口C的说明 读端口C:读取的C端口数据有两种情况 未被A端口和B端口征用的引脚 被A端口和B端口征用作为联络线的引脚 从定义为输入的端口读到引脚输入的数据; 从定义为输出的端口读到输出锁存器中的信息,这一信息是CPU前次送入的。 被A端口和B端口征用作为联络线的引脚 将读到反映8255A状态的状态字。

方式0操作 方式0操作:基本输入输出方式 每一个端口都可以作为基本的输入/输出口 A口、B口、C口的高四位和低四位可以独立地设置为输入口或输出口。 CPU可以采用无条件读/写方式与8255A交换数据。 如果把C口的两个部分分别用作控制和查询口,与外设的控制和状态端相连,CPU也可以通过对C口的读写实现对A口和B口的查询方式工作。 规定:输出的数据被锁存,输入数据不锁存。

8位LED显示器通过82C55连接到8088 Peripheral Interface Adapter 端口A和端口B均工作在方式0

8位LED显示器通过82C55连接到8088 I/O端口号为0700H~0703H。通过PLD进行译码。 段负载电阻值为39,与段开关基极串联的电阻值为2.2k,阳极开关在基极上接的电阻为690。 初始化编程: MOV AL, 10000000B;命令字 MOV DX, 703H OUT DX, AL

8位LED显示器通过82C55连接到8088 驱动多路复用显示器的过程(汇编语言)。

8位LED显示器通过82C55连接到8088 驱动多路复用显示器的过程(内嵌汇编)。

8位LED显示器通过82C55连接到8088 延时过程 若用2.0G的Core2来产生延时,XXXX值大约为400000,可用LOOPD结合ECX来实现。

与82C55接口的LCD显示器 与82C55连接的DMC-20481 LCD显示器 与82C55连接的步进电机 键盘矩阵接口

键盘及其接口 键盘是微机系统最常使用的输入设备。 标准键盘:通过5芯电缆与PC微机主机连接。 编码键盘:能自动提供对应于被按键的编码信息,如ASCII码,并能同时产生一个选通脉冲通知处理器。具有处理抖动和多键串键的功能。使用方便,但需要较多硬件。 小键盘:适用于单板机或以微处理器为基础的仪器,实现数据、地址、命令及指令等的输入。 非编码键盘:由一组开关组成,提供行和列的键盘矩阵。其全部工作,包括按键的识别、按键代码的产生等都由软件完成。

简易键盘的工作原理 按下,检测线=0 释放,检测线=1 +5V 控制线 检 测 线 输出0

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

按键抖动 机械按键存在抖动现象:当按下或释放一个键时,往往会出现按键在闭合位置和断开位置之间跳几下才稳定到闭合状态。 抖动的持续时间通常不大于10ms。 采用硬件消抖电路或软件延时方法解决。 前沿抖动 后沿抖动 键稳定 键按下

硬件消抖电路 双稳态电路 +5V 3.6K 输出信号 施密特电路 +5V 输出信号

串健问题的处理 重键指两个或多个键同时闭合。 出现重键时,读取的键值可能会出现有一个以上的0。 是否给予识别和识别哪一个键? 简单情况:不予识别,认为是错误的按键。 正常的组合键:必须都识别出来。

键盘扫描程序实例-第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 ;读进列值

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

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

键盘扫描程序实例-第5段 ;查找键代码 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 ;全部比较完,仍无相同,说明是重键

键盘扫描程序实例-第6段 key4: mov al, [di] ;获取键代码送AL …… …… ;后续处理

方式1-选通输入/输出 方式1:将3个端口分为A、B两组 A、B两个口仍作为数据输入/输出口 C口分为两部分,分别作为A口和B口的联络信号。 联络信号为3位,两个数据口用去6位,剩下2位仍可以做数据位用。 A、B两个口的工作状态由CPU写控制字时设定。一旦方式设定,它们所用的C口的联络信号位也就已经确定。 输入输出都锁存。 可以用于查询方式和中断方式。

方式1选通输入—端口A 数据选通信号 将数据装入端口寄存器,该信息保持到由IN指令输入给微处理器 PA7~PA0 PC4 STBA PC5 INTEA IBFA INTRA STBA 中断允许触发器 输入缓冲器满信号 表示A口已经接收数据 中断请求信号 请求CPU接收数据

方式1选通输入—端口B 数据选通信号 将数据装入端口寄存器,该信息保持到由IN指令输入给微处理器 PB7~PB0 PC2 STBB PC1 INTEB IBFB INTRB STBB 中断允许触发器 输入缓冲器满信号 表示B口已经接收数据 中断请求信号 请求CPU接收数据

方式1选通输入 STB#的激活使得数据被捕获到端口,并激活IBF和INTR信号。 微处理器通过软件(IBF)或硬件(INTR)注意到数据已被选通进入端口,它就执行一条IN指令读取该端口(RD#)。 读端口的操作将IBF和INTR恢复到无效状态。 INTE(中断允许)既不是输入,也不少输出,是通过PC4(端口A)或PC2(端口B)编程设置的内部位。 特别注意:由于这两个触发器没有无外部输出引脚,因此PC4和PC2脚上出现高电平或低电平信号时,并不会改变中断允许触发器的状态。

方式1选通输入 时序图。

方式1选通输入 例,使用82C55用作键盘的选通输入操作。 每次按键后,DAV#被激活并维持1.0s。

方式1选通输入 例,使用82C55用作键盘的选通输入操作。 读取键盘编码的过程

方式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再次输出数据

方式1选通输出 一旦数据写入到选通输出端口,OBF#变为逻辑0,表明数据已出现在端口锁存器中。OBF#表明数据是有效的(对于一个外部I/O设备而言)。 外部I/O设备是通过选通ACK#信号来移走数据的。 ACK#信号使得OBF#变为逻辑1,表明缓冲区未满。INTR信号也常常在外部设备通过ACK#信号接收数据时中断微处理器。 INTE信号既不是输入,也不少输出,是通过编程允许或禁止NITR引脚的一个内部位。INTEA对应PC6引脚,INTEB对应PC2引脚。

方式1选通输出 时序图

方式1选通输出 例,82C55与并行打印机的接口 DS#信号用于选题数据进入打印机,ACK#信号用于响应接收到的ASCII字符。

方式1选通输出 例,82C55与并行打印机的接口 将字符从AH送入连接到端口B的打印机的过程

方式2双向操作 只有端口A可以工作于方式2,输入/输出数据都能锁存。

方式2双向操作 INTR:输出信号,用于在输入和输出情况下中断微处理器。 OBF#:输出信号,表明缓冲器包含给双线总线的数据。 ACK#:输入信号,允许三态缓冲器,使得数据可以出现在端 口A。如果ACK#为逻辑1,则端口A的输出缓冲器处于高阻抗 状态。 STB#:输入信号,将来自双向端口A总线上的外部数据装入 端口A的输入锁存器。 IBF:输出信号,表明输入缓冲器已包含外部双向总线的数据。 INTE:允许INTR引脚的内部位(INTE1和INTE2)。INTR引 脚的状态通过端口C的PC6位(INTE1)和PC4位(INTE2) 控制。

方式2双向操作 时序图

方式2双向操作 通过双向总线发送数据: 程序首先测试OBF#信号以确定输出缓冲器是否为空。 若为空,则数据由OUT指令发送给输出缓冲器。 一旦电路检测到OBF#为逻辑0,就从输出缓冲器移走数据并返回ACK#信号。 ACK#信号置位OBF#并使能三态输出缓冲器,从而可以读出数据。

方式2双向操作 例,通过双向总线传送AH。

方式2双向操作 通过双向端口A的总线接收数据: 程序首先测试IBF位,以确定数据是否已被选通进入端口。 如果IBF=1,则用IN指令读入数据。 外部接口使用STB#信号将数据送入端口。当STB#被激活时,IBF信号变为逻辑1,端口A的数据被保持在端口内部的寄存器中。 当执行IN指令时,IBF位被清零,端口中的数据被移入AL。

方式2双向操作 例,从双向总线将数据读入AL中。

方式2双向操作 INTR(中断请求)引脚可被通过总线的来自两个方向的数据流激活。 如果两个INTE位都使能INTR,则输出缓冲器空和输入缓冲器满都产生中断请求。 这种情况出现在使用STB#将数据选通进入缓冲器的时候,或使用OUT指令写数据的时候。

82C55方式小结 端口 方式0输入 方式0输出 方式1输入 方式1输出 方式2(仅A口) PA7~PA0 IN OUT I/O PB7~PB0 方式0或1 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 INTRB IBFB STB#B INTRA STB#A IBFA OBF#B ACK#B ACK#A OBF#A

端口C的状态字 CPU读取C口时,所读出的端口C中各位的含义。 A组 B组 PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 方式1输入 I/O IBFA INTEA INTRA INTEB IBFB INTRB 方式1输出 OBFA OBFB 方式2双向 INTE1 INTE2 ×

本章小结 I/O接口概述 I/O编址、基本输入输出接口、握手 I/O端口地址译码 译码电路的设计 可编程外围设备接口 82C55的引脚、工作方式、编程和应用 8254可编程间隔定时器 16550可编程通信接口 模/数转换器与数/模转换器

作业 习题5,习题25,习题31,习题43。