第五章 数字量输入输出

更新时间:2024-05-15 23:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

4第五章 数字量输入输出

主要内容:本章介绍I/O接口的定义,I/O接口芯片的应用以及CPU系统总线。

第一节 概述

【知识点】

※1、I/O接口的信息组成; ※2、CPU对I/O的控制方式; ※3、I/O的传递方式。

微型计算机的构成,除了CPU和存储器外,还包括输入设备和输出设备(合称外部设备)。在微机系统中,最常用的外部设备有键盘、显示器、打印机、磁盘机等。CPU对各种外部设备的电路连接及管理驱动程序就是输入(输出)接口技术(简称I/O)。

输入/输出(I/O)接口电路是计算机系统的重要组成部分。通过I/O接口可实现计算机与外部设备的通信,与外部设备交换信息,在工业控制系统中,I/O接口电路还可以通过A/D转换器或D/A转换器与各种工业检测和控制仪表相连,进而来控制工业现场。

通常,微型计算机I/O讨论的内容分为数字量和模拟量两部分。本章我们在了解I/O的基本概念和原理之后,重点介绍几种典型的数字I/O电路,至于模拟量I/O,留待第六章中专门讨论。

一、I/O接口

(一)I/O的信息组成

一切信息在存储器中的存放都是以二进制数的形式,在I/O操作中,由于与外界联系,这些信息按各自的作用可分为:

1、数据信号

数据信号是I/O的主要内容,例如我们从键盘上输到计算机内部的信息,从外部采集到的测量值,及由输出设备如CRT显示的内容,或输出CPU运算的

结果,都属于数据信号。当然这些信息是按一定的编码标准(例如是二进制格式,还是ASCII码标准),每若干位组合表示一个数字或符号。

2、状态信号

CPU与I/O设备进行数据传送时,往往需要了解I/O设备的状态。例如在打印作业中,打印机是否忙,打印纸是否用尽。只有在各种状态都处于“准备好”的情况下,才能可靠地传送数据信号。对于每一种二值状态,可以用一位二进制数表示。如输入的字节D7=1表示“忙”,D7=0表示“不忙”;D6=1表示“纸尽”,D6=0表示“有纸”等。CPU输入这些信号,在逐位进行测试,就可以清楚地了解设备的当前状态。在输出时,输出设备是否有空(Empty),若输出设备正在输出信息,则以忙(Busy)进行指示。

3、控制信号

控制信号实在数据传送过程中,CPU发给I/O设备的命令。一个输出字节的每一位可以表示一个开关命令,如D0=1时,控制设备“上电”,D1=1时,控制设备“启动”等。

说明:状态信号和控制信号是与数据是不同性质的信息,必须要分别传送。但在大部分微型机中,只有通用的IN和OUT指令,因此,外设的状态必须作为一种数据信息输入,而CPU的控制信号,也必须作为一种数据输出。为了使它们相互之间区分开,它们必须有自己的端口地址。

端口:计算机中所有能被指令直接寻址的I/O口被称为端口。每个端口均有各自的编号即端口地址。一个端口地址只能对应一个端口,决不允许两个端口共用一个地址,否则寻址时将发出混乱。

所以,数据需要一个端口,外设的状态需要一个端口,CPU才能将外设的状态读入,了解外设的运行情况,CPU的控制信号往往也需要一个端口输出,以控制外设的正常工作。所以,一个外设或接口电路往往有几个端口地址,CPU寻址的是端口,而不是笼统的外设。

(二)I/O接口的构成

一个典型的I/O接口,其中一般既有数据端口,又有状态及控制端口。每个I/O端口对应于一个I/O地址。从硬件上看,端口可以理解为寄存器(输入有缓冲器,输出有锁存器)。CPU用I/O指令(IN、OUT)对其直接访问,课本图5.1中,接口电路通常占有三个I/O口地址(亦称端口地址),分别对应数据断

口,状态端口和控制端口。其中数据端口可以是双向的,而状态端口只作输入操作,控制端口只作输出操作。有时候两个端口(控制端口和状态端口)合用一个端口地址,再用“I/O写”(IOW)或“I/O读”(IOR)信号来分别择一访问。

二、I/O的传递方式

CPU内部的数据总线是并行的(课本第16页),但I/O设备有并行,串行之分,因此传送信息方面也就有了两种方式:即并行I/O,串行I/O。

(一)并行I/O

数据的并行I/O将信息以字节(或字)为单位进行传递,其中各位同步地收发,这种方式适用较近距离,它们的特点是传送速度快。这种方式接口数据通道宽,硬件开销大。打印机以并行方式与主机相连。

(二)串行I/O

用软件或硬件的方法将每个字节(或字)拆开,然后位(Bit)为单位来进行传送的方式称为串行I/O。它运用于远距离,它的传送特点:传送速度低,但可利用电话线等设备进行信息传送,且抗干扰能力强。此时,硬件开销小,数据通道窄,调制调解器(Modem)。

三、I/O端口的寻址方式

微型计算机常用两种I/O端口的寻址方式:存储器映像寻址和I/O端口单独寻址。

(一)存储器映像寻址

给每个I/O端口分配一个存储器地址,每个I/O端口被看作一个存储单元,纳入统一的存储器地址空间,于是可用访问存储器的方法来访问I/O端口。

这种方式的主要优点是:勿须专用的I/O指令及接口信号;CPU对存储器数据的处理指令非常丰富,可全部用于I/O操作,使I/O的功能更加灵活。

(二)I/O端口单独寻址

这种情况下,CPU使用专门的I/O指令及I/O控制信号来访问I/O端口。其特点:I/O端口和存储器分别编址,各自都有完整的地址空间,而且由于有专用的I/O指令,在程序清单中对I/O端口的访问和对存储器的访问一目了然。

以上两种I/O端口的寻址方式,优缺点正好互补,微型计算机中都有所使用。Intel公司8086/8088系列CPU使用的是I/O端口的单独寻址。

四、I/O的控制方式

