第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.

Slides:



Advertisements
Similar presentations
第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
Advertisements

微型计算机原理及应用.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第四章 汇编语言 程序设计 任课教师:王晓甜
第十二章 DMA控制器 12.1 概述 A DMA控制器 A的应用.
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
第5章 输入输出与接口技术.
汇编语言与接口技术 教师:范新民.
输入/输出及接口 输入/输出的传送方式 中断技术 80x86/Pentium中断系统 8259A可编程中断控制器 中断程序设计
本周实验安排 实验内容:(P231)人名排序的例子。
第 6 章 I/O 接口和总线 中国科学技术大学 何克东.
第四章 指令系统及汇编语言程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第7章 常用数字接口电路.
第3章 80x86汇编语言程序设计(下).
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第6章 DMA传输 6.1 DMA传输原理 6.2 DMA控制器8237A A的编程使用 欢迎辞.
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第5章 输入输出与接口技术.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
Ch 9: Input/Output System 输入/输出系统
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS PC16450/PC16550
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第8章 PCH中的常规接口.
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
第二章 8086/8088系统结构 主要内容 8086/8088微处理器的内部结构 8086/8088 CPU 的引脚与功能
微型计算机原理及应用.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
1.3 微型计算机的结构和工作原理.
第 13 章 中断系统.
第二章 模拟量输出通道 本章要点 1.模拟量输出通道的结构组成与模板通用性; 2.8位D/A转换器DAC0832的原理组成及其接口电路
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
第6章作业 3、 需要128块芯片 片内译码地址线:10条 片选择地址线:至少4条
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
第7章 I/O接口和总线 7.1 I/O接口 7.2 总线.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第二章 8086微处理器. 第二章 8086微处理器 微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
第九章 微处理器外部结构和总线操作时序.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
可编程定时计数器.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第8章 并行接口芯片 并行接口一般具有两个或两个以上的8位I/O接口。各个口的工作方式可由程序分别确定或改变,使用灵活,便于和各种外部设备连接。因此,又称可编程的外部接口(PPI) 目前各主要微处理器厂商都有自己的PPI产品,但它们的功能基本类似.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程
Presentation transcript:

第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞

3.1 输入/输出接口 3.1.1 外部设备及其信号 3.1.2 I/O接口的功能 3.1.3 I/O端口的编址方法 3.1 输入/输出接口 3.1.1 外部设备及其信号 3.1.2 I/O接口的功能 3.1.3 I/O端口的编址方法 3.1.4 简单I/O接口的组成

外部设备(Peripheral Device) 3.1.1 外部设备及其信号 外部设备(Peripheral Device) 按照与CPU数据传输的方向划分: (1)输入设备 键盘、鼠标、光笔 输入图形信息的扫描仪、数码相机 检测现场信息的数字化测试仪表 模拟量采集和模拟量/数字量转换装置等

(2)输出设备 (3)复合输入/输出设备 外存储设备是典型的复合输入/输出设备: 显示器、打印机 绘图仪 现场控制的数字量/模拟量转换装置和执行元件 (3)复合输入/输出设备 外存储设备是典型的复合输入/输出设备: 磁带机(Tape Driver) 软磁盘驱动器(Floppy Driver) 硬磁盘驱动器(Hard Disk Driver) 光盘驱动器(Compact Disk Driver) 许多光盘只能读出信息,称为CD—ROM (Compact Disk—Read Only Memory),只读光盘只能用作输入设备。

2. 外部设备的信号 (1)数据信号 按照信号的物理形态,可分为以下几种; 数字量: 以二进制形式表述的数据、图形或文字信息。 2. 外部设备的信号 (1)数据信号 按照信号的物理形态,可分为以下几种; 数字量: 以二进制形式表述的数据、图形或文字信息。 模拟量: 现场的物理量通过传感器件,转换为大小与之对应的电压或电流信号。这些量呈连续变化的形态,称为模拟量(Analog)。 开关量: 开关量是只有二种状态(0,1)的量,如开关的接通(ON)与断开(OFF),电机的启停等 脉冲量: 计数脉冲、定时脉冲和控制脉冲 对于输入设备,数据信号从外设送往CPU 对于输出设备,数据信号从CPU发往外部设备。

