第10章并行接口芯片8255本章讲述:10.1可编程并行输入输出接口芯片8255-A的结构10.2方式选择10.3方式0的功能10.4方式1的功能10.5方式2的功能10.68255应用举例当CPU要从外设输入信号或者输出信息给外设,可以采用程序查询方式、中断方式和DMA方式。但是,不论采用哪一种方式,CPU总是通过接口电路(Interface)才能与外设连接。所以,接口电路一边与CPU连接,另一边与外设连接。在接口电路中,要有输入输出数据的锁存器和缓冲器,要有状态(如Ready,Busy等)和控制命令的寄存器,以便于CPU与接口电路之间采用应答方式(程序查询式)来交换信息,也便于接口电路与外设之间传送信息。接口电路中还要有端口的译码和控制电路,以及为了与CPU用中断方式交换信息所需要的中断请求触发器、中断屏蔽触发器、中断优先权排队电路和能向CPU发出中断矢量的电路等。这样,才能解决CPU的驱动能力问题、时序的配合问题以及实现各种控制,保证CPU能正确可靠地与外设交换信息。随着大规模集成电路技术的发展,生产了许多通用的可编程序的接口芯片。这些接口芯片按数据传送的方式可以分为并行接口和串行接口两大类。本章只讨论并行接口芯片,串行接口芯片放在第11章中介绍。通常并行接口芯片应该具有以下功能:(1)两个或两个以上的具有锁存器或缓冲器的数据端口;(2)每个数据端口都有与CPU用应答方式交换信号所必需的控制和状态信息,也有与外设交换信息所必需的控制和状态信息;(3)通常每个数据端口还具有能用中断方式与CPU交换信息所必需的电路;(4)选片和控制电路;(5)通常这类接口芯片可用程序选择数据端口,选择端口的传送方向(输入或输出或双向),选择与CPU交换信息的方法(查询或中断)等,故片中要有能实现这些选择的控制字寄存器,它可由CPU用输出指令来写入。所以,接口芯片在工作前必须要由CPU用输出指令对它编程——初始化,以规定它的工作方式。10.1可编程的并行输入输出接口芯片8255A-5的结构Intel8255A-5是一个为8080、8085和8086/8088微型计算机系统设计的通用I/O接口芯片。它可以用程序来改变功能,通用性强,使用灵活。通过它可以将CPU的总线直接接向外设。8255A的方框图如图10-1所示。8255A由以下几个部分组成:1.数据端口A、B、C它有三个输入输出端口:PortA、PortB和PortC。每一个端口都是8位,都可以选择作为输入或输出,但功能上有着不同的特点。(1)端口A:一个8位数据输出锁存和缓冲器;一个8位数据输入锁存器。(2)端口B:一个8位数据输出锁存和缓冲器;一个8位数据输入锁存器。(3)端口C:一个8位数据输出锁存/缓冲器;一个8位数据输入缓冲器(输入没有锁存)。通常端口A或B作为输入输出的数据端口,而端口C作为控制或状态信息的端口,它在方式字的控制下,可以分成两个4位的端口,每个端口包含一个4位锁存器,它们分别与端口A和B配合使用,可以作为控制信号输出,或者作为状态信号输入。2.A组和B组控制电路这是两组根据CPU的命令字控制8255A工作方式的电路。它们有控制寄存器,接受CPU输出的命令字,然后分别决定两组的工作方式,也可根据CPU的命令字对端口C的每一位实现按位“复位”或“置位”。A组控制电路控制端口A和端口C的上半部(PC7~PC4)。B组控制电路控制端口B和端口C的下半部(PC3~PC0)。3.数据总线缓冲器这是一个三态双向8位缓冲器,它是8255A芯片与系统数据总线的接口。输入输出的数据,输出的指令以及CPU发出的控制字和外设的状态信息,也都是通过这个缓冲器传送的。4.读/写和控制逻辑它与CPU的地址总线中的A1、A0以及有关的控制信号(RD#,WR#,RESET,IO/M#)相连,由它控制把CPU的控制命令或输出数据送至相应的端口,也由它控制把外设的状态信息或输入数据通过相应的端口,送至CPU。5.一些控制命令(1)CS#(ChipSelect)——选片信号,低电平有效,由它启动CPU与8255A芯片之间的通信(Communication)。(2)RD#——读信号,低电平有效。它控制8255A送出数据或状态信息至CPU。(3)WR#——写信号,低电平有效。它控制把CPU输出的数据或命令信号写到8255A。(4)RESET——复位信号,高电平有效。它清除控制寄存器,并且置所有端口(A、B、C)为输入方式。6.端口寻址8255A中有三个输入输出端口,另外,内部还有一个控制字寄存器,共有四个端口,要有两个输入端来加以选择,这两个输入端通常接到地址总线的最低两位A1和A0。A1、A0、RD#、WR#及CS#组合所实现的各种功能,如表10-1所示。10.2方式选择可编程并行接口8255A有三种基本的工作方式:(1)方式0(Mode0)——基本输入输出方式;(2)方式1(Mode1)——选通输入输出方式;(3)方式2(Mode2)——双向传送方式。如图10-2所示,它们由CPU输出的控制字来选择。10.2.1方式选择控制字可编程并行接口8255A的工作方式,可由CPU利用I/O指令输出一个控制字到8255A的控制字寄存器来选择。这个控制命令字的格式如图10-3所示。可以分别选择端口A和端口B的工作方式,端口C分成两部分,上半部(PC7~PC4)随端口A,下半部(PC3~PC0)随端口B。端口A有方式0、1和2三种工作方式,而端口B只能工作于方式0和1。10.2.2方式选择举例若有一个8086系统,它有两个8255A芯片,分别与不同的外设交换信息,如图10-4所示。要确定两个8255A的工作方式,就要在输出控制字之前,先确定两个8255A的各自的控制字寄存器的端口地址。I/O端口地址由CPU地址总线的低8位A7~A0确定。在本例中,端口地址的考虑如图10-5所示。8位地址线可选择256个不同端口,现在地址线最低两位A0、A1用于8255A内部的端口选择,另外6位A2~A7就用于选择不同的8255A以及其他的外设,在本系统中外设少,故可用线选的方法来选择不同的8255A。因而,两个8255A的各个端口地址如表10-2所示。当地址确定后,把地址总线的A0、A1直接接至8255A的A0、A1输入端,地址总线的其他6位A2~A7应按地址的规定经译码后送至8255A的CS#输入端。若要求8255A#1的各个端口处在如下的工作方式:端口A方式0输入端口B方式1输出端口C(上半部)PC7~PC4输出端口C(下半部)PC3~PC0输入则要用方式控制字=10010101B或95H。可用以下汇编程序来置上述工作方式:CWREQU0FBH;8255A#1控制字寄存器端口地址输出方式控制字MOVAL,10010101BOUTCWR,AL10.2.3按位置位/复位功能端口C的8位中的任一位,可用一条输出指令来置位或复位(其他位的状态不变)。这个功能主要用于控制。能实现这个功能的控制字,如图10-6所示。若要使端口C的位3置位的控制字为00000111B,而使它复位的控制字为00000110B。相应的汇编程序为:CWR:EQU0FBHMOVAL,00000111B;置位端口C位3OUTCWR,ALMOVAL,00000110B;复位端口C位3OUTCWR,AL注意:使端口C按位置位或复位的控制字也是写入至控制字寄存器的。10.3方式0的功能10.3.1方式0的基本功能方式0是一种基本的输入或输出方式。在这种工作方式下,三个端口的每一个都可由程序选定作为输入或输出,但这种方式没有规定固定的用于应答式的联络信号线。其基本功能为:(1)两个8位端口(A,B)和两个4位端口(端口C);(2)任一个端口可以作为输入或输出;(3)输出是锁存的;(4)输入是不锁存的;(5)在方式0时,各个端口的输入、输出可以有16种不同的组合。在这种工作方式下,任一个端口都可由CPU用简单的输入或输出指令来进行读或写。方式0可作为查询式输入或输出的接口电路,此时端口A和B可分别作为一个数据端口,而取端口C的某些位作为这两个数据端口的控制和状态信息。10.4方式1的功能这是一种选通的I/O方式。在这种方式时,端口A或端口B仍作为数据的输入/输出口,但同时规定端口C的某些位作为控制或状态信息。10.4.1方式1的主要功能8255A的端口工作在方式1时,具有以下主要功能:(1)用作一个或两个选通端口;(2)每一个端口包含:8位的数据端口,三条控制线(是固定指定的,不能用程序改变),提供中断逻辑;(3)任何一个端口都可作为输入或输出;(4)若只有一个端口工作于方式1,余下的13位,可以工作在方式0(由控制字决定);(5)若两个端口都工作于方式1,端口C还留下两位,这两位可以由程序指定作为输入或输出,也具有置位/复位功能。10.4.2方式1输入当任一端口工作于方式1输入时,如图10-9所示。其各个控制信号的意义为:STB#(Strobe)——选通输入,低电平有效。这是由外设供给的输入信号,当其有效时,把输入装置来的数据送入输入锁存器。IBF(InputBufferFull)——输入缓冲器满,高电平有效。这是一个8255A输出至外设的联络信号。当其有效时,表示数据已输入至输入锁存器,它由STB#信号置位(高电平),而RD#信号的上升沿使其复位。INTR(InterruptRequest)——中断请求信号,高电平有效。这是8255A的一个输出信号,可用于作为向CPU的中断请求信号,以要求CPU服务。它是当STB#为高电平、IBF为高电平和INTE(中断允许)为高电平时被置为高,而由RD#信号的下降沿清除。INTEA(InterruptEnableA)——端口A中断允许信号,可由用户通过对PC4的按位置位/复位来控制(PC4=1,允许中断)。而INTEB由PC2的置位/复位控制。方式1的输入时序,如图10-10所示。以端口A为例,在中断方式下方式1输入时具体工作过程如下:1、cpu通过执行OUT指令送“方式选择控制字”到8255A,设定端口A为“方式1输入”,接着送“端口C置1置0控制字”使PC4=1,于是INTEA=1,允许端口A请求中断2、当外设的选通信号STB#有效时,来自外设的数据被装入8255A输入缓冲寄存器中使IBFA=13、在INTEA=1,IBFA=1,STB#=1时,使INTRA由0变1,端口A向CPU发出中断请求4、CPU响应中断,进入中断服务程序,通过IN指令对端口A进行读操作,将端口A中的数据读入CPU。并由RD#下降沿使INTRA=0,由RD#上升沿使IBFA=0,接着外设又可输入下一个数据给8255A当外设的数据已经输至8255A的端口数据线上,用选通信号把数据锁入8255A的输入锁存器,选通信号的宽度至少为500ns。选通信号经过时间tSIT后,IBF信号有效,输送给外设,阻止外设输入新的数据,也可供CPU查询。在选通信号结束后,经过tSIT向CPU发出INTR信号(中断是允许的话)。CPU响应中断,发出RD#信号,把数据读入CPU。在RD#信号有效后经过tRIT就清除中断请求,当RD#信号结束后,数据已读至CPU,使IBF变低。表示输入缓冲器已空,通知外设可以输入新的数据。10.4.3方式1输出8255A的端口工作在方式1输出时,如图10-11所示。1.主要的控制信号OBF#(OutputBufferFull)——输出缓冲器满信号,低电平有效。这是8255A输出给外设的一个控制信号。当其有效时,表示CPU已经把数据输出给指定的端口,外设可以把数据输出。它由输出命令WR#的上升沿设置为有效,由ACK#的有效信号使其恢复为高。ACK#(Acknowledge)——低电平有效,这是一个外设的响应信号,指示CPU输出给8255A的数据已经由外设接收。INTR——中断请求信号,高电平有效。当输出装置已经接收了CPU输出的数据后,它用来作为向CPU提出新的中断请求,要求CPU继续输出数据。当ACK#为“1”(高电平),OBF为“1”(高