不同的控制方式都是为了使数据传送的双方协调地工作,I/O的控制方式主要有以下四种。

(一)无条件传送方式(同步传送方式)

这种控制方式下,CPU已认定外设做好输入或输出准备,所以不必查询外设的状态,而直接与外设进行数据传送。这种传送方式的特点:硬件电路和程序设计都很简单,常常用于对外设要求不高的系统,如交通灯管理,路灯管理和广告牌显示系统中。

(二)查询传送方式(条件传送方式)

查询方式是指主机(CPU)在数据传送(包括读入和写出)之前,要检查外设是否“准备好”,若没有“准备好”,则继续查询其状态,直至外设准备好了,即确认外部设备还具备传送条件后,才能进行数据传送,同时CPU输出一个控制命令清除“准备好”信号。至此,一次数据传送完成。

“准备好”的含义:对于输入设备而言,即输入数据寄存器已满—准备好新数据供CPU读取;对于输出设备来说,即输出数据寄存器已空—原有数据已被使用,可以接收CPU送来的新数据。

特点:

错误!未找到引用源。、优点:在这种方式下传送数据比无条件传送数据的可靠性高,接口电路也比较简单,硬件开销小,在CPU不忙,传送速度要求不高的情况下采用。

错误!未找到引用源。、缺点:由于I/O设备的速度较慢,每准备好一次传送要较长时间,也就是说CPU每传送一个数据,需花费很好时间来等待外设进行数据传送的准备,且CPU外设也不能同时工作,各种外设也不能同时工作,因此,信息传送的效率非常低。流程如下:

三、中断方式

查询方式传送比无条件传送可靠性高,因此使用场合也较多。但在查询方式下,CPU主动地读取状态字和检测状态位。如果状态位表明外设未准备好,则CPU必须等待。这个过程占用了CPU大量的工作时间,而CPU真正用于传输数据的时间却很少,计算机效率很低。

另外,如果一个系统有多台外设,使用查询方式工作时,由于CPU只能轮流对每个外设进行查询,而这些外设速度往往并不相同,这时CPU显然不能很好地满足各个外设随机性地对CPU提出的输入/输出服务要求,因而不具备实时处理能力。可见在实时系统以及多个外设系统中,采用查询方式进行数据传送往往是不适宜的。

为了提高CPU的效率使系统具有实时输入/输出性能,

可采用中断方式。中断传送方式的特点是:外设具有向CPU申请服务的能力。当输入设备已将数据准备好,或输出设备可以接收数据时,便可以向CPU发出中断请求,CPU可中断正在执行的程序而和外设进行一次数据传送。待输入操作或输出操作完成后,CPU再恢复执行原来的程序。当查询工作方式不同的是,这时的CPU不用去不断地查询等待,而可以去处理其它的工作。因此,采用中断方式时,CPU和外设是处于并行工作的状况下,这样就大大提高了CPU的效率。

(四)DMA方式(直接存储器存取方式)

中断控制方式虽然具有很多优点,但对于传送数据量很大的高速外设,如磁盘控制器或高速的数据采集器,它又满足不了速度方面的要求。中断方式和查询方式一样,仍然是通过CPU执行程序来实现数据传送的。每进行一次传送,CPU都必须执行一遍中断服务程序。错误!未找到引用源。而每执行一次中断服务程序,CPU都要保护断点和标志,这要花费CPU大量的处理时。此外,错误!未找到引用源。在服务程序中,通常还需要保护寄存器和恢复寄存器的指令,这些指令又需要花费CPU的时间。错误!未找到引用源。对于8086/8088系列的CPU来说,内部结构中包含了总线接口单元BIU和执行单元EU,它们是并行工作的,即EU在执行当前指令时,BIU要把后面将要执行的指令取到指令队列中缓存起来。但一旦转去执行中断服务程序,指令队列中的指令就要被废除,EU必须等待BIU将中断服务程序中的指令取到指令队列中才能开始执行程序。同样返回断点时,指令队列中的指令也要被废除,EU又要等待BIU重新装入从

统主板上的RAM奇偶检验错误及扩展槽中的I/O通道错。以上三者任何一个都可以单独提出中断请求,但是否真正形成NMI信号,还要受NMI屏蔽寄存器的控制。当这个寄存器D7=1时,才允许向CPU发出NMI请求信号。NMI被响应时,8088自动生成中断类型号2,再转入相应得服务程序。

所以产生NMI信号有两个条件:

错误!未找到引用源。、NMI屏蔽寄存器的 D7=1;错误!未找到引用源。、上述三种中断源向CPU发出中断请求。

2、可屏蔽中断INTR

若是一个高电平信号加到CPU的第18引脚(INTR引脚)且中断允许标志IF=1,则可以产生一次可屏蔽中断。那么当IF=0时,INTR的中断请求被屏蔽。在PC/XT中,所有可屏蔽的中断源都先经过中断控制器8259A管理后,再向CPU发出INTR请求。综上学习,我们得出结论:8086/8088CPU提供的能接收外部中断申请的引脚是第17引脚(NMI)和第18引脚(INTR)。这两种中断的区别是:NMI不可用软件屏蔽,而INTR中断可用软件屏蔽;NMI中断请求信号必须是一个由低到高的上升沿,而INTR中断请求信号高电平有效。

三、中断响应 (一)中断处理过程

一个完整的中断处理过程包括:中断请求、中断排队、中断响应、中断处理和中断返回等环节。

1、中断请求

中断请求是中断源向CPU发出中断请求信号。外部设备发出中断请求信号具备两个条件:错误!未找到引用源。、外部设备工作告一段落;错误!未找到引用源。、系统允许外设发出中断请求。

2、中断排队

中断申请是随机的,有时会出现多个中断源同时提出中断申请。但CPU每次只能响应一个中断源的请求。那么究竟先响应哪一个中断源的请求呢?这就必须根据中断源工作性质的轻重缓急,预先安排一个优先级顺序,当多个中断源同时申请中断时,即按此优先级顺序排队,等候CPU的处理。