(2)状态信号 状态信号表明外部设备当前的工作状态,用来协调CPU与外部设备之间的操作。 典型的状态信号:READY, BUSY 有的设备有指示出错状态的信号,如打印机的纸尽(Paper Out),故障(Fault)。 不同的外设可以有不同的状态信号。 状态信号总是从外部设备发往CPU。

数据信号、状态信号、控制信号都是以“数据”的形式,通过数据总线在CPU和外部设备之间进行传输的。 (3)控制信号 控制信号是CPU向外设发出的命令,它指定设备的工作方式,启动或停止设备 控制信号的格式因设备而异 控制信号从CPU发往外部设备 数据信号、状态信号、控制信号都是以“数据”的形式,通过数据总线在CPU和外部设备之间进行传输的。

3.1.2 I/O接口的功能 接口:计算机一个部件与另一个部件之间的连接界面。 功能: 1. 设备选择功能 2. 信息传输功能 1. 设备选择功能 CPU通过地址代码来标识和选择不同的外部设备 接口对系统总线上传输的外设地址进行译码,在检测到本设备地址代码时,产生相应的“选中”信号 2. 信息传输功能 设备被“选中”时: 从CPU/数据总线接收数据或控制信息 外部设备的数据或状态信息发往数据总线/CPU

外设使用的数据格式与CPU数据格式不同时,接口要进行二种数据格式之间的相互转换。 联络功能 3. 数据格式转换功能 外设使用的数据格式与CPU数据格式不同时,接口要进行二种数据格式之间的相互转换。 联络功能 从系统总线或外设接收一个数据后,发出“数据到”联络信号,通知外设或CPU取走数据 数据传输完成,向对方发出信号,准备进行下次传输 5. 中断管理功能 向CPU申请中断; 向CPU发中断类型号; 中断优先权的管理; 在以8086为CPU的系统中,这些功能大部份可以由专门的中断控制器实现。

复位功能 7. 可编程功能 有些接口具有可编程特性,可以用指令来设定接口的工作方式、工作参数和信号的极性。 接口在接收系统的复位信号后,将接口电路及其所连接的外部设备置成初始状态。 7. 可编程功能 有些接口具有可编程特性,可以用指令来设定接口的工作方式、工作参数和信号的极性。

错误检测功能 (1) 物理信道上的传输错误 (2) 数据传输中的覆盖错误 信号在线路上传输时,如果遇到干扰信号,可能发生传输错误。 检测传输错误的常见方法是奇偶检验。 (2) 数据传输中的覆盖错误 输入设备完成一次输入操作后,把所获得的数据暂存在接口内 如果在该设备完成下一次输入操作之后,CPU还没有从接口取走数据,那么,在新的数据送入接口后,上一次的数据被覆盖,从而导致数据的丢失 输出操作中也可能产生类似的错误 覆盖错误导致数据的丢失,易发生在高速数据传输的场合

3.1.3 I/O端口的编址方法 有两种不同的I/O端口编址方式: 1. I/O端口与内存统一编址 优点: 访问内存单元和I/O端口使用相同的指令,使用方便 降低CPU电路的复杂性 缺点: 减少了内存可用范围 难以区分访问内存和I/O的指令,降低了程序的可读性和可维护性

I/O端口与内存独立编址 内存储器和I/O端口各自有自己独立的地址空间 访问I/O端口需要专门的I/O指令 8086/8088 CPU采用这种方式 访问内存储器 使用20根地址线A0~A19 使M/IO#=1 内存地址范围为00000~0FFFFFH共1MB 访问I/O端口 使用低16根地址线A0~A15 使M/IO#= 0 I/O端口地址范围为0000~0FFFFH共64K

3. IBM PC 微型计算机I/O端口地址分配 在PC系列微机中,仅使用A0~A9共10条地址线定义I/O端口(设A11~A15= 0),寻址范围为0~3FFH 前256个端口地址供主板上寻址I/O接口芯片使用,后768个供扩展槽接口卡使用 用户设计I/O接口电路的时候,应使用系统未占用的端口地址区域 为避免所选择的地址与其他扩展卡冲突,最好将其设计成地址可选的型式 IBM-PC微机系统板各I/O接口器件端口地址见表3-1。

