第六章 输入输出与中断,主讲教师:胡晓娟 中国矿业大学理学院 物理系,2,主要内容,6.1 输入输出接口概述 6.2 CPU与外设之间数据传送的方式 6.3 中断技术 6.4 8086/8088的中断系统和中断处理,3,学习要求,着重理解接口基本结构的特点; 掌握CPU与外设之间数据的传送方式与控制方式; 正确理解中断源、向量中断、中断优先权等基本概念; 重点掌握8086/8088中断系统及其用户定义的内部中断处理方法,能正确理解和灵活运用中断向量表 掌握中断子程序的设计与驻留内存的方法4,6.1 输入输出接口概述,6.1.1 CPU与外设间的连接 I/O接口是主机与I/O设备之间所设置的逻辑控制部件,通过它实现主机与I/O设备之间的信息交换 接口有两类: 辅助接口电路:接收时钟、中断请求信号等; 输入/输出接口电路:连接外部设备 接口电路的特点:可以通过编程来规定其功能及操作参数(可编程性),5,CPU,MEM,I/O设备,I/O电路,,,,,,,,AB (地址总线),DB (数据总线),CB(控制总线),控制线,状态线数据线,存储器(内存)与计算机的连接可以直接挂到总线(DB、AB、CB)上; 外设与计算机的连接必须通过各自的专用接口电路(接口芯片)与CPU的总线相连。
CPU与I/O设备的连接示意图,,,,6,一般情况下,存储器可以与总线直接相连,而外设却需要通过接口与CPU总线相连,原因是: 存储器: 功能单一 传输方式单一(一次一个字或一个字节) 操作方式单一(读和写) 制造工艺与CPU相似,速度与CPU相匹配(Cache的引入) 外设: 种类繁多(输入、输出、输入/输出、检测、控制) 信号种类不一(A、D、开关量) 同一个时刻CPU通常只和一个外设交换信息 工作速度不同,接口:屏蔽以上差异,协调、匹配外设与主机正常工作的逻辑部件及相应控制软件7,存储器与外设的比较,8,6.1.2 接口电路的基本结构 接口电路的基本结构同它传送的信息种类有关 信息的分类:数据信息、状态信息和控制信息 数据信息(最基本的一种信息) 数字量:通常为8位或16位的二进制数或ASCII码 模拟量:用模拟电压或模拟电流幅值大小表示的物理量 开关量:只有两个状态,用一位二进制数“0”或“1”即可表示如开关的 开和闭,电机的启动和停止等数据信息是通过数据通道传送的,9,模拟量:当计算机用于检测、数据采集或控制时,大量的现场信息是连续变化的物理量(如温度、压力、流量、位移、速度等)经传感器把非电量转换成电量并经放大得到模拟电流或电压。
计算机不能直接接收模拟量,必须经过A/D转换,才能输入计算机;而计算机输出的数字量也必须经D/A转换后才能去控制执行机构10,2. 状态信息 反映外设当前所处工作状态的信息,以作为CPU与外设间可靠交换数据的条件 当输入时,它告知CPU:有关输入设备的数据是否准备好(Ready=1?); 当输出时,它告知CPU:输出设备是否空闲(Busy=0?) CPU是通过接口电路来掌握输入输出设备的状态,以决定是否可以输入或输出数据 3. 控制信息 用于控制外设的启动或停止11,I/O端口即I/O接口的寄存器,接口中的每个寄存器都有一个端口地址,每个I/O接口都有一组寄存器 数据端口 状态端口 控制端口 数据信息、状态信息、控制信息都通过总线传输,但放在接口的不同寄存器中 输入输出的数据放在数据缓冲器 输入的状态信息放在状态寄存器 输出的控制信息放在控制寄存器 CPU与外设的交流就是CPU与接口的寄存器(端口)交流,,12,根据传送不同信息的需要,接口电路的基本结构安排有如下特点: (1)3种信息的性质不同,应通过不同的端口分别传送 如数据输入输出寄存器(缓冲器)、状态寄存器、命令控制寄存器各占一个端口,每个端口都有自己的端口地址,故能用不同的端口地址来区分不同性质的信息。
(2)在用输入输出指令(IN/OUT)来寻址外设(实际寻址端口)的CPU中,外设的状态作为一种输入数据,而CPU的控制命令,是作为一种输出数据,从而可通过总线来分别传送13,(3)端口地址由CPU地址总线的低8位或低16位地址(如8086用DX间接寻址外设端口时)信息来确定,CPU根据I/O指令提供的端口地址来寻址端口,然后同外设交换信息CPU,,I/O设备,数据 I/O 缓冲器,中断控制逻辑,命令控制 寄存器,状态寄存器,接口电路基本结构及连接,DATA,STATUS,CONTROL,AB,DB,M/IO,WR,RD,INTR,接口,(端口地址),14,在8086/8088指令系统中,输入输出指令对I/O端口的寻址可采用直接或间接寻址两种方式 直接端口寻址:I/O端口地址以8位二进制立即数方式在指令中直接给出所寻址的端口号只能在0 ~ 255范围内(00H ~ 0FFH) 例:IN AL, 40H ; 将40H端口中字节内容传送到累加器AL中 间接端口寻址:16位的端口地址在DX寄存器中,即通过DX间接寻址,可寻址的端口号为0 ~ 65535 (0000H ~ 0FFFFH) 例:OUT DX, AL ; 将AL的内容输出到(DX)指出的端口中去,回顾:I/O端口寻址方式及数据传送指令,IN 累加器, 端口号 ; 将指定端口中的内容输入到累加器AL/AX中 OUT 端口号, 累加器 ;将累加器AL/AX中的内容输出到指定的端口,15,访问接口的过程: CPU先将地址信息发送到地址总线,将确定的控制信息发送到控制总线(打开相应端口) CPU传输数据信息到数据总线上等待相应端口接收,或者CPU等待接口把指定端口的内容送到数据总线上(收发数据) 注意:地址是端口(寄存器)的地址,而不是接口部件的地址,一个接口部件包含多个端口,即多个地址。
16,6.2 CPU与外设之间数据传送的方式,1. 程序传送 无条件传送(同步传送) 程序查询传送(条件传送 —— 异步传送) 2. 中断传送 3. 直接存储器存取(DMA)传送,17,程序传送,程序传送是指在程序控制(即IN或OUT指令控制)下进行数据传送CPU主动) 程序传送是CPU与外设间最简单的一种数据传送方式 程序传送分为两种方式: 无条件传送方式 有条件传送方式,18,无条件传送(同步传送) 只对固定的外设在规定的时间用IN或OUT指令来进行信息的输入或输出,其实质是用程序来定时同步传送数据 一般,这些外设随时作好了数据传送的准备,无须检测其状态 对少量数据来说,这是最省时间的一种传送方式,适用于各类巡回检测和过程控制19,无条件传送方式 如果CPU能够确信外设准备就绪,就不用查询外设的状态而可以直接进行数据传输 例如:CPU要输出一个数据到显示器显示,由于显示器是可以根据输入数据而随时改变显示内容的设备,因而CPU就可以直接向其发送数据,而无需查询 无条件传送方式程序设计简单,适应的操作也比较简单,但能够采用这种方式工作的外设较少20,输入缓冲(隔离外设数据) 输入数据时,因简单外设输入数据的保持时间相对于CPU的接收速度来说较长,故输入数据通常不用加锁存器来锁存,而直接使用三态缓冲器与CPU总线相连即可。
输出锁存(锁存CPU的数据) 输出数据时,一般都需要锁存器将要输出的数据保持一段时间,其长短和外设的动作相适应锁存时,在锁存允许端CE=1时,数据总线上的新数据不能进入锁存器只有当确知外设已取走CPU上次送入锁存器的数据,方能在CE=0时将新数据再送入锁存器保留21,锁存器,三态 缓冲器,端口地址译码器,,&,&,,,,,,,,,,,,,,,,,,至CPU,来自输入设备的数据,至输出设备 的数据,RD,WR,CE,CE,AB,M/IO,无条件程序传送的输入输出方式,1~8,1~8,1~8,1~8,,,IN AL, PORT,OUT PORT, AL,DB,22,输入:在输入时,假定来自外设的数据已输入至三态缓冲器,于是当CPU执行IN指令时,所指定的端口地址经地址总线的低16位或低8位送至地址译码器,CPU进入了输入周期,选中的地址信号和M/IO(以及RD)相“与”后,去选通输入三态缓冲器,把外设的数据与数据总线连通并读入CPU当CPU执行IN指令时,外设的数据必须是已准备好的,否则会出错 输出:在输出时,假定CPU的输出信息经数据总线已送到输出锁存器的输入端;当CPU执行OUT指令时,端口的地址由地址总线的低8位地址送至地址译码器,CPU进入了输出周期,选中的地址信号和M/IO(以及WR)相“与”后,去选通锁存器,把输出的数据送至锁存器保留,由它再把信息通过外设输出。
当CPU执行OUT指令时,必须确信所选外设的锁存器是空的23,例:一个采用同步传送的数据采集系统 被采集的数据是8个模拟量,由继电器绕组P0、P1、…、P7分别控制触点K0、K1、…、K7逐个接通 每次采样用一个4位(每位为一个十进制数)数字电压表测量,把采集的模拟量转换成16位BCD代码(即对应4位十进制数的4个BCD码),高8位和低8位通过两个不同的端口(其地址分别为11H和10H)输入 CPU通过端口20H输出控制信号,以控制某个继电器的吸合,实现采集不同通道的模拟量24,CPU,,,DB,缓冲寄存器 功率放大器,,20H,,,,11H,,10H,高8位 低8位 4位数字电压表,,,M/IO · RD · 11H,M/IO · WR · 20H,,,,,,输入数据(模拟量),P0,P1,P7,…,K0,K1,K7,…,无条件输入的数据采集系统结构框图(16位精度),端口地址译码,,AB,M/IO · RD · 10H,控制信号,25,采集过程要求: 先断开所有的继电器线圈及触头,不采集数据; 延迟一段时间后,使K0闭合,采集第1个通道的模拟量,并保持一段时间,以使数字电压表能将模拟电压转换为16位BCD码; 分别将高8位与低8位BCD码存入内存,完成第1个模拟量的输入与转存; 利用移位与循环实现8个模拟量的依次采集、输入与转存。
26,输出控制:P0 ~ P7(20H) 输入采数:电压表数(10H、11H) 数据采集程序: START: MOV DX, 0100H ;DH←01H,置吸合第1个继电器代码 ;DL←00H,置断开所有继电器代码 LEA BX, DSTOR ;置输入数据缓冲器的地址指针 XOR AL, AL ;清AL及进位位CF AGAIN: MOV AL, DL OUT 20H, AL ;断开所有继电器线圈 CALL NEAR DELAY1 ;模拟继电器触点的释放时间(延时1),27,MOV AL, DH OUT 20H, AL ;先使P0吸合 CALL NEAR DELAY2 ;模拟触点闭合及数字电压表的转换时间 IN AX, 10H ;输入, AL←(10H) AH←(11H), MOV [BX], AX ;存入内存 INC BX INC BX RCL DH, 1 ;DH左移1位,为下一个触点吸合作准备 JNC AGAIN ;8位都输入完了了吗?没有,则循环 DONE: ↘ ;输入已完,则执行别的程序段,28,程序查询传送(条件传送——异步传送) 程序查询传送是有条件的异步传送,条件是: 在执行输入(IN指令)或输出(OUT指令)前,要先查询接口中状态寄存器的状态。
输入时,由该状态信息指示要输出的数据是否已“准备就绪”; 输出时,由该状态信息指示输出设备是否“空闲” 由此条件来决定执行输入或输出29,CPU执行程序不断读取并测试外设的状态,如果外设处于准备好(输入)或空闲(输出)状态,则执行输入或输出指令,进行数据交换,否则等待 完成一次数据传送的过程: CPU从状态端口读取外设的状态字; CPU。