优先顺序:

3、中断响应

经中断排队后,CPU收到一个当前申请中断的中断源中优先级别最高的中断请求信号。CPU在响应中断后,执行完当前指令,就中止现行程序,响应中断申请。此时,首先由硬件电路保护断点,将CPU的标志寄存器FLAGS中的内容压入堆栈,并清除IF和TF位。然后再将代码段寄存器CS和指令指针压入堆栈。至此,栈顶六单元中保存了返回断点时需要的信息。

4、中断处理

中断响应后,进入中断处理,即执行中断服务程序。在中断服务程序中,首先要保护现场,把中断服务程序中所要使用的寄存器内容保存起来,如将它们压入堆栈,然后才进行与此中断有关的相应服务程序处理。在中断服务处理时,首先寻找中断服务程序的入口地址,包括CS和IP共4个字节。中断源的入口地址顺序地方在RAM的低地址区(00000H~3FFH)称为中断矢量表中,在中断响应后,根据中断类型号n,到中断矢量表中,从地址0000:4*n开始连续取四个单元内容分别装入IP和CS,然后CPU以新的CS和IP转向中断服务程序。

5、中断返回

中断服务完成后,程序的最后一条指令一般都是IRET,当CPU执行这条指令时,将栈顶六单元的内容依次弹到IP、CS和FLAGS中,于是恢复主程序运行。

四、可编程中断控制器Intel8259A

Intel8259A可编程控制器,用于管理外部可屏蔽的中断请求。因为CPU芯片的外部请求引脚INTR只有一根,但外部的中断源可以有多个如时钟、键盘串口并口和软盘等多个中断源。所以PC系列机中,用Intel8259A来协助CPU管理外部中断源。一片8259A管理8级中断源,在PC-AT机中用两片8259A级联管理16级中断源。若用9片8259A级联不用附加外部电路就能管理64级中断源。

(一)8259A的内部结构

8259A主要由以下几部分组成:错误!未找到引用源。、中断请求寄存器IRR;

错误!未找到引用源。、中断屏蔽寄存器IMR;错误!未找到引用源。、中断服务寄存器ISR;错误!未找到引用源。、优先权判断电路;错误!未找到引用源。、控制逻辑;错误!未找到引用源。、数据总线缓冲器;错误!未找到引用源。、读写控制逻辑;错误!未找到引用源。、级联缓冲器/比较器。

各部分功能:

错误!未找到引用源。、中断请求寄存器IRR

IRR是一个8位的锁存器,用来锁存外部的设备送来的IR0~IR7的中断请求信号。外部设备若有中断请求送到IR0~IR7就将其锁存到IRR寄存器的相应位,此寄存器可被CPU读出。

错误!未找到引用源。、中断屏蔽寄存器IMR

IMR是一个8位的寄存器,用来设置中断请求的屏蔽信号,当此寄存器的第i位被置1时,则与之对应的IRi中断申请线被屏蔽,这些屏蔽位能禁止IRR寄存器对应的置1位发出的中断请求信号,屏蔽优先级较高的中断请求输入,不会影响优先级较低的中断请求输入。因此,可用软件方法设置IMR改变优先级别。

错误!未找到引用源。、中断服务寄存器ISR

ISR是一个8位的寄存器,用来存放当前正在服务的中断级。响应中断后,8259A收到第一个中断响应信号INTA时,由优先权判决电路,根据IRRi请求位的优先级别和IMR中屏蔽位的状态,将允许中断的最高优先级请求选通到ISR。使ISR相应位置1,表明该位对应的中断源正在服务。因此用ISR来存放正在被服务的所有中断级,包括尚未服务完而中途被受高优先级打断的中断级。在处理某一级中断的整个过程中,ISR与之对应位一直保持为1。只有当它被服务完毕,在返回之前,才由中断结束命令EOI将其清零,在不进行中断服务时,ISR各位均为0。

错误!未找到引用源。、优先权判断电路

优先权判决电路用来识别和管理各中断请求信号的优先级别。当N个中断请求同时出现时,由优先权判决电路根据控制逻辑规定的优先级别和IMR的内容,判断哪一个信号的优先级别最高,CPU首先响应优先级别最高的请求。把优先权最高的IRR置1位送ISR中。当8259A正在为某一级中断请求服务时,若又出现另一请求信号,则优先权判决电路判断新提出的中断申请的优先级别,

是否高于正在处理的那一级中断,如果高于则进入多重中断处理。

错误!未找到引用源。、控制逻辑

8259A的控制电路中,有一组初始化命令字ICW1~ICW4,和一组工作命令OCW1~OCW3。控制逻辑电路,按照编程设定的工作方式来管理8259A的全部工作。在IRR中有未被屏蔽的中断请求置1时,控制逻辑使INTR引脚输出高电平,向CPU发出中断请求。中断响应期间,它使中断优先级别最高的ISR相应位置1,同时使相应的IRR的位清零,并发出相应的中断矢量码到数据总线上。中断服务结束时,按照编程规定的方式结束处理。

错误!未找到引用源。、数据总线缓冲器

这是一个8位的双向三态缓冲器,用作8259A与系统总线D0~D7的接口。8259A通过数据缓冲器接收CPU发来的控制字。

错误!未找到引用源。、读写控制逻辑

此电路用来接收来自CPU的读写命令,完成规定的操作。在CPU写入8259A,通过OUT命令使WR有效,把写入8259A的命令字送到相应的ICWi和OCWi内,将相应IRR、ISR和IMR寄存器的内容输出到数据总线上,读入CPU。

错误!未找到引用源。、级联缓冲器/比较器。

这个功能部件用在级联方式的主~从结构,用来存放和比较系统中各个8259A的从设备标志ID0。当此部件相关的有3根级联线CAS0~CAS2和主从设备/缓冲器读写线SPEN。