3.1.4 简单I/O接口的组成 端口 端口:接口内的寄存器,用来暂存CPU和外设之间传输的数据、状态和命令。 端口地址:每一个端口有一个独立的地址。 外部设备地址:设备接口内各端口的地址,一台外部设备可以拥有几个通常是相邻的端口地址。 端口种类:数据端口、命令端口(控制端口)和状态端口。 如果外部设备的信息(数据/状态)已经锁存,端口也可以由三态缓冲电路组成。

地址译码电路 一个接口上的几个端口地址通常是连续排列的, 可以把16位地址码分解为二个部分: 例如:某接口占有地址330H~333H: 地址译码是接口的基本功能之一。 一个接口上的几个端口地址通常是连续排列的, 可以把16位地址码分解为二个部分: 高位地址码用作对接口的选择; 低位地址码用来选择接口内不同的端口。 例如:某接口占有地址330H~333H: 高8位地址为11001100B时,本接口被选中; 低2位地址为00,01,10,11时,选择接口内的不同端口。

图3-1 端口的地址译码电路

为了避免地址冲突,许多接口电路允许用“跳线器(JUMPER)”改变端口地址。上页图3-1(b) 将异或门的输出代替图3-1(a)中的A8,A9引脚: 二个跳线引脚均接地时,上面译码电路仍然产生330H~333H的端口译码信号; 当二个跳线引脚均接“1”时,上面译码电路会产生030H~033H的端口译码信号 同理还可以产生130H~133H,230H~233H的译码信号。 8086工作于最大模式时,上面的M/IO#、WR#、RD#信号由8288总线控制器发出的IORC#、IOWC#代替。

由于读、写操作不会同时进行,一个输入端口和另一个输出端口可以使用同一个地址编码。 例如,可安排数据输入端口、数据输出端口使用同一个地址330H,命令端口和状态端口共同使用地址331H。 需要注意的是,数据输入端口和数据输出端口虽然使用相同的地址,但却是二个各自独立的不同的端口。

数据锁存器与缓冲器 数据(状态)输入端口: 必须通过三态缓冲器与系统总线相连,保证数据总线能够正常地进行数据传送。 输入设备在完成一次输入操作后,在输出数据的同时,产生数据选通信号,把数据打入八位锁存器74LS273 锁存器的输出信号通过三态八位缓冲器74LS244连接到系统数据总线。 数据端口读信号由地址译码电路产生。 高电平(无效):缓冲器输出端呈高阻态。 低电平(有效,端口被选中 ):已锁存的数据通过74LS244送往系统数据总线,被CPU所接收。

图3-3 输入设备接口的数据锁存和缓冲电路

数据(命令)输出端口: CPU送往外设的数据或命令,应由接口进行锁存,以便使外设有充分的时间接收和处理。 八位输出锁存电路例(图3-4)。

图3-4 输出锁存电路

简单的输入/输出接口(图3-5) 把地址译码、数据锁存与缓冲、状态寄存器、命令寄存器各个电路组合起来,构成简单输入/输出接口 接口连接的信号: 与系统总线连接: 地址总线A0~A15 数据总线D0~D7 控制总线M/IO#、RD# 、WR# (最小模式时)或IOWC#、IORC#(最大模式时)相连接 与外部设备相连:数据、状态、命令。

图3-5 简单接口的组成

3.2 输入输出数据传输的控制方式 3.2.1 程序方式 3.2.2 中断方式 3.2.3 直接存储器存取(DMA)方式

3.2.1 程序方式 1. 无条件传送方式 在程序控制下进行信息传送 分为无条件传送和条件传送二种 3.2.1 程序方式 在程序控制下进行信息传送 分为无条件传送和条件传送二种 1. 无条件传送方式 对于简单的外部设备的I/O操作可以随时进行; 例如,开关、发光二极管 这些简单设备的输入信号一般不需要锁存,可以通过三态缓冲器与系统数据总线直接相连。 简单输出设备的信号一般需要由锁存器锁存

图3-6 无条件输入/输出传送接口

