1、第 10 章 并行接口芯片8255,计算机与外部的信息交换称为通信(Communication)。 基本的通信方式有两种,一种是并行通信,另一种是串行通信。,并行通信:数据各位同时传送。例如CPU通过8255A与外设交换数据时,就采用并行通信方式。优点:传送数据的速度快 缺点:使用的通信线多,传输的可靠性随着距离的增加而下降。 应用:并行通信适用于近距离传送数据的场合。,串行通信:数据一位一位顺序传送。 要传送的数据或信息必须按一定的格式编码,然后在单根线上,按一位接一位的先后顺序进行传送,发送完一个字符后,再发送第二个;接收数据时,每次从单根线上一位接一位的接收信息,再把它们拼凑成一个字符,
2、送给CPU作进一步处理。 优点:通信线少,传送距离远。 缺点:速度慢 应用:当微机与远程终端或远距离的中央处理机交换数据时,都采用串行通信方式。采用串行通信的另一个出发点是,有些外设,如调制解调器(MODEM)、鼠标器等。本身需要用串行方式通信。,并行通信 将数据的各位同时在多根并行传输线上进行传输,适于短距离、高速通信,串行通信 将数据的各位按时间顺序依次在一根传输线上传输,适于长距离、中低速通信,0 1 1 0 1 0 1 0,通常并行接口芯片应该具有以下功能:(1)两个或两个以上的具有锁存器或缓冲器的数据端口; (2) 每个数据端口都有与CPU用应答方式交换信号所必需的控制和状态信息,也
3、有与外设交换信息所必需的控制和状态信息; (3) 通常每个数据端口还具有能用中断方式与CPU交换信息所必需的电路; (4) 选片和控制电路; (5) 通常这类接口芯片可用程序选择数据端口,选择端口的传送方向(输入或输出或双向),选择与CPU交换信息的方法(查询或中断)等,故片中要有能实现这些选择的控制字寄存器,它可由CPU用输出指令来写入。,10.1 可编程的并行输入输出接口芯 片8255A的结构,Intel 8255A是一个为8080、8085和8086/8088微型计算机系统设计的通用I/O接口芯片。它可以用程序来改变功能,通用性强,使用灵活。通过它可以将CPU的总线直接接向外设。8255
4、A的方框图如图10-1所示。,8255A的方框图,8255A由以下几个部分组成: 1. 数据端口A、B、C它有三个输入输出端口: Port A、Port B和Port C。每一个端口都是8位,都可以选择作为输入或输出,但功能上有着不同的特点。 (1) 端口A: 一个8位数据输出锁存和缓冲器;一个8位数据输入锁存器。 (2) 端口B: 一个8位数据输入/输出、锁存/缓冲器;一个8位数据输入缓冲器。 (3) 端口C: 一个8位数据输出锁存/缓冲器;一个8位数据输入缓冲器(输入没有锁存)。,通常端口A或B作为输入输出的数据端口,而端口C作为控制或状态信息的端口,它在方式字的控制下,可以分成两个4位的
5、端口,每个端口包含一个4位锁存器,它们分别与端口 A和B配合使用,可以作为控制信号输出,或者作为状态信号输入。 2. A组和B组控制电路这是两组根据CPU的命令字控制8255A工作方式的电路。它们有控制寄存器,接受CPU输出的命令字,然后分别决定两组的工作方式,也可根据CPU的命令字对端口C的每一位实现按位“复位”或“置位”。A组控制电路控制端口A和端口C的上半部(PC7PC4)。B组控制电路控制端口B和端口C的下半部(PC3PC0)。,3. 数据总线缓冲器这是一个三态双向8位缓冲器,它是8255A芯片与系统数据总线的接口。输入输出的数据,输出的指令以及CPU发出的控制字和外设的状态信息,也都
6、是通过这个缓冲器传送的。4. 读/写和控制逻辑它与CPU的地址总线中的A1、A0以及有关的控制信号(RD#,WR#,RESET,IO/M#)相连,由它控制把CPU的控制命令或输出数据送至相应的端口,也由它控制把外设的状态信息或输入数据通过相应的端口,送至CPU。,5. 一些控制引脚 (1) CS#(Chip Select)选片信号,低电平有效,由它启动CPU与8255A芯片之间的通信(Communication)。 (2) RD#读信号,低电平有效。它控制8255A送出数据或状态信息至CPU。 (3) WR#写信号,低电平有效。它控制把CPU输出的数据或命令信号写到8255A。 (4) RES
7、ET复位信号,高电平有效。它清除控制寄存器,并且置所有端口(A、B、C)为输入方式。,6. 端口寻址8255A中有三个输入输出端口,另外,内部还有一个控制字寄存器,共有四个端口,要有两个输入端来加以选择,这两个输入端通常接到地址总线的最低两位A1和A0。A1、A0、RD#、WR#及CS#组合所实现的各种功能,如表10-1所示。,10.2 方 式 选 择,可编程并行接口8255A有三种基本的工作方式:(1) 方式0(Mode 0)基本输入输出方式;(2) 方式1(Mode 1)选通输入输 出方式;(3) 方式2(Mode 2)双向传送方式。如图10-2所示,它们由CPU输出的控制字来选择。,10
8、.2.1 方式选择控制字,可编程并行接口8255A的工作方式,可由CPU利用I/O指令输出一个控制字到8255A的控制字寄存器来选择。这个控制命令字的格式如图10-3所示。,10.2.3 按位置位/复位功能,端口C的8位中的任一位,可用一条输出指令来置位或复位(其他位的状态不变)。这个功能主要用于控制。 注意: 使端口C按位置位或复位的控制字也是写入至控制字寄存器的。,若要使端口C的位3置位的控制字为00000111B,而使它复位的控制字为00000110B。相应的汇编程序为:CWR:EQU 0FBH ;置位端口C位3 MOV AL,00000111B OUT CWR,AL ;复位端口C位3
9、MOV AL,00000110B OUT CWR,AL 注意: 使端口C按位置位或复位的控制字也是写入至控制字寄存器的。,例 用8255A作为CPU与打印机接口,8255的A口工作于方式0,输出;C口工作于方式0,PC6输出打印机选通信号(负脉冲),PC1输入打印机状态(高电平说明打印机正忙)。试编写一程序,用查询方式将100个数据(存放从BUFFER开始的内存单元)开始送打印机打印。,步骤:1、确定8255A地址2、各端口的工作方式3、编写接口程序,MOV DX, 383HMOV AL, 10000001B ; 设置8255A的工作方式控制字OUT DX, ALMOV AL, 0000110
10、1BOUT DX, AL ;PC6置1,准备发选通脉冲MOV CX, 100 ;设置需打印数据的总个数LEA SI, BUFFER ;取要打印的数的首地址送SI GOON: MOV DX, 382H ; PWAIT: IN AL, DX ;从端口C读入数据AND AL, 02H ;查询PC1是1吗?(打印机忙吗)JNZ PWAIT ;打印机忙,继续查询MOV AL, SI ;取一个数据MOV DX, 380H OUT DX, AL ;从端口A输出要打印的数据MOV DX, 383H ;MOV AL, 00001100B OUT DX, AL ;端口C的PC6置0OR AL, 1OUT DX,
11、AL ;端口C的PC6置1(发出打印机选通脉冲)INC SI ;修改地址指针,指向下一个要打印的数据LOOP GOON ;100个数没有打印完,则转到GOON,10.3 方式0的功能,10.3.1 方式0的基本功能 方式0是一种基本的输入或输出方式。 三个端口的每一个都可由程序选定作为输入或输出,但这种方式没有规定固定的用于应答式的联络信号线。 基本功能为: (1) 两个8位端口(A,B)和两个4位端口(端口C); (2) 任一个端口可以作为输入或输出; (3) 输出是锁存的; (4) 输入是不锁存的; (5) 在方式0时,各个端口的输入、输出可以有16种不同的组合。,10.3.2 方式0的时
12、序,1. 方式0的输入时序,应用:无条件传送,查询式传送,2. 方式0的输出时序可编程并行接口芯片8255A方式0的基本输出时序,10.4 方式1的功能,这是一种选通的I/O方式。 在这种方式时,端口A或端口B仍作为数据的输入/输出口,但同时规定端口C的某些位作为控制或状态信息。,10.4.1 方式1的主要功能,8255A的端口工作在方式1时,具有以下主要功能: (1) 用作一个或两个选通端口; (2) 每一个端口包含: 8位的数据端口,三条控制线(是固定指定的,不能用程序改变),提供中断逻辑;,(3) 任何一个端口都可作为输入或输出; (4) 若只有一个端口工作于方式1,余下的13位,可以工
13、作在方式0(由控制字决定); (5) 若两个端口都工作于方式1,端口C还留下两位,这两位可以由程序指定作为输入或输出,也具有置位/复位功能。,应用:查询式传送,中断传送,10.4.2 方式1输入,当任一端口工作于方式1输入时,其各个控制信号的意义为: STB#(Strobe)选通输入,低电平有效。这是由外设供给的输入信号,当其有效时,把输入装置来的数据送入输入锁存器。 IBF(Input Buffer Full)输入缓冲器满,高电平有效。这是一个8255A输出至外设的联络信号。当其有效时,表示数据已输入至输入锁存器,它由STB#信号置位(高电平),而RD#信号的上升沿使其复位。 INTR(In
14、terrupt Request)中断请求信号,高电平有效。这是8255A的一个输出信号,可用于作为向CPU的中断请求信号,以要求CPU服务。它是当STB#为高电平、IBF为高电平和INTE(中断允许)为高电平时被置为高,而由RD#信号的下降沿清除。,INTEA(Interrupt Enable A)端口A中断允许信号,可由用户通过对PC4的按位置位/复位来控制(PC4=1,允许中断)。INTEB由PC2的置位/复位控制。方式1的输入时序,如图10-12所示。,INTEA(Interrupt Enable A)端口A中断允许信号,可由用户通过对PC4的按位置位/复位来控制(PC4=1,允许中断)
15、。 而INTEB由PC2的置位/复位控制。,方式1的输入时序,10.4.3 方式1输出,8255A的端口工作在方式1输出时,如图10-13所示。,1. 主要的控制信号 OBF#(Output Buffer Full)输出缓冲器满信号,低电平有效。这是8255A输出给外设的一个控制信号。当其有效时,表示CPU已经把数据输出给指定的端口,外设可以把数据输出。它由输出命令WR#的上升沿设置为有效,由ACK#的有效信号使其恢复为高。 ACK#(Acknowledge)低电平有效,这是一个外设的响应信号,指示CPU输出给8255A的数据已经由外设接收。,INTR中断请求信号,高电平有效。当输出装置已经接
16、收了CPU输出的数据后,它用来作为向CPU提出新的中断请求,要求CPU继续输出数据。当ACK#为“1”(高电平),OBF为“1” (高电平)和INTE为“1”(高电平)时,使其置位(高电平),而WR#信号的下降沿使其复位(低电平)。INTEA由PC6的置位/复位控制。INTEB由PC2的置位/复位控制。,2. 时序8255工作在方式1输出时的时序,如图10-14所示。用在中断控制方式时,输出过程是由CPU响应中断开始的,在中断服务程序中,CPU输出数据和发出WR#信号,WR#信号一方面清除INTR(经过时间tWIT),另外在WR#上升沿,使OBF有效,通知外设接收数据,实质上OBF信号是外设的
17、一个选通命令。 在WR#上升沿后经过tWB时间数据就输出了,当外设接收数据后,发出ACK#信号,它一方面使OBF无效(经过tAOB),另一方面在ACK#的上升沿使INTR有效(经过tAIT),发出新的中断请求。,8255工作在方式1输出时的时序,10.5 方式2的功能,这种工作方式,使外设可以在单一的8位总线上,既能发送数据也能接收数据(双向总线I/O)。工作时可用程序查询方式,也可工作在中断方式。 10.5.1 方式2的主要功能 8255A的端口工作在方式2时,具有以下主要功能: (1) 方式2只用于端口A; (2) 一个8位的双向总线端口A和一个5位控制端口C; (3) 输入和输出是锁存的
18、; (4) 5位控制端口是用作端口A的控制和状态信息。,应用:查询式传送,中断传送,各个信号的意义为:INTR中断请求信号,高电平有效。在输入和输出方式时,用来作为向CPU发出的中断请求信号。OBF#输出缓冲器满,低电平有效。这是对外设的一种命令信号,表示CPU已把数据输出至端口A。ACK#响应信号,低电平有效。ACK#的有效沿启动端口A的三态输出缓冲器,送出数据;否则,输出缓冲器处在高阻状态。ACK#的上升沿是数据已输出的回答信号。INTE1与输出缓冲器相关的中断屏蔽触发器,由PC6的置位/复位控制。,STB#选通输入,低电平有效。这是外设供给8255A的选通信号,它把输入数据选通至输入锁存
19、器。 IBF输入缓冲器满,高电平有效。它是一个控制信息,指示数据已进入输入锁存器。在CPU未把数据读走前,IBF始终为高电平,阻止输入设备送来新的数据。 INTE2与输入缓冲器相关的中断屏蔽触发器,由PC4的置位/复位控制。,10.5.2 方式2的时序,8255A的端口工作在方式2的时序,如图10-16所示。方式2实质上是方式1输入与方式1输出的组合,故各个时间参数的意义与方式1的相同。输出是由CPU执行输出指令(给出I/O的WR#)信号开始的,输入是由选通信号开始的。图上的输入、输出的顺序是任意的,只要WR#在ACK#以前发生。STB#在RD#以前发生就行。在输入和输出的情况下,都可以用中断
20、方式。故INTR=IBFMASK#STB#RD#+OBF#MASK#ACK#WR#其中,MASK#=INTE。,方式2的时序,10.5.3 方式2控制字,当端口A工作于方式2时,端口B可以工作在方式0或方式1;可以作为输入,也可以作为输出。此时端口C的各位的功能如图10-17所示。,若要求8255A工作于如下所示的方式:则方式字ICW=11000110B=C6H,在8255A方式控制命令字已经输出后,读端口C,则可得到如下的方式2状态字:若要允许方式2中断,则可用端口C的置位/复位命令:允许输出中断,置PC6,则控制字为00001101B。允许输入中断,置PC4,控制字为00001001B。,
21、10.6 8255应用举例,下面以双机并行通信接口为例,介绍8255的应用。1. 要求在甲乙两台微型计算机之间并行传送1KB数据。甲机发送,乙机接收。甲机一侧的8255A采用方式1工作,乙机一侧的8255A采用方式0工作。两台微机的CPU与接口之间都采用查询方式交换数据。2. 分析根据要求,双机均采用可编程并行接口芯片8255A构成接口电路,只是8255A的工作方式不同。,3. 设计 (1) 硬件连接。根据上述要求,接口电路的连接如图10-18所示。 甲机8255A为方式l发送(输出): PA口指定为输出,PC7和PC6引脚由方式1规定作为联络信号 线OBF#和ACK#。 乙机8255A为方式
22、0接收(输入): PA口用作输入,联络信号自行选择,选择PC4和PC0作为联络信号线,PC4输入、PC0输出。,步骤:确定端口地址(300H303H);确定方式控制字;(甲机端口A方式1输出;乙机端口B方式0输入);端口C某些位进行置1或清0;编写程序。,(2) 软件编程 甲机发送程序: MOV DX,303H ;8255A命令口 MOV AL,10100000B ;端口A,方式1;端口B不用 OUT DX,AL ;输出方式字 MOV AL,0DH ;置发送中断允许INTEA1 OUT DX,AL ;PC6置“1” MOV AX,030H ;发送数据的首地址 MOV ES,AX MOV BX,
23、00H MOV CX,3FFH ;置发送字节数 MOV DX,300H ;置8255A数据字地址 MOV AL,ES:BX ;取第一个发送数据 OUT DX,AL ;写第一个数,产生第一个OBF#信号 INC BX ;指向下一个数 DEC CX ;字节数-1,L: MOV DX,302H ;8255A状态口IN AL,DX ;输入状态AND AL,08H ;检查有无INTRAJZ L ;若无中断请求则等待MOV DX,300H ;置数据口地址MOV AL,ES:EBX ;取数据OUT DX,AL ;输出INC BXDEC CXJNZ L ;未发送完则循环MOV AX,4C00HINT 21H
24、;发送完,返回DOS在上述发送程序中,检查的是INTR位(PC3)的状态,实际上,也可以检查发送缓冲器满OBF#位(PC7)的状态。, 乙机接收程序: MOV DX,303H ;置8255A命令口地址 MOV AL,10011000B ;端口A方式0,PC4入、PC0 OUT DX,AL ;输出方式字 MOV AL,00000001B ;PC0置1控制字 OUT DX,AL ;输出使ACK1 MOV AX,040H ;接收区首地址 MOV ES,AX MOV BX,00H MOV CX,3FFH ;置字节数,L1: MOV DX,302H ;8255A PC口IN AL,DX ;查询甲机的OBF是否等于0(PC40?)AND AL,10HJNZ L1;无数据,等待MOV DX,300H ;8255A数据口地址IN AL,DX ;输入数据MOV ES:BX,A L;存入内存MOV DX,303HOUT AL,00000000B ;PC0置“0”OUT DX,AL ;产生ACK信号NOPNOPMOV AL,00000001B ;PC0置“1”OUT DX,AL ;ACK变高INC BXDEC CXJNZ L1 ;未接收完,循环MOV AX,4C00HINT 21H ;接收完,返回DOS,