3根级联线CAS0~CAS2用来构成8259A的主~从式控制结构。当某个8259A作主设备时,它的CAS0~CAS2是输出引脚。当8259A作从设备时,它的CAS0~CAS2是输入引脚。在系统中应将8259A的CAS0~CAS2对应端互联。编程时,8259A的从设备标志保存在它的级联缓冲器内,在中断响应期间,首先主8259A把申请中断级别最高的从设备标志码输出到级联线CAS0~CAS2上;接着从8259A把收到的从设备标志码同级缓冲器保存的从设备标志进行比较;最后,在随后的第二个INTA脉冲期间,与主设备标码一致的从8259A被选中,而把中断矢量码送到数据总线上。

SPEN是双向功能引脚,低电平有效。它有两种功能:第一种,当处于缓

冲方式时,(所谓缓冲方式是8259A数据引脚与系统总线之间加双向数据缓冲器8286),此时,它起EN作用的输出引脚,用于控制缓冲器接收和发送数据方向的控制信号。第二种:当不处于缓冲方式时,它是输入引脚,用作主从设备标志。当SP=1时,用来指明8259A是主设备,而当SP=0时,用来指明8259A是从设备。

(二)8259A的引脚

8259A是一种具有28引脚双列直插式封装的大规模集成电路专用芯片。 错误!未找到引用源。、D0~D7:数据总线双向与CPU的通道。

错误!未找到引用源。、CS:片选信号,输入,低电平有效。它有效就表示正在访问该8259A。一般接至地址译码器输出。

错误!未找到引用源。、RD:读信号,输入,低电平有效,它有效表示由8259A读至CPU。

错误!未找到引用源。、WR:写信号,输入,低电平有效,它有效表示写信号至8259A

错误!未找到引用源。、CAS0~CAS2:3根级联线。 错误!未找到引用源。、INTA:中断响应信号,输入。

错误!未找到引用源。、INT:中断请求信号,输出。8259A用此线向CPU发送中断请求信号。接至CPU的INTR引脚。

错误!未找到引用源。、IR0~IR7:由外部设备或其它向8259A输入中断请求信号。

错误!未找到引用源。、SPEN:主从设备的设定/缓冲器读写控制。 错误!未找到引用源。、A0:地址选择信号,用于对8259A部的两个可编程寄存器的选择,与地址线进行连接。

(三)8259A的级联

我们知道一片8259A可管理8级中断源,那么如果我们要管理多于8个中断源的中断,我们又如何进行呢?实际上8259A在芯片的设计过程中,已经考虑到了这个问题,这就是利用级联的方法,将多片8259A连接在一起来管理多于8个中断源的中断系统。

(四)8259A的编程

在使用8259A时,除了按规定的信号接好电路外,还必须用程序选定其工作状态,例如中断请求的优先权分配,中断屏蔽、中断矢量等等,每一种状态都由一个命令字或一个命令字中的某些位来规定。8259A的命令字可分为初始化命令字ICW(Initialization Command Word)和工作命令字OCW(Operation Command Word)两种,因此,8259A的编程也分为初始化编程和工作编程两步。在8259A内部,有相应的一组寄存器分别将这些命令字锁存以控制其工作。

1、8259A寄存器的读写

对于8259A的内部寄存器,除了在编程时CPU可用输出指令对它们逐一写入外,在查询状态时还可用输入指令将其内容读出。为了寻址各寄存器,除了用地址信号A0译码外,还需要用这些命令字的某些位作为访问某个寄存器的特征,或者按写入的先后顺序来区分。

例如:要对ICW1操作,此时除了将地址线A0置0外,还需将ICW1命令字D4置1,此时表示我们选中了ICW1命令字,或者说启动了ICW1的初始化编程。

下面,同学翻倒课本300页,看表格内的内容。 2、8259A的初始化编程

8259A必须先进行初始化编程,后进行工作编程。初始化编程由写入ICW1(称为主初始化命令字)开始,然后写入ICW2。至于是否写ICW3和ICW4取决于ICW1的内容。

下面,我们画出初始化命令字的流程图:

从写入初始化命令字的流程图中,我们可以看出,初始化命令字的写入顺序是:ICW1→ICW2→ICW3→ICW4,这四个命令字必须按照顺序写入,一般不重复写。

无论何时,当CPU向8259A送入一条地址线A0=0,数据线D4=1的命令时,该命令被译码为初始化命令字ICW1,它启动8259A的初始化过程,即相当于RESET信号的作用。

8259A在进行初始化时,将完成如下操作:

错误!未找到引用源。、清除中断屏蔽寄存器IMR,即中断屏蔽寄存器的各位均复位为0。

错误!未找到引用源。、设置IR7为最低优先级的完全嵌套方式,固定优先权排序。

完全嵌套方式是指:当一个中断请求被响应后,就会自动屏蔽同级和低级的中断请求,但能开放高级的中断请求。即某中断未服务完,同级或低级有中断请求,不会使8259A的INT变为高电平。

错误!未找到引用源。、清除特殊屏蔽方式

在某些应用场合,可能要求能在软件的控制下动态地改变系统的优先权结构,也就是若CPU正处在中断服务的过程中,希望能屏蔽一些较低优先权的中

断源的中断申请,而允许一些优先权更低的中断源的中断申请。当然在通常情况下,当较高优先权的中断源正处在中断服务的过程中时,所有中断优先权较低的中断源都被屏蔽。

错误!未找到引用源。设置读IRR方式。 下面介绍初始化命令字1的功能: (1)ICW1

用于设置8259A的基本工作方式。刚才我们提到了当地址线A0=0时,若对8259A写入D4=1则启动了初始化编程写入的字节被当成ICW1。D4=1是它的特征位,其余各位作用如下:

A0=0,D4=1是初始化命令字ICW1的标志。

D7、D6、D5(A7、A6、A5)用于8080/8085系统中,设置中断服务程序入口地址的A7、A6、A5,在8086/8088系统中,此3位无意义。

D3(LTIM):设置IR的触发方式。