条件传送方式 条件传送也称为查询式传送、异步传送; 接口电路除了有传送数据的端口以外,还应有储存和传送状态的端口。 对于输入过程: 外设将数据准备好, “准备好(READY)”标志位置1; CPU将数据取走,READY=0 对于输出过程: 外设接收到数据,将“忙(BUSY)”标志位置1 数据输出完成,将 “BUSY”清零。

一个数据的“条件传送”过程: CPU从接口中读取状态字; 如状态字表明外设已处于“就绪”状态,则传送数据。

图3-9 查询式输入流程

查询方式输入接口电路(图3-7) 接口内有两个端口: 选通信号有二个作用: 数据信息和状态信息从不同端口经过数据总线送到CPU。 数据端口(8位,输入) 状态端口(1位,输入,连接在D7上,=1表示有数据) 选通信号有二个作用: 将外设的数据送到接口的锁存器中; 使接口中的D触发器置“l”(READY=1) 数据信息和状态信息从不同端口经过数据总线送到CPU。

图3-7 查询式输入接口电路

汇编语言程序: C语言程序: AGAIN: IN AL, STAT_PORT; 读状态端口,D7=1表示“数据就绪” TEST AL,80H ; 测试“数据就绪”位 JZ AGAIN ; 未就绪,继续读状态端口 IN AL, DATA_PORT ; 已就绪,从数据端口读取数据 …… C语言程序: do stat = inportb( stat_port ); while (stat && 0x80 = = 0); /* 数据未准备好反复读状态 */ data = inportb( data_port ); /* 数据已准备好则读取数据 */

查询方式输出接口电路(图3-8) 接口内有两个端口: CPU读取接口中的状态: 数据端口(8位,输出) 状态端口(1位,输入,连接在D7上,=1表示正在输出,“BUSY”) CPU读取接口中的状态: 外设忙( BUSY =1),CPU等待 外设空闲( BUSY =0),向外设输出数据

图3-8 查询式输出接口电路

“数据端口写”信号作用: D触发器的作用: 把数据打入“锁存器”; 将“状态触发器”置1 为外设提供一个联络信号STB,告诉外设现在接口中已有数据可供提取; 用作该设备的状态标志( “忙”,BUSY)。

汇编语言程序: C语言程序: ONE: IN AL, STATUS_PORT ; 读状态端口 TEST AL, 80H ; 测试“忙”位 JNZ ONE ; 忙,再读状态端口 MOV AL, DATA ; 不忙,取来数据 OUT DATA_PORT, AL ; 送入数据端口 …… C语言程序: do stat = inportb( status_port ); while ( stat && 0x80 = = 0x80 ); /*设备“忙”:反复读状态*/ outportb( data_port, data ); /*设备空闲:输出数据 */

查询式输入/输出的程序设计例 某字符输入设备以查询方式工作: 要求: 数据输入端口: 0054H, 状态端口: 0056H。 状态寄存器:D0=1,数据准备好,可以输入; 状态寄存器:D1=1,输入设备发生故障 要求: 从该设备上输入80个字符,配上水平和垂直校验码(偶校验),向串行口输出。 如果设备出错,显示错误信息后停止。

汇编语言程序: .data Buffer DB 81 dup( ? ) Message DB ‘Device Fault !’,0DH,0AH,’$’ .code Start:MOV AX,@data ;对DS初始化 MOV DS,AX LEA SI, Buffer ;设置SI为缓冲区指针 MOV CX, 80 ;设置CX为计数器 MOV DL, 0 ;DL置垂直校验码初值

JNZ ERROR ;设备故障,转ERROR TEST AL, 01H ;测状态寄存器D0 JZ Next ;未准备好,则等待,再测 Next:IN AL, 56H ;读入状态 TEST AL,02H ;测状态寄存器D1 JNZ ERROR ;设备故障,转ERROR TEST AL, 01H ;测状态寄存器D0 JZ Next ;未准备好,则等待,再测 IN AL,54H ;准备好, 输入字符 AND AL, 7FH ;清最高位,进行校验 JPE Store ;已经是偶数个1,则转Store OR AL,80H ;奇数个1,将最高位置为1 Store: XOR DL,AL ;产生垂直校验码 MOV [SI], AL ;将字符送缓冲区 INC SI ;修改地址指针 LOOP Next ;80个字符未输入完成,继续

