第7章 输入输出接口
【本章重点】本章重点介绍输入输出接口的基本概念和输入输出接口的功能;着重讨论不同外设数据传送的不同方法及简单接口的应用。 【本章难点】掌握无条件传送和查询传送的工作原理,难点是接口芯片的应用。
7.1 微型计算机的输入/输出接口 7.1.1 输入/输出接口 1. I/O接口的功能 7.1.1 输入/输出接口 1. I/O接口的功能 一个接口的基本功能是在系统总线和I/O设备之间传输信号,提供缓冲作用,以满足接口两边的时序要求。 寻址功能 输入输出功能 联络功能 速度匹配功能 数据格式转换功能 中断管理功能 可编程功能
2.外设接口的编址方式 每个接口部件都含有一组寄存器,CPU与外设进行数据传送时,各类信息在接口中进入不同的寄存器,一般称这些寄存器为I/O端口,每个端口都有一个端口地址。系统对各种寄存器的操作,实际上是通过寻址,对个端口地址的选择和操作,因此外设接口(I/O端口)有两种编址方式。 (1)外设地址与内存地址统一编址 这种编址方式又称为存储器映射编址方式。在这种编址方式中,将外设接口地址和内部存储器地址统一安排在内存的地址空间中。即把内存地址分配给外设,由外设来占用这些地址。用于外设的这些地址,存储器不能再使用。 (2)外设与内存独立编址 在这种编址方式中,内存地址空间和外设地址空间是相互独立的。例如,在8086CPU中,内存地址是连续的1M字节,从00000H~FFFFFH,而外设的地址范围从0000H~FFFFH。它们相互独立,互不影响。
7.1.2 输入/输出的控制方式 概括起来,在微型计算机系统中,主要有如下4种传送方式解决上述问题: ①无条件传送 ②查询传送 ③中断传送 7.1.2 输入/输出的控制方式 概括起来,在微型计算机系统中,主要有如下4种传送方式解决上述问题: ①无条件传送 ②查询传送 ③中断传送 ④直接存贮器存取(DMA)方式
1.无条件传送 在微机系统中,有一些简单外设.当它们工作时,随时都准备好接收CPU的输出数据或它们的数据随时都是准备好的,CPU什么时候读均可以正确地读到它们的数据。也就是说外设无条件准备好向CPU提供数据或接收CPU送来的数据。在CPU与这样的外设交换数据的过程中,数据交换与指令的执行是同步的。因此也有人称其为同步传送。 无条件传送方式是一种简单的输入输出方式,一般用于控制CPU与低速接口之间的信息交换.例如,开关、温度、压力流量等(A/D)转换器。由于这些信号变换缓慢,当需要采集这些数据时,外设已经将数据准备就绪了,因此无需检查端口的状态,就可以立即采集数据。由于数据保持时间相对于CPU的处理时间长得多,故输入端可直接用输入缓冲器与CPU的数据总线相连。若外设是输出设备,一般要求接口有锁存能力,也就是CPU送给外设的数据应该在接口中保持一段时间,其原因是外设的速度较慢,所以要求CPU送到接口的数据能保持到外设动作相适应的时间。
开关K看作一个简单的外设。K的状态是确定的,要么闭合,要么打开。当计算机通过外设接口读K的状态时,一定会读到指令执行时刻K的状态. 当CPU读接口地址FFF7H时,或门输出为低电平。该电平使输入接口三态门导通,则开关K的状态就由数据线D0读到CPU。判断读入数据D0=0时,K闭合;D0=1时,K打开。
【例7-1】图中外设是简单的发光二极管. 此外设的接口是用锁存器来实现的 【例7-1】图中外设是简单的发光二极管.此外设的接口是用锁存器来实现的.锁存器在打入脉冲CP上升沿将输入端D的数据锁存在它的输出Q端。编写点亮二极管的程序。 MOV AL,81H DX,0000H ;送端口地址 OUT DX,AL ;点亮发光二极管
【例7-2】类似于例1中,让接在Q0~Q7上的二极管自上而下轮流点亮3s,编写程序实现。 程序如下: 程序如下: MOV AL, 01H ;使Q0为1,LED0先亮 LOP: OUT 0000H,AL ;将信息送0000H端口 CALL DELAY 3s ;调用3S子程序 ROL AL,1 ;小循环左移1位 JMP LOP ;循环点亮LED
2.查询方式 无条件传送对于那些慢速的或总是准备好的外设是适应的。但是,许多外设并不总是准备好的。CPU与这类外设交换数据可以采用程序查询方式。 所谓查询方式就是微型计算机利用程序不断地询问外部设备的状态,根据它们所处的状态来实现数据的输入输出。 为了实现这种工作方式,要求外部设备向微型计算机提供一个状态信息。微型计算机校验外部设备所提供的状态信息,即查询外部设备,以便确定它的下一步操作。 图7-3给出了查询工作的示意图。 CPU 接 口 外 设 状态 数据 控制 图7-3查询工作方式示意图
(1)单一外设的查询工作 最简单的情况是单一外设的情况。其采用查询方式传送数据的过程如下所述。如果CPU要从外设接收一个数据,则CPU首先查询外设的状态,看外设数据是否准备好,若没有准备好,则等待;若外设已将数据准备好,则CPU从外设读取数据,接收数据后,CPU向外设发响应信号,表示数据已被接收。外设收到响应信号后,即开始下一个数据的准备工作。 若CPU需要向外设输出一个数据,同样,CPU首先查询外设的状态,看其是否空闲,若正忙,则等待;若外设准备就绪,处于空闲状态,则CPU向外设送出数据和输出就绪信号。就绪信号用来通知外设;CPU送来有效数据。外设接收数据后,向CPU发出数据已收到的状态信息。这样,一个数据的输出过程就告结束。 取外设状态 外设准备就绪 传送数据 传送完否 开始 N Y 结束
【例7-3】如图7-5所示,现欲将48000H为首地址的顺序100个单元的数据,利用查询方式输出到外设。外设经输入输出接口与8086的系统总线连接。CPU通过三态接口(74LS244)可以查询外设的状态,而且当外设状态信号=1时,可以接收CPU由锁存器(74LS273)输出的数据。=0时,表示外设处于忙状态,不能接收数据。 程序如下: START: MOV AX, 4000H DS, AX SI, 8000H CX, 100 GOON: DX, 00FFH WAIT: IN AL, DX AND AL, 01H JZ WAIT AL, [SI] OUT DX, AL INC SI LOOP GOON RET
图7-5 查询工作方式的I/O接口
上面我们介绍了单个外设利用查询方式的工作情况。当系统中有多个外设时,查询方式工作的流程成图如图7-6所示。 (2)多个外设查询工作方式 上面我们介绍了单个外设利用查询方式的工作情况。当系统中有多个外设时,查询方式工作的流程成图如图7-6所示。 从图可以看出,CPU逐个外设进行查询。若发现那个外设准备就绪,就对该外设实施数据传送。然后再对下一外设查询,依次循环。从而可以实现,在查询过程中,CPU不能做别的事情,这就大大降低了CPU的效率。而且,假如某一外设刚好在查询过后处于就绪状态,那么它必须等到CPU查询完所有外设,再次查询此外设时才能发现它处于就绪状态,而后对此外设服务。这样就不能对外设进行实时数据交换,这对许多实时性要求较高的外设来说,就有可能丢失数据。 1号外设 准备就绪? 2号外设 3号外设 n号外设 对1号外设服务 对2号外设服务 对3号外设服务 对n号外设服务 Y N Y N Y N Y N
§7.2简单接口 7.2.1三态门接口芯片 根据前面内容的介绍,大家已经了解到主机与外设之间的连接必须通过接口芯片来完成信息的传送,如:信息的放大、隔离以及锁存。接口芯片的类型非常繁多,在此我们介绍几种常用的简单的接口芯片。 一个典型的三态门接口芯片(74LS244)如图7-7所示。其中,DO0~DO7为8个输入端,IO0~IO7为8个输出端,, 是两个控制端,低电平有效,当控制端有效时,三态门导通;当它们为高电平时,相应的三态门口呈现高阻状态。三态门只能作为输入信号接口而不能作为输出接口,这是因为74LS244三态门本身没有对信号的保持或锁存能力。 图 7-7 74LS244简单示意图 图 7-8 74LS374简单示意图
7.2.2锁存器接口芯片 前面提到的三态门器件,可以用作固定状态的输入接口。但是,由于它没有保持(或称锁存)数据的能力,无法直接用它实现数据的输出接口。最简单的输出接口芯片74LS374,它是一种带有三态输出的锁存器,其引线图如图7.8所示。其中D0~D7为8个输入端,Q0~Q7为8个输出端,为允许输出信号,低电平有效,CP脉冲上升沿锁存,与8086CPU连接时,一般接ALE引脚。只有当=0时,74LS374的输出三态门才导通。=1时,74LS374的输出呈现高阻状态。由于74LS374是8位的带有三态输出的锁存器,具有更大的使用灵活性,故它既可以作为输入接口,又可以用作输出接口。 以下我们举例说明各接口的使用。
7.2.3简单接口举例 1.已知8D锁存器74LS374用作输出接口,与CPU总线连接图如图7-9所示。试编制一个接口程序,使其在Q0输出端产生一个周期和幅度均任意的方波,如图所示。 D0~D7 Q0 CP 74LS374 AEN 270H 图7-9方波输出接口电路
MOV DX,270H ;DX指向输出端口 MM: AL,01H OUT DX,AL ;输出方波的上升沿 CALL DELAY ;延时 AL,00H JMP MM ;循环
2.LED数码管 (1)LED数码管分为共阳和共阴两种结构,在此只介绍一种共阳封装的LED数码管,如图7-10所示。 图 7-10 共阳LED数码管的示意图
(2)接口电路 这段七段LED数码管与微机系统总线有多种接口方式。此处介绍用74LS138作为译码器进行选片,用74LS273作为输出接口,用三态门作为按钮K的输出接口,其连接图如图7-11所示。 在图7-11中,要使数码管显示某数字或符号,必须用软件来产生相应的数据。这是因为接口电路中没有硬件译码器。例如,要显示数字3,则LED的a、b、c、d、g各段应亮而e、f应不亮。结合图,则应向74LS273写数据4FH。为了方便,可在内存中建立有关显示的数字(或符号)与相对应输出数据的对应表。 下面一段程序可判断按钮的状态。当K闭合时,显示3,当K断开时显示6。
START: MOV DX,00F1H IN AL,DX TEST AL,01H JNZ KOPEN DX,00F0H AL,4FH OUT IN AL,DX TEST AL,01H JNZ KOPEN DX,00F0H AL,4FH OUT DX,AL JMP START KOPEN: AL,7DH 图7-11 LED数码管及按钮的一种接口电路