外部设备(中断源)可采用两种方式向8259A提出中断请求:电平触发式和边沿触发式。用户通过对8059A的初始化编程来选择所需要的触发方式。当选用电平触发方式时,中断请求的实现是通过采样IRi端上输入一定时间的持续高电平,来识别外部输入的中断请求信号。当选用边沿触发方式时,中断请求的实现是通过IRi输入电平从低电平到高点平的跳变,并一直保持为高电平,直到中断相应时为止。设D3=1,为电平触发,D3=0为边沿触发。

D2(ADI):用于8080(8085)系统中,表示调用地址的间隔。为1时,地址间隔为4,为0时,调用地址间隔为8。在8088/8086系统中该位无意义。

D1(SNGL):为1,表示单片使用,为0,表示级联使用。

D0(ICW4):为1,表示要送初始化命令字ICW4,为0,表示不送ICW4。例如:以8086/8088为CPU的系统中,用单片8059A来管理8级中断源。IRi的触发方式为电平触发式,要写ICW4,则对该8259A进行初始化的程序为:

MOV AL,00011011B OUT 20H,AL

(2)ICW2(主片地址为21H,从片地址为A1H) 功能:用来设置中断信号的类型码 格式如下:

工作于8080/8085系统中时,8位全部有用,表示CALL指令的高8位,工作于8086/8088系统中时,D7~D3表示中断矢量的高5位,D2~D0不需编程而是由中断源序号填入。

例如,在8086/8088系统中,键盘的中断请求线接到IR1上,它被分配的中断类型号为09H。ICW2的初始化程序为:

向ICW2写入中断矢量时,只写ICW2的高5位,即D7~D3位。低三位对应IR7~IR0的IRi→编码,由8259A硬件电路自动产生。

MOV AL,08H OUT 21H,AL

当CPU响应键盘中断请求时,8259A把IRi的编码001作为中断矢量的低3位,它和ICW2的高5位构成一个完整的8位中断矢量类型号09H,在第二个中断响应周期经数据线送给CPU。

(3)ICW3(主片口地址为21H,从片口地址为A1H,多片级联时使用)

ICW3是8259A的级联命令字,单片8259A工作时,不需要写入,多片8259A级联工作时,需要分别写入ICW3,主片ICW3的D7~D0对其8条中断请求线IR7~IR0,若某条IR线上接有从8259A片,则主ICW3的相应位写1,否则写0。各从片的ICW3仅D2~D0有意义,作为从片标识码,高5位固定为0。这个从片标识码须和本片所接主片IRi线的序号(i)一致。在中断响应时,主片通过CAS2~CAS0送出被允许中断的从片标识码。各从片用自己的ICW3和CAS0~CAS2的信号比较。二者一致的从片确定为当前中断源,才可发送自己的中断矢量。

(4)ICW4

格式如下:

其中高3位无意义。

D4指定了中断的嵌套方式。D4=0为一般嵌套方式。一般完全嵌套是指:当一个中断源请求被响应后,就会自动屏蔽同级和低级的中断请求,但能开放高级的中断请求。即某中断未服务完,同级或低级有中断请求,不会使8259A的INT变为有效高电平。对于单片8259A的中断系统,这种安排是没有问题的。但对于多片8259A级联组成的系统,当某个从片中的一个中断正在服务时,主片将这个从片的所有中断屏蔽。这是因为:尽管该从片多个中断源各有优先级别,但由于它们都通过同一个中断申请INT引脚接到主片的同一个IRi上,也就是说在主片上,它们的优先级别均相同。所以说使本片中有比正在服务的中断级别更高的中断源发出请求,也不能得到响应即不能中断嵌套。

当D4=1时,是特殊嵌套方式。在这种方式下档一个中断申请被主8259A接受后,只屏蔽低级别中断申请,但不屏蔽同级别和高级别中断申请,这使得从片也能按正常级别申请中断并进行嵌套。

D3为数据缓冲选择。D3=1时,8259A的数据总线和系统总线之间要加三态缓冲器。此时8259A的SPEN引脚变成输出线以控制缓冲器的接通。当D3=0时,设定为非缓冲方式,由所接的电平高低确定5259A片是主片还是从片。当D3=1,且又是级联方式时,这时规定当ICW4的D2=1时表示主片,当D2=0时表示从片。当然D3=0时,D2就无意义了。

D1说明了中断的结束方式。中断结束的方式有两种:一种是正常方式,另一种是自动方式。D1=0是中断的正常结束方式,在这种方式下,中断结束时向8259A送一个EOI命令字(OCW2),于是中断服务寄存器ISR中与中断源相应的位被清除。D1=1是中断的特殊结束方式,在中断响应时,在8259A送出中断矢量后,自动将ISR复位,不需要送结束命令字OCW2。

D0指定了系统中所采用的CPU系列。当D0=0时,系统用8080/8085CPU。当D0=1时系统用8086/8088CPU系列。

CPU在向8259A写完初始化命令字后,为了进一步提高它的中断处理能力。

例如:屏蔽某些中断,读出ISR、IRR中的内容,为了能够发出中断结束命令EOI,还需要继续设置工作命令字。

3、8259A的工作编程

8259A在初始化编程后,应再进行工作编程,即写入工作命令字共有三个OCW1、OCW2和OCW3。它们各有自己的特征位,因此写入时没有顺序的要求。在中断服务程序中,某些命令字可能会多次重复地写入。

(1)OCW1主片口地址为21H,从片口地址为A1H

OCW1又被称为中断屏蔽字,用来设置中断屏蔽寄存器IMR中各位的值。8259A输入信号IRi的屏蔽操作与中断屏蔽寄存器IMR中各位的值一一对应。将OCW1中的某个Mi位置1时,IMR的相应位也置1,从而屏蔽相应的输入IRi信号。三个工作命令字中仅OCW1占有寄地址(A0=1)。

格式:

其中:Mi=1,屏蔽,Mi=0不屏蔽。

(2)OCW2(主片口地址为20H,从片口地址为A0H)