MOV [SI], DL ; 输入完成, 保存垂直校验码 Tranfer:LEA SI,Buffer ;准备发送,SI中置字符串首址 MOV CX,81 ;发送字符数 One:MOV AH,04H ;设置串口输出功能号 MOV DL, [SI] ;取出一个字符 INT 21H ;从串口输出 INC SI ;修改指针 LOOP One ;输出下一个字符 JMP Done Error: MOV AH, 09H ;设备故障,输出出错信息 LEA DX, Message INT 21H Done: MOV AH, 4CH INT 21H ;返回DOS END Start

产生水平校验码:从设备读入数据,清除最高位,根据剩余七位的奇偶特性决定最高位置1或不变(保持为0)。 说明: 程序由二段循环程序组成: 第一段程序从设备输入80个字符,同时产生它的水平/垂直校验码存入缓冲区; 第二段程序将缓冲区内容通过串口输出。 测试状态位要注意先后次序: 由于设备故障将导致该设备不能正常输入,使完成标志(D0)恒为零。所以,在设备发生故障时先判是否完成可能导致程序死循环。 产生水平校验码:从设备读入数据,清除最高位,根据剩余七位的奇偶特性决定最高位置1或不变(保持为0)。 产生垂直校验码:将80个字节半加(异或)得到。

多个设备循环查询方法举例: 三个设备,它们状态端口地址分别为STATl、STAT2、STAT3,三个状态端口均使用第5位作为准备好标志。 TREE: MOV FLAG,3 INPUT: IN AL,STAT l TEST AL,20H JZ DEV2 CALL PROC l

DEV2: IN AL,STAT2 TEST AL,20H JZ DEV3 CALL PROC2 DEV3; IN AL,STAT3 TEST AL,20H JZ NOINPUT CALL PROC3 NOINPUT:CMP FLAG,0 JNE INPUT ……

说明: PROCl、PROC2、PROC3是三个设备输入数据并进行处理的子程序。 FLAG存放三个设备输入完成的标志,初始值为3。 上例仅适用于三个设备工作速度都比较慢的情况; 如果其中一个设备工作速度很快,而其他设备的输入输出处理程序运行时间又较长,可能发生“覆盖错误”。 在这种情况下,应优先执行工作速度较快的外设的I/O过程,然后再执行其他设备的I/O过程。

3.2.2 中断方式 程序查询方式的特点: 程序查询方式解决了CPU与外设工作的协调问题,但是却大大降低了CPU的使用效率; 3.2.2 中断方式 程序查询方式的特点: 程序查询方式解决了CPU与外设工作的协调问题,但是却大大降低了CPU的使用效率; 在程序查询方式中,CPU处于主动地位,外设处于消极等待查询的被动地位; 设备较多时,查询方式的数据传送很难使每一个外设都能工作在最佳状态。

程序中断方式特点: 赋予系统中的外设某种主动申请、配合CPU工作的“权利”。 外设把数据准备好时,主动向CPU发出一个请求信号。

中断方式举例: 某外设在1秒内传送100个字节。 若用程序查询的方式传送,则CPU为传送100个字节所化费的时间等于1秒。 设CPU执行一次中断服务程序需要100μs; 传递100个字节CPU所使用的时间为100μs×100=10ms; CPU处理中断开销为1%,99%的时间可执行其他任务; 中断方式的数据传送仍在程序的控制下执行,称为程序中断方式; 适应于中、慢速的外部设备数据传送。

3.2.3 直接存储器存取(DMA)方式 程序中断方式,程序查询方式的缺点: 中断方式: 程序查询方式: 每传送一次数据,CPU必须执行一次中断服务程序; 对于高速数据传输,容易产生“覆盖错误”。 程序查询方式: 响应速度比中断方式要快一些,完成一次数据传输仍然需要执行七、八条以上的指令。 CPU的工作速度不高时仍有可能跟不上外设数据传输的需要。

