当前课程知识点:微机原理与接口技术 > 第11周 输入输出与中断技术 > 第45讲 基本输入输出方法 > 基本I/O方法
大家好 这一讲我们来给大家介绍我们基本的输入输出方法
基本输入输出方法在微机系统里可以这样细分为4种
一种我们称为无条件传送 一种是查询方式 中断控制
还有直接存储器存取 我们简称DMA方式
有的教材上或者是有的课程里头
也把前面两种方式我们统一的称为程序控制方式
在大型机里边还有一种叫做通道技术
当然DMA我们实际上也可以认为
它是通道技术的雏形阶段
那么现在我们学习微机控制系统
所以微机系统里头我们的基本I/O方式
就只有这四种
我们在这门课里头我们把前面的两种
我们还是细分为无条件传送和查询方式这样两种
我们首先来说一下无条件 所谓无条件就是
我们想输出就输出 想输入就输入
也就是想读就读 想写就写
所以这个要求外部设备随时处于准备好状态
也就是说它随时可以接收数据 随时可以被读取
这种方式的优点就是很简单 这个没有问题
但是它的缺点就是它的适用范围太窄了
什么样的设备才能随时准备好了
实际上我们想想开关
它就是一个随时准备好的设备
我们任意时刻去读取它 它不是闭合就是断开
没有任何的二义性
我们的发光管我们让它亮就亮让它灭就灭
他也没有二义性
所以无条件传输方式
它的适用范围是极简单极低速的外部设备
所以它的适用是非常小的
比如现在这个图
它的适用范围是非常小的
比如这个图我们可以看出来就说
当我们读取开关的状态
比如开关闭合我们就让这个发光管亮
这就是一个无条件传输的例子
这个例子我们在这一讲里我们不再去解释了
我把这个例子留给大家作为课后的练习
就说大家用它来做例子
练习一下有关I/O接口的译码电路的设计
以及这个程序的编写
这个程序简单得很 就是一个要求
读取开关的状态 如果开关闭合就让发光管亮
如果开关断开 就再去读开关
一直这样重复下去
大家从这个图里也能看出来
开关闭合我们读进来的就是0
开关断开读进来的就是1
那么我们要让这个发光管亮
我们就要输出一个什么呢
大家可以看这个图
是不是就输出一个高电平这个发光管才亮对吧
OK 这个就是无条件传送
所以无条件传送总体来讲它的适用范围太小了
所以我们不再去详细的讲它了
我们下边来说一下
查询工作方式
查询工作方式就是
外部设备要能够提供或者它能够具备
一个状态提供一个状态信息这样的能力
就只有当外部设备这个状态反馈给我们
我们知道它是满足这样一个状态
就是它空闲的时候
才能够进行信息交换
这就是查询
这种工作方式实际上
我们在前面的练习里已经看到过若干了
我们讲AND指令讲TEST指令的时候
我们用的都是这样一种工作方式
请大家一定要注意的是
所谓查询就是
当满足条件的时候每满足一次条件
只能进行一次信息交换
在我们现在虽然说的是16位体系结构
但是我们不论选的接口芯片
存储器芯片 还是我们的8088
对外的数据总线都是8位宽
所以呢在这种语境下
进行一次信息交换
实际上就是一字节的信息交换
所以这种工作方式它适用的一种场合
同样是一些简单的外部设备 低速的外部设备
对传输效率要求不高的一种场合
它的工作要有一个条件
就是外部设备必须要具备提供状态信息的能力
而且接口一定要有相应的状态端口
我们来看一下这种方式的工作流程
虽然这种流程我们前面用程序已经实现过了
我们这里还是总体给大家看一下
对于这样的查询工作方式
如果用流程来描述的话
它的工作过程是这样
首先
他要读入这个外部设备的状态信息
看看它是不是满足当前的要求
如果它是准备好
如果它没有准备好我们就要再去读取
直到它准备好就完成一次信息交换
完成一次信息交换
就是读一个数据或者写一个数据
刚才说了在我们现有的8位接口的语境下
就完成了一字节数据的输入或者输出
如果你只进行一字节数据那么这就结束了
如果没有我们现在要看一下
如果你的信息交换或者传输已经结束了
那么这就结束了
如果没有结束会怎么办了
请大家一定要注意
没有结束一定要回到上面这个地方
重新去查询当前的状态是不是满足要求
如果不满足
那么又继续去读取外部的状态
所以这里就说用这个图给大家强调
每满足一次状态才能进行一次信息交换
这才是查询工作方式它的特点
所以查询工作方式的优点是比较简单
无论软件和硬件我们后面用示例来给大家解释
它都是比较简单的
但是它有一个很大的缺点
我们也用这样一个图来描述
因为我们在整个系统中
刚才我们看到的流程是
作为单一外部设备控制的流程
但是实际上我们知道输入输出系统
不可能只控制一个外部设备会控制多个
那么如果大家都用查询工作方式的话
它的控制流程就是这样的一个流程
就是首先我们去问
比如一号设备有没有准备好
如果准备好了对1号设备进行处理
如果没有准备好我们就去问2号设备
然后3号设备 4号设备 依次到N号设备这样的来
那么假设我们这样一个情况
我们问1号设备有没有准备好 没有
好 我们就去问2号设备
我们刚问2号设备1号设备已经准备好了
但是CPU感知不到了
它会问2号设备 如果2号设备准备好
它会对2号设备进行处理
然后接着3号4号一直到N号
直到N号设备处理完再回来
它才会发现1号设备早都准备好了
所以如果1号设备的工作速度
相对其他设备都要快得多的话
那么刚才的那一次请求就
CPU就过去了CPU感觉不到了它已经失效了
所以查询工作方式对于
外部设备来讲
它的效率它的实时性是非常低的
就是从这个图里大家就已经能够感觉的出来
对于CPU来讲
它实际上要一个一个去问你有没有准备好
所以对CPU来讲它的效率也是非常低的
也就是说它整个都是是以CPU为核心由它来问
这就相当于
我上课一个一个人问
你懂了没有 你懂了没有 懂了没有
谁没懂我临时要对他答疑
这样子的工作方式显然是
不可能去完成这样一个大班的教学的
所以这样子也是不现实的
因此这种查询工作方式
它有优点 它的巨大的两大缺点就是
CPU的效率低 外部设备的实时性差
因为这样的情况
所以我们就有了第三种的工作方式
就是所谓的中断
中断这个经我们从很早前开始念到现在
中断因为它今天是计算机里非常重要的一项技术
所以我们会有专门的一讲来解释它
今天我们先来说一下 就是这一讲里我们先来说
中断实际上它和查询工作方式比起来
它的最主要的特点就是外部设备的实时性好
这就相当于我们的一种答疑
就说你如果有问题来问我
我就一一对应直接告诉你
对于你来讲 你的时效性非常好
对于我来讲没有人来找我问
我就干我自己的事情
对于这个系统也一样
外部设备有问题了 有需要
它跟CPU发出请求 CPU对它服务
它没有要求了 大家都没有要求了
CPU自己做它的加减乘除
这也就没有问题
所以对于中断方式来讲
外部设备的实时性相当好
CPU的效率也比较高
但是不管怎么样
它还是有不足 不足在哪里
就是它的这种中断控制方式下对数据的传输
毕竟还是通过软件来实现
只要通过程序编写来实现
这个速度高不起来
所以呢 它也只适合一些中速的外部设备
当然相对于查询来讲呢
它就比较复杂一些 这就是它的不足
这样三种工作方式总体来讲
都是通过程序的方式来完成的
都是以CPU为核心的
通过软件的方式来实现我们说它的效率
就是速度都不会太高
那么通过CPU来实现就会有一些问题
就说它的整个的总线就是要由CPU去统一控制的
我们用这个图来描述一下
比如现在我们有数据要输出出去
这个数据肯定来自于存储器
所以它首先要从存储器
通过move指令读入到CPU里
然后再通过out指令输出到接口中
如果说我们现在要输入的话也是一样
通过in指令
把数据从接口输入到CPU
然后再用move指令写入到内存
整个这样一个过程都是以CPU为核心来进行的
那么这些输入也好输出也好
都是要通过总线来进行的
因此CPU要产生相应的各种总线控制信号
就像我们已经非常熟悉的
读信号 写允许信号
以及地址信号 锁存信号等等各种信号
所以也就是说总而言之整个总线的控制权
都是在CPU手里攥着的
这种对于一些高速的外部设备
这种方式我们是不能忍受的
我们希望能够由接口
直接到内存进行信息交换
比如我们的硬盘就是这样
那么这个时候我们就需要有这样一个通路
这个通路就是绕开了CPU 我们直接进行
那么既然绕开了CPU
那么总线的各种控制信号还需不需要呢
同样需要
这个同样需要你又想绕开它
我们就必须要有一个人来替代
这种替代的方式我们就直接进行的方式
我们就是
这种直接替代的方式
我们就称为直接存储器存取
这种时候我们整个总线的控制
不再由CPU来完成
而是用另外一个部件
这种部件我们叫做总线控制器
所以DMA方式的特点就是由外部设备直接
当然通过接口直接跟内存进行信息交换的过程
这个时候总线控制器
临时担当了CPU的角色
也就是临时完成了对总线的控制权
DMA方式我们用这个图
来给大家简单的描述一下
比如现在这样一个外部设备
要实现对内存之间直接进行信息交互
它首先要发出一个请求信号
这个请求信号发给这个叫DMAC的的控件
这个就是总线控制器
这个总线控制器收到这个请求信号以后
它把这个请求信号转送给CPU
这个转送给CPU的信号叫HOLD
这就是我们前面
讲8088主要引脚的时候讲过
它是总线请求输入端
这个信号呢
CPU收到以后CPU会发出一个应答信号
表示它可以允许由
DMAC这个总线控制器来暂时控制总线
它放弃对总线的控制权
DMAC收到这样一个响应信号以后
它要告诉外设它已经拿到总线控制权
然后它就会发出相应的地址信号
读写控制信号
甚至地址指针的修改信号等等
在它的所有的控制下
数据就直接进行信息交互了
这个就是DMA方式的一个简单的描述
用文字来描述的话
这是第一步第二步第三步 我就不在这里念经了
大家可以自己看一下
这就是刚才用那个图来描述的
DMA整个的工作过程
DMA的方式又可以细分为三种
一种我们叫做周期窃取
一种是数据块传送
还有一种真正地叫直接存储器存取
下面两种
对于硬件的要求都相对比较高
所以它的成本会比较高 也就说它会比较贵
今天微机系统里更多采用的是周期窃取
所以下边我们用一个流程图
来描述一下什么叫周期窃取
周期窃取它的前边的几个步骤
跟我们刚才描述的过程没有任何的不同
所谓周期窃取
也就是说它每申请到一次总线的控制权
它只占用一个周期 完成一次转送
然后它就把总线还给CPU一个周期
然后这个周期里
CPU可能会去做一些其他的事情
在这个周期完了以后它再重新去请求总线控制权
这就是所谓周期窃取的模式
好了这就是我们四种基本的输入输出方法
我们现在做一个简单的总结
这四种基本输入输出方法里头
无条件传输方式它的适用范围非常窄
它要求外部设备随时处于准备好状态
我们说来说去
大家说到的无非是开关 发光管等等
或者是各种电子开关
所以这种范围就是一个小范围的应用
我们只是一个很小的例子
大家了解一下就可以了
我们更多的需要大家
一定要知道的是查询工作方式
这个是我们在整个工控系统中
用的比较多的一种方式
也就是它是要外部设备能够提供状态信息
当它满足这个状态时我们才能够
进行信息的交互
它适合于一些低速
而且是多个外部设备
大家速度同样比较低的情况下
我们才适用于这种方式
第三种方式就是中断控制方式
这种方式它就是实现
可以解决外部设备实时性比较差
CPU效率比较低的问题
它适合于一些中速的外设
当然效率最高的是DMA方式
当然它的成本也相对比较高
它是用纯硬件来做的
所以它的效率是很高的
好 有关我们基本I/O方式我们就介绍到这里
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语