写OCW2的作用是:错误!未找到引用源。、对8259A发中断结束命令,实际上也就是清ISR中的置位;错误!未找到引用源。、改变优先权的排序结构。

它和工作命令字OCW3都占有偶地址(A0=0),但其特征位为D4D3=00。因此,不会混淆。同样对它们的写入也没有要求是早写还是晚写。

格式:

其中A0=0,D4D3=00为OCW2的标志。这些操作命令通常是以组合方式出现,而不是按位设置,为了说明组合命令的意义,首先,介绍有关位的定义。

D7(R):优先权控制位。

优先权:它是指响应中断过程中,中断请求信号级别的高低。一般情况下,我们说IR0级别最高,IR7级别最低。但在实际应用中,中断源的优先权情况是比较复杂的,不一定有明显的等级,而且优先权还有可能改变。所以不能总规

定IR0的优先权最高,而IR7的优先权最低,要根据情况来改变。在8259A中有两种控制优先权的方法。

错误!未找到引用源。、自动循环

在某些应用的情况下,若干中断源有相等的优先权。因此,当某个中断源服务完成后,它的优先权变为最低。

例如:在循环前,若IR4和IR6同时有中断请求,而当时的IR0最高,IR7最低。因此,就先服务IR4的请求,当IR4服务完毕,它的优先权最低,而IR5的优先权就最高了。

错误!未找到引用源。、固定优先权 即中断请求信号IR0~IR7的级别是固定的。

D7(R)=1时,优先权可以旋转,循环优先权。当R=0时,为固定优先权。 D6位表示特殊旋转。当D6=1时,允许由D2~D0(L2~L0)编码指定对应的IRi为最低优先权。那么,此时最高优先级为IRi-1。当D6=0时,L2~L0编码无效。

D5(EOI):中断结束命令位。D5=1表示中断结束(EOI命令)。当用8259A来实现中断管理时,返回指令IRET前,必须给8259A送一条EOI命令(即D5=1的OCW2)。8259A收到这条命令后,将中断服务寄存器ISR中的相应位清除。然后才好为其它的中断源服务。当D6D5=1,则为特殊的中断结束(SEOI命令),它将复位ISR中由OCW2中L2~L0指定的位。

刚才,我们提到这些命令都是以组合方式出现,那么它们组合后的情况是怎样的呢?请看书304页。

(3)OCW3(主片口地址20H,从片口地址A0H)

写入OCW3的地址和OCW2的相同,都是A0=0,但其特征位是D4D3=01。 功用:OCW3常用来配合读8259A内部寄存器的内容。 格式:

D6、D5两位用来设定和清除特殊屏蔽。在这,首先我们介绍一下。一般情况下的屏蔽是:当交给优先权的中断源正处在中断服务的过程中时,所有优先

权较低的中断申请全都给屏蔽了。特殊屏蔽是指:若CPU正处在中断服务的过程中,希望能屏蔽一些较低优先权中断源的中断,而允许一些优先权更低的源发出中断申请。设置特殊屏蔽的是:D6D5=11,清除特殊屏蔽的是D6D5=10。

D1、D0两位组合表示中断请求寄存器IRR或是读中断服务寄存器ISR。当OCW3的D1D0=11,也对同一个地址(A0)作输入,则读入的是中断服务寄存器ISR的内容。

除了以上两个寄存器外,任何时候对8259A用奇地址A0=1作输入,可以读出IMR的内容。

第四节 计数/定时电路

【知识点】

1、8253的内部结构、外部引脚; ※2、8253的启动方式; ※3、8253的工作方式。

在计算机应用中,常常要对外界的某些信号进行计数,希望计算机既能控制计数的过程又能读取计数的结果,进而作为控制或管理的决策依据。因此,计数电路也成为计算机输入/输出接口的一种类型。如果被计数的信号有准确的固定周期,这种计数也就成了一种定时方式。

一、计数定时的方法

为了获得所需要的定时,要求准确而稳定的时间基准产生这种时间基准常用两种方法。

错误!未找到引用源。、软件方法(软件定时)

即利用CPU内部的定时机构,使用每执行一条指令需要若干时钟周期的原理,运用软件编程,循环执行一段程序而产生等待延时。这种方法的优点:不需增加硬件设备,只需编制相应的延时程序已备调用。缺点:CPU在执行延时程序时,增加了CPU的时间开销,延时时间越长,这种等待开销越大,降低了CPU的效率,浪费了CPU资源。

错误!未找到引用源。、硬件定时

可采用可编程定时计数器(或单稳延时电路)产生定时或延时。这种方法

不占用CPU的时间,定时时间长,使用灵活,故得到广泛应用。现在已有多种定时/计数芯片应用于微型计算机及接口电路中,本节我们讨论Intel8253可编程/定时计数器。

二、可编程计数/定时器Intel8253 (一)8253的工作原理 1、8253的内部逻辑结构

8253主要由以下六部分组成:数据总线缓冲器、读/写逻辑控制寄存器、三个计数器。课本267页,用5.4.2。各部分功能:

1)数据总线缓冲器

用于将8253同系统总线D7~D0相连。CPU通过数据总线缓冲器向8253写入数据。命令或通过数据总线从8253内读取数据和状态信息。总的来说8253数据缓冲器有如下三项功能a、向8253写入确定的8253工作方式命令字;b、向计数寄存器装入初值;c、读出计数初值或当前值。

2)读/写逻辑:读/写逻辑由CPU发来的读写信号和地址信号确定选择读出/写入的寄存器,并确定数据传输的方向:是读出还是写入。

3)控制字寄存器

控制字寄存器接收CPU送来的控制字,这个控制字用来选择计数器和相应的工作方式。控制字寄存器的内容只能写入不能读出。

4)计数器

计数器内部主要由三部分:A、16位减1计数器、B、16位计数初值寄存器,C、16位输出锁存器。

初始化时,首先向计数通道装入计数初值,先送到计数初值寄存器保存,然后送到减1计数器,计数启动后(GATE允许),在时钟CLK的作用下,进行减1计数,直至计数值减到0,输出OUT信号,计数结束。计数初值寄存器中的数值在计数过程中保持不变。因此,若要了解计数初值,只需从计数初值寄存器中直接读取,而如果想知道当前计数值,则必须将当前值锁存后,从输出寄存器中读出,不能直接从减1计数器中读出。

OU

2、8253的引脚

8253为24引脚双列直插芯片,用+5V供电。每一片内部有三个独立的16位计数器。

D7~D0:数据线,双向三态,外接系统数据总线。

CS:片选信号,低电平有效。通常由I/O口地址译码产生。

RD、WR:读写控制命令,低电平有效。RD有效时,CPU读取由A1,A0

所选的通道内计数器的内容。WR有效时,CPU将计数值写入各个通道的计数器中,或者将方式控制字写入控制字存器中。

A0、A1:地址线,进行片内译码,选择计数器。

GATE:门控信号,用于控制计数的进行。多数情况下,GATE=1时,允许计数,GATE=0时,中止计数。用一句话来说,GATE信号的作用是用来禁止、允许或开始计数过程。

CLK:时钟信号。作用是:在8253进行定时或计数工作时,每输入一个时钟信号,便使定时计数值减1。

OUT:OUT是8253向外输出的信号。它的作用是:计数器工作时,当定

时/计数值减为0时,即在OUT线上输出一个OUT信号,用以指示定时或计数已到。

3、计数启动

8253计数器的计数过程,可以直接用程序指令来启动,也可以设置外部电信号来启动。这两种启动方式分别称为软件启动和硬件启动。

错误!未找到引用源。、软件启动

即用输出指令向计数器赋予初值来启动。事实上,所谓赋初值,只是将数值赋给了初值寄存器,计数并未开始。之后,到来的第一个外部时钟信号(需要CLK信号由低变高,再由高变低)将初值寄存器内容赋予计数器,从第2个时钟周期CLK信号下降开始,计数器才真正减1。以后,每个CLK信号使计数器减1一直减到0结束。

错误!未找到引用源。、硬件启动

即写入计数初值后,并未启动计数,需要门控信号变为高电平,在经CLK上开沿采样,随后的CLK下降沿开始,使计数器减1。

一般情况下,各计数器每启动一次只工作一个周期(当计数初值减为0)就停止了,但有两种情况,一旦被启动只要门控信号GATE=1(保持为高电平),计数过程就能自动地重复下去,因此,OUT端可以产生连续的波形。

(二)8253的编程

8253的三个计数器在工作前,必须进行初始化编程。每个计数器的编程步骤均由:1、写入控制字,选定工作方式;2、写入计数初值组成。

1、写控制字

写控制字,主要实现如下功能:选择计数器,选择工作方式,选择数的进制等。控制字格式如下:

D7、D6位是控制字计数器的编号,具体地讲D7、D6位确定选择的计数器是计数器1还是计数器2,或是计数器0。

D5、D4是操作方式编码,标明计数器操作的类型。例如给计数器赋初值时,可以赋16位初值,也可以赋8位初值,8位初值可以是高字节或是低字节。读

计数器当前值时,计数器并未停止计数。有可能在先后读高低字节时,计数器的值已发生了变化。因此,有必要锁存当前值。这时可对计数器写入D5D4=00的控制字,计数器当前值就被锁存到一个16位的输出锁存器中。此时,计数器照常工作,但锁存器中的值不变,待锁存器中的两字节值都被CPU读走后,锁存器的内容又随计数器变化。

D3~D1:三位决定了计数器的工作方式,具有6种工作方式,方式0~方式5。

D0:选择计数器的数制,D0=0选择2进制,D0=1选择10进制。 2、写入计数初值

写入控制字后,应给计数器写入计数初值。根据控制字的规定。计数初值可以是两个字节,可以是单字节。但在8253内部全部当成了两字节,缺省字节自动补上零。

(三)8253的工作方式

8253计数器有六种工作方式,即方式0~方式5,不同的工作方式下,计数的启动过程不同,OUT端的输出波形不同,自动重复功能,GATE的控制作用以及重新计数初值的影响也不同。同一芯片中的三个计数器,可以分别编程选择不同的工作方式。

1、方式0——计数结束时中断

这是一种软件启动,不能重复的计数方式。 方式0有如下特点:

错误!未找到引用源。、当前计数器写完CW(控制字)后,相应的输出信号OUT变低,再写入计数初值,在WR(写信号)以后,经过一个CLK的上升沿和一个下降沿,计数器开始计数,当计数结束,即计数器减到0时,OUT立即输出高电平。

错误!未找到引用源。、当门控信号GATE为高电平时,计数器工作,当GATE为低电平时,计数器停止工作,其计数值保持不变,待GATE=1后,从暂停的数值继续往下递减。

③、方式0,每赋一次初值,只计数一个周期。OUT在执行完成一次计数后,一直保持为高电平,直到新初值到来。

错误!未找到引用源。、在计数工作期间,如果重新写入新的初值,则计数

器将按新写入的计数值重新工作(若初值是16位,则在送完第一个字节后,中止现行计数,送完第二个字节后才重新计数)。

2、方式1——可编程单脉冲

这是一种硬件启动,不自动重复的计数的方式。 方式1的特点:

①、写入方式1的控制字CW后,OUT端立即变为高电平,待写入计数初值后,要等GATE信号出现正跳变,才启动计数。此时,OUT端立即变低,直至计数器减到零才回到高。其间隔为计数初值N乘以CLK的周期TCLK,这就是OUT产生一个宽度为N×TCLK的负脉冲。

错误!未找到引用源。、若计数启动之后,而未完成之前,若GATE又发生正跳变,则计数过程又从初值启动,OUT端的低电位不变,两次计数过程合在一起,OUT端输出的负脉冲加宽了。

错误!未找到引用源。、方式1的计数过程中若写入新的计数初值,也只写到初值寄存器中,并不马上影响当前计数过程。同样要等到下一个GATE的启动信号,计数器才能按新初值工作。

3、方式2——速率发生器

方式2既可用于软件启动,也可用于硬件启动。软件启动:若先有GATE=1,则由写入计数初值启动——软件启动。

硬件启动:若送初值时,GATE=0为低电平,则等GATE信号由低变高启动。两个必备条件中,后一个满足要求的作为启动信号。

方式2的特点:

①、写入方式2的控制字后,OUT变高。若先有GATE=1,写入计数初值后,计数器及时对CLK。假使计数初值为N,当计数(N-1)个信号时,计数器的值为1,OUT变低。最后一个CLK信号输入后,计数器减至零OUT回到高,计数器又自动从初值开始计数,(因此,它具有自动重复功能)。OUT端在每N个CLK信号中输出一个宽度为CLK信号周期的负脉冲。

错误!未找到引用源。、计数器在工作期间,如果向此计数器写入新的初值,则计数器仍按原计数,直到计数器(回零)即在输出一个时钟周期的低电平后,才按新写入的计数初值计数。

错误!未找到引用源。、门控信号GATE为高电平时,才允许计数。若在计数其间,门控信号变为低电平。则计数器停止计数,待GATE恢复为高电平后,计数器按原设定的计数值重新开始计数。

4、方式3——方波发生器 方式3的特点:

①、兼有两种启动方式,即软件启动和硬件启动。 ②、计数能自动重复。

错误!未找到引用源。、工作方式3对OUT端输出的不是一个时钟周期的低电平(负脉冲),而是占空比为1:1或近似1:1的方波,当计数初值为偶数时,输出在前一半计数过程为高电平,在后一半计数过程中为低电平。

错误!未找到引用源。、当计数初值为奇数时,在前一半加1的计数过程中,输出为高电平,后一半减1的计数过程为低电平。

错误!未找到引用源。、在写入初值时,如果GATE信号为低电平,计数器并不开始计数,待GATE变高后,才启动计数过程。在计数过程中应始终使GATE=1,若GATE=0,不仅中止计数,而且OUT马上变高,待恢复GATE=1时,产生硬件启动,计数器又重新开始计数。

错误!未找到引用源。、在方式3的计数过程中,对计数器写入初值,不影响前半周期的计数,当在前半周期结束(OUT电位发生变化时),启用新初值。

5、方式4

特点:①软件启动;②不自动重复

在写入方式4控制字后,OUT变为高电平。若GATE为高,写完计数初值后的第一个CLK信号将初值n置于计数器,从第二个CLK信号开始作减法。(N+1)个CLK后,减到0,OUT变低,第(N+2)个CLK信号使OUT又回到高而停止,形成一个TCLK的负脉冲。因此从写入初值算起整个过程为(N+2)

的工作方式。

格式如下:

从方式字可知,A口有3种工作方式(方式0,1,2),而B口只有两种工作方式(方式0,方式1)。端口C分成两部分,上半部分属于A组,下半部分属于B组。置1为输入,置0为输出。利用工作方式字的不同代码组合,可以分别选择A组和B组的工作方式和各端口的输入/输出。

例如,要把A口指定为方式1,输入,C口上半部指定为输出,B口指定为方式0,输出,C口下半部定为输入。

可以确定工作方式字为:10110001B或B1H,

若将此控制字的内容写到8255A的控制寄存器,即实现了对8255A工作方式的指定,或叫完成了对8255A的初始化。

程序段:MOV DX,303H;8255A控制口地址

MOV AL,10110001B;初始化工作方式控制字 OUT DX,AL

(2)PC口按位置位/复位控制字

作用:指定PC口的某一位输出高电平还是低电平。

利用按位置位/复位控制字可以使PC口的8根线中的任意一根置成高电平或低电平。

例如,要把C口的PC2引脚置位,则命令字应为00000101B。

将该命令字写入8255A的命令寄存器,就实现了将PC口的PC2引脚置位操作。

MOV DX,303H;8255A控制口地址 MOV AL,00000101B;使PC2=1的控制字 OUT DX,AL; 送到控制口

应用:按位置位/复位命令产生的输出信号,可以作为控制开关的通断,继电器的吸合/释放,马达的启/停等操作的选通信号。

另外,在后面将要提到和讨论的8255A的状态字中的中断允许位INTE的置位和复位,即允许8255A提出中断与禁止8255A提出中断,也是采用这个按位控制命令来实现。

(3)可编程的含义

所谓的可编程,实际上是可选择性。例如选择芯片中的哪一个或哪几个数据端口与外设相连;选择端口中的哪一位或哪几位作输入,哪一位或哪几位作输出。选择端口与CPU之间采用哪种方式传送数据等。均可由用户写入方式字或控制字来指定。

5、各种工作方式的功能和特点 (1)方式0

错误!未找到引用源。、方式0是一种基本输入/输出工作方式。方式0下,8255A的24条I/O线全部由用户分配功能,不设置专用联络信号。这种方式不能采用中断与CPU交换数据,只能用简单的无条件传送。若作输出,各端口都有锁存功能,若作输入没有锁存,只有缓冲。

错误!未找到引用源。、方式0下,8255A分成彼此独立的两个8位和两个4位的并行口,这4个并行口都能被指定作为输入或作为输出用,共有16种不同的组合。要特别强调的是,在方式0下,只能将C口的高4位作为一组或低4位作为一组同时输入或输出,不能再把4位中的一部分作输入,一部分作输出。

错误!未找到引用源。、端口信号之间无固定的时序关系,用户根据数据传送的要求决定输入/输出的操作过程。方式0没有设置固定的状态字。

错误!未找到引用源。、单向I/O,一次初始化只能指定某一端口作输入或作输出,不能使该端口同时即作输入又作输出。

(2)方式1和方式2的特点请参看课本自学。

6、8255A的应用参看多媒体课件。

本文来源:https://www.bwwdw.com/article/10k7.html

微信扫码分享

《第五章 数字量输入输出.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top