(Direct Memory Access—DMA) 直接存储器传送 (Direct Memory Access—DMA) 将外设的数据不经过CPU直接送入内存储器; 或者,从内存储器不经过CPU直接送往外部设备; 一次DMA传送只需要执行一个DMA周期(相当于一个总线读/写周期); 能够满足高速外设数据传输的需要; 需要一个专门的器件来协调外设接口和内存储器的数据传输,称为DMA控制器(DMAC)

图3-10 DMA数据传送示意图

3.3 开关量输入输出接口 3.3.1 开关量输入接口 3.3.2 开关量输入接口

3.3.1 开关量输入接口 1. 基本的开关量输入接口 开关形态:单刀单掷开关/单刀双掷开关/按钮 开关量通过三态缓冲器与系统数据总线连接 常用的三态缓冲器: 74LS244(输入输出同相)/74LS240(输入输出反相) 一条输入指令可以同时读入8位或16位开关量。

图3-11 基本开关量输入接口

2. 矩阵式开关量输入接口 电路特点: 开关数量多时,可以排列成矩阵,例如:图3-13(键盘) 数据输出端口连接8根“行线”(Row,R0~R7); 数据输入端口连接8根“列线”(Column, C0~C7); 电路特点: 没有键按下时,列线端口输入为全“1”; 行线端口输出全“1”时,不论有无键按下,列线端口输入仍然为全“1”; 某一行线输出“0”时,如果该行上有一个键按下,则输入端口输入代码为7个“1”,1个“0”,0的位置与被按下键的位置相对应。

图3-12 键盘(矩阵式开关量输入)接口

键盘扫描与编码: 对8根行线逐行扫描,识别按键的所在行、列,从而获得该键的代码; 一个键的编码可以用它的二字节“行列码”表示。例如,(R3,C2)的二字节“行列码”为F7FBH: F7H=11110111 :按键在R3行上; FBH=11111011 :按键在C2列上; 用“行列码”查表,可以得到这个键的代码。 键的编码也可以用一字节“扫描码”表示。上例中按键的一字节“扫描码”为32H: 高4位0011:键所在的行; 低4位0010:键所在的列; 键刚按下时,会产生“抖动”。

键盘扫描程序: 没有键被按下,返回-1; 有键按下时返回按键的二字节“行列码”(行码为高8位,列码为低8位); RPORT, CPORT 定义为行、列端口的地址。 unsigned int kbinput( ) { unsigned int row, row0, column, code, k=0; outportb( RPORT, 0); /*各行输出全0,测试有无键按下*/ if (inportb(CPORT) & 0xff = = 0xff ) return( 0xffff ); /* 没有键按下,返回全“1” */ delay(20); /* 延时20ms,消除抖动 */

if (inportb(CPORT) & 0xff = =0xff ) return( 0xffff );. /. 再次测试,确认有键被按下 row0 = row = 0xff7f; column = 0xff; k=0; /* 置行码初值:从最高位对应行开始逐行扫描 */ while( k < 8 && column = = 0xff ) /* 循环:8行未测试完,并且未找到按键所在行 */ { outportb( RPORT, row ); /* 输出行码,测试行输出0,其余行输出1 */ column = inportb( CPORT ) & 0x00ff; /* 读入列码 */ row0 = row; row = (row>>1) ; k++; /* 形成下一个行码 */ }

if (column = = 0xff ) return( 0xffff ); /* 未找到按键所在行,返回全“1” */ code = (row0 & 0xff)* 0x100 + column; /* 由行码、列码组合得到“行列码” */ return (code ); }

3.3.2 开关量输出接口 1. 基本的开关量输出接口 常见的开关量输出: LED发光二极管 执行元件驱动线圈 3.3.2 开关量输出接口 1. 基本的开关量输出接口 常见的开关量输出: LED发光二极管 LED指示灯用于指示室内仪表状态 小功率LED可以由逻辑电路直接驱动: 输出0:LED发光 输出1:LED熄灭 执行元件驱动线圈

表3-3 部分逻辑电路输出端电流 器件型号 高电平输出电流 低电平吸收电流 74LS00,04,10,20,30(逻辑门) 400μA 8mA 74LS01,03,05,12,22(OC门) 100μA 7407(OC驱动器) 250μA 40mA(Voh=30V) 74LS244(总线驱动器) 15mA 24mA 74LS273(D触发器) 74LS373(三态输出锁存器) 2.6mA

大功率LED驱动或执行元件驱动线圈的驱动: 普通逻辑电路输出,外接功率放大三极管驱动; 集电极开路驱动器(OC驱动器),输出端通过上拉 电阻接高压。

2. LED七段数码显示管接口

图3-15 多位LED数码显示接口

多位LED显示器驱动: 多位不同的数字同时显示在不同的数码管上。 送段码之前熄灭所有数码管可以消除“段码”和“位码”不同步产生的闪烁。 设置位码,熄灭所有数码管; 将一个数码管的字形代码(段码)送入段码端口; 设置位码,点亮一个数码管 适当延时后,重复以上过程 多位不同的数字同时显示在不同的数码管上。 送段码之前熄灭所有数码管可以消除“段码”和“位码”不同步产生的闪烁。

多位LED数码显示程序: 需要输出的数字分别是1,2,3,4,5,6,7,8 段码和位码的端口地址分别是segport 和 bitport ;数据段和堆栈段 .data Segtab db 40h, 4fh, 24h, 30h, 19h db 12h, 02h, 78h, 00h, 10h buffer db 1, 2, 3, 4, 5, 6, 7, 8 segcode db ? bitcode db ? .stack 100h

.code leddisp proc far push ds ; 保护各寄存器内容 push ax push bx push cx push si mov ax, @data ;装载ds mov ds, ax lea bx, segtab ;bx 置为七段码表首址 mov bitcode, 80h ; 位码初始值为80H(从左边开始) mov si, 0 ;si用作输出缓冲区指针,初值0 mov cx, 8 ;cx 用作循环计数器,初值8

one: mov al, 0 out bitport, al ; 送位码0,熄灭各LED mov al, buffer[si] ;取出一个待输出数字 xlat ; 转换成七段码 out segport, al ; 向段码端口输出 mov al, bitcode out bitport, al ; 输出位码,点亮一个LED ror bitcode, 1 ; 修改位码,得到下一个位码 inc si ; 修改输出缓冲区指针 call delay ; 延时 loop one ; 循环,点亮下一个LED

pop si pop cx ;恢复各寄存器 pop bx pop ax pop ds ret ; 返回主程序 leddisp endp end

习题3 1. 接口电路与外部设备之间传送的信号有哪几种?传输方向怎样? 2. 接口电路有哪些功能?哪些功能是必需的? 3. I/O端口的编址有哪几种方法?各有什么利弊?80X86系列CPU采用哪种方法? 4. 按照传输信号的种类,I/O端口有几种?它们信号的传输方向怎样? 5. I/O端口译码电路的作用是什么?在最小模式和最大模式下分别有哪些输入信号? 6. 外部设备数据传送有哪几种控制方式?从外部设备的角度,比较不同方式对外部设备的响应速度。

7. 叙述一次查询式输出过程中,接口内各电路、信号的状态变化过程。 8. 比较程序中断方式和查询方式的区别,根据比较,指出中断工作方式的优缺点。 9. 比较DMA方式和程序中断方式的区别,根据比较,指出DMA工作方式的优缺点。 10. 某输入设备数据端口、状态端口、控制端口地址分别为70H, 71H, 72H。状态端口D5=1表示输入完成,控制端口D7=1表示启动设备输入(输入完成后由设备清除该位)。从该设备输入100个字节数据,存入以BUFFER为首地址的缓冲区。如果启动该设备1秒后仍未完成一次输入,则视为超时错,显示出错信息后返回。分别用8086汇编语言和C语言编写完成上述功能的I/O程序。

11. 某输出设备数据端口、状态端口地址分别为220H, 221H。状态端口D0=1表示输出完成。将数据段中以STRING为首地址的20个字符(用七位ASCII代码存储)添加水平和垂直校验发送到该外部设备。用8086汇编语言编写完成上述功能的I/O程序。 12. 试画出矩阵式键盘查询的程序流程图。 13. 试画出公用端口多位LED输出的程序流程图。