1、第九章 可编程外围接口芯片,8255A及其应用,8255A 是INTEL系列的并行接口芯片,由于它是一种可编程的外部接口部件,通常作为微机系统总线与外部设备的接口控制部件,可通过软件来设置芯片的工作方式,用8255A连接外部设备时,通常不需要附加外部电路,给使用带来很大的方便。,8255A内部结构 8255A引脚说明 8255A控制字 8255A工作方式 8255A在PC机中的应用 8255A接口实例,9.1 8255的工作原理,一、8255A的结构和功能(P325),8255的工作原理,一、8255A的结构和功能,1. 数据端口A、B、C,8255有3个8位的I/O端口,设计人员可以用软件使
2、它们分别作为输入端口或输出端口。,端口A:对应了1个8位的数据输入锁存器和1个8位的数据输出锁存/缓冲器。所以口A作为输入或输出时,数据均受到锁存。(PA0PA7),端口B:对应了1个8位的数据输入缓冲器和1个8位的数据输出锁存器/缓冲器。所以口B作为输入端口时,不会对数据进行锁存,而作为输出端口时,数据会受到锁存。(PB0PB7),端口C:与B口一致,对应了一个8位数据输入缓冲器和1个8位的数据输出锁存/缓冲器。所以C口作为输入端口时,对数据不作锁存,而作为输出端口时,对数据进行锁存(PC0PC7),8255的工作原理,一、8255A的结构和功能,2. A组和B组控制逻辑,8255在使用时,
3、常用端口A与端口C的高4位组成一个带控制信号的端口,称为A组。由A组控制逻辑管理; 用端口B与端口C的低4位也可以组成一个带控制信号的端口,称为B组。由B组控制逻辑管理。,其中,A组由端口A作为与外设交换数据的输入/输出接口,C口的高4位作为外设连接的控制信号线和状态信号线,以配合A口工作。,同理,B组由端口B作为与外设交换数据的输入/输出接口,C口的低4位作为外设连接的控制信号线和状态信号线,以配合B口工作。,8255的工作原理,一、8255A的结构和功能,3. 数据总线缓冲器,8255的数据总线缓冲器是双向三态的8位数据缓冲器,通过它直接与系统的数据总线(D0D7)相连。输入/输出数据、C
4、PU发给8255的控制字都是通过这个缓冲器传送的。,4. 读/写控制逻辑电路(P326),读/写控制逻辑电路负责管理8255的数据传输过程。它接收CS及来自系统地址总线A1,A0(8086系统中为A2,A1)和控制总线的输入信号RESET,WR,RD,将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发送给这两个部件,以完成对数据、状态信息和控制信息的传输。(见P327页),8255的工作原理,一、8255A的结构和功能,说明:,(2)端口C又可以分成“上C口”和“下C口”2个部分,可以用作A口和B口的控制信号线,所以把A口+上C口称为A组,B口+下C口称为B组。,(3)
5、A口:输入有锁存器,输出有锁存器和缓冲器, B和C口:输入有缓冲器,输出有锁存器和缓冲器。,8255的工作原理,一、8255A的结构和功能,8255的工作原理,二、8255A的控制字(P327),8255A可通过指令在控制端口中设置控制字来决定它的工作。其控制字可分为两类(个),都写入控制字寄存器(A1A0=11),芯片各端口的工作方式控制字端口C按位置1/置0控制字,1.方式选择控制字,8255A具有3种基本的工作方式:,方式0:基本输入输出方式( A、B、C口)方式1:选通输入输出方式( A、B口)方式2:双向总线I/O方式(仅A口),(类比8253的地址),8255的工作原理,D7=1,
6、8255的工作原理,它可使端口C中的任何一位进行置位(1)或复位(0)。,D7=0,8255的工作原理,二、8255A的控制字,3.编程举例(只要设定方式控制字即可),设: A、B、C数据口地址分别为80H、 82H、84H、控制口端口地址 86H,1) A口方式0,输出、B口方式0,输入,C口高4位输出,C口低4位输入MOV AL,10000011BOUT 86H,AL,2) PC7置1,PC3置0 MOV DX,86H MOV AL,00001111B;PC7置1 OUT DX,AL MOV AL,00000110B;PC3置0 OUT DX,AL,8255的工作原理,三、8255A的工作
7、方式,1. 工作方式0:基本的输入/输出方式。A口、B口、上C口、下C口都可以独立设置作为输入或输出使用。 适合用于无条件或查询式传送。 方式0的输入不能锁存。,2. 工作方式1:应答式输入或输出方式。(P330) A口、B口可以分别作为数据口工作在方式1。需要使用C口中特定的引脚作为选通和应答使用。 C口中其余的引脚仍可工作在方式0,定义为输入或输出。适合用于中断式传送和程序查询方式I/O传送。,C口中特定的引脚作为选通和应答使用时,视A口(或B口)为输入还是输出的不同,有两个引脚的含义有所不同。,8255的工作原理,输入缓冲器满信号 表示A口已经接收数据 (可通过读C口获得该信号),中断请
8、求信号 请求CPU接收数据,选通信号,表示外设 将数据送到输入缓冲器中,8255的工作原理,同样B口作为选通输入接口时道理是一样的,只不过是这些信号使用的是C口的PC2,PC1和PC0。,当外设数据准备好以后,发出一个负脉冲选通信号STBA ,使A口打开输入锁存器接收数据。 A口接收到数据以后,发出IBFA 数据写完后, STBA撤销即变为无效 STBA和IBFA都变为高电平以后,如果INTEA允许,则8255A发出中断请求信号,希望CPU接收数据。CPU读数据的RD信号的下降沿使INTRA 和IBFA恢复低电平。 PS: 只可以通过对PC4的置位和复位来设置INTEA。,A口选通输入方式过程
9、,在方式1输入下,可以用查询的方式让CPU读数据,也可以用中断的方式。以A口为例,查询:通过读取IBF判断是否有数据可读,如果IBF为高则表示有数据可读,就用in读取。大体步骤: AG: IN AL,C口TEST AL,00100000B ;判断IBF所在的D5JZ AG ;如果没有数据即IBF为低则继续读取判断IN AL,A口 ;如已经有数据则读A口数据,在方式1输入下,可以用查询的方式让CPU读数据,也可以用中断的方式。以A口为例,中断:通过设置PC4为1使得INTEA有效,当IBF也有效时INTR就会有效,该信号送给CPU的INTR,表示发生中断,由中断服务程序来读取数据 ;设置中断向量
10、,指定N号中断的服务程序为INTRADMOV AL,00001001BOUT C口,AL ;设置PC4为1,即INTEA有效 INTRAD PROC IN AL,A口 ;一旦有了数据,则发生中断,;就调用服务程序里去读取RET INTRAD ENDP,8255的工作原理,输出缓冲器满信号 表示CPU已经将数据输出到8255A指定端口,作为外设的选通信号,中断请求信号 请求CPU再次输出数据,外设响应信号,表示外设 取走数据,PC7,PC6,PC3,PA7PA0,INTEA,OBFA,INTRA,ACKA,A口选通输出方式,WR,D7D0,8255的工作原理,B口这些信号使用的是C口的PC2,P
11、C1和PC0。,输出缓冲器为空时,发出INTR信号要求CPU输出数据当CPU向端口A输出数据以后,在WR的后沿使OBFA变低,告知外设输出缓冲器有数据,同时也使得INTRA变低 外设收到OBFA后,发出一个负脉冲ACKA送给8255A,开启8255的输出锁存器, ACKA使OBFA变为高电平。取走数据后,ACK变高 ACKA和OBFA都变为高电平以后,如果INTEA允许,则8255A发出中断请求信号,以便使CPU再次输出数据。,A口选通输出方式过程,PS:可以通过对PC6的置位和复位来设置INTEA。 方式1的输出同样可以用查询或中断来实现,8255的工作原理,用PC6设置INTE1, 用PC
12、4设置INTE2。,输入和输出中断通过 或门输出INTRA信号。,应答输入的状态信号可通过读C口的相应数据位获得。,工作在方式下的控制字,D7:方式字的标志 D6,D5:组工作方式 D4:口是输入还是输出 D3:口高四位输入还是输出 D2:口工作方式, D1:口输入还是输出 D0:输入还是输出,D7 D6 D5 D4 D3 D2 D1 D0,X,X,0,1,X,0,8255的工作原理,三、8255A的工作方式,A1,A1,A0,A0,8位,8088,8255,端口地址:,A1 A0,0 0,0 1,1 0,1 1,X0H,X1H,X2H,X3H,8086,8255,低8位,A2,A1,A1,A
13、0,A2 A1,A0,0 0,0 1,1 0,1 1,0,0,0,0,端口地址:,X0H,X2H,X4H,X6H,9.2 8255的应用 (P337),例1:电路如图示。由8个LED实时显示8个开关的状态,开关断开,相应的LED亮,开关闭合,相应的LED熄灭。,8255的应用,由图知,A口输入,8个开关K7K0分别接PA7PA0 。 B口输出,8个LED7LED0分别接PB7PB0,(1) 8255A各端口地址:,(2) 方式控制字:,只用端口A、B。,端口A、B均工作在方式0。A口输入,B口输出。,方式控制字:,9.2 8255的应用,(3) 编程:,CCODE SEGMENTASSUME
14、CS:CCODE START: MOV DX, 0F6HMOV AL, 98HOUT DX, AL TEST_IT: MOV DX, 0F0HIN AL, DXMOV DX, 0F2HOUT DX, ALJMP TEST_IT CCODE ENDSEND START,+5V,10k,PA3,8255A,PA4,PA7,PA6,10k,PB7,PB6,PB4,PB5,PB3,PB2,PB0,PB1,例:电路如图,二、键盘接口,PA0,PA1,PA5,PA2,例: 8X8=64 的键盘 A口做输出 B口做输入,0,5,6,7,28,2D,2E,2F,30,35,35,37,9.2 8255的应用,
15、扫描键盘步骤:(P340),(1) 检测所有按键是否全都松开了,直到所有键松开。,(5) 检测确认该键是否释放:,(2) 检测是否有键按下,直到有键按下。,(3) 检测确认有键按下。(消除键抖动,20ms),(4) 检测确认是否只有一个键按下:,否:转第(1)步 是:确认哪个键被按下,否:继续确认 是:转第(2)步,(汇编语言程序见教材P 340 P 342),判断是否有键按下,对所有行(即A口所有位)都输出0(称作“拉低”),然后读所有列(读B口),如果B口八位数据中有0出现,则有键按下,判断哪个键被按下,确定行列号便可 依次把PA0PA7拉低,读列值,看是否全为1(与FFH比较),如不全为
16、1,则该行有键按下,记下当前向A口输出的值即为行号,读取当前B口的值即为列号,9.2 8255的应用,例:电路如图示。由16个按键开关组成的键盘。,+5V,10k,PA0,8255A,PA1,PA3,PA2,10k,PB7,PB6,PB4,PB5,PB3,PB2,PB0,PB1,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,A口用作输出,B口用作输入,二、键盘接口(P339),二、键盘接口(P339),此处PA0PA3(行号)连接到PB 4PB7 ,所以读B口时,所得的低四位为列号,高四位为行号。即一次获取了行列号。 对每个键确定其行列号的值,在数据段中先存放键与行列号的对应
17、表。那么,在读取到所按下键的行列号时,通过查表即可得到所读键的名称。程序见书后面的内容不讲,9.2 8255的应用,打印机并行接口标准,打印机并行接口通常采用Centronics并行接口标准,共有36个引脚信号。其说明见表1。,五、打印机并行接口(了解),在系统连接时,打印机一端是36芯D型插座,主机一端是25芯D型插座。主机与打印电缆之间的连线见表2。,表1 Centronics并行打印接口标准,表1 Centronics并行打印接口标准(续1),表1 Centronics并行打印接口标准(续2),表2 主机与打印机接口信号连线表,表2 主机与打印机接口信号连线表(续),打印机适配器端口直接
18、编程 查询方式 中断方式 BIOS功能调用 在BIOS系统中提供了打印机管理程序,用户可使用INT 17H功能调用,完成字符打印。 DOS功能调用 用户可调用INT 21H的5号子功能,完成字符打印功能。,打印机接口编程实例,查询方式,例:8255A作为连接打印机的接口,工作在方式0,输出。,8086,8255A,打印机,D7D0,PA,PC6,PC2,STB,BUSY,查询式打印机接口示意图,解:,A口:方式0、输出数据 下C口:方式0、PC2输入状态信号 上C口:方式0、PC6输出选通信号,方式控制字为: 10000001B。,为增强驱动能力, 可加门电路驱动,设端口地址是:0D0H0D6
19、H,要打印的字符放在BL中。 程序如下:Setup: MOV AL,81H ;设置工作方式OUT 0D6H,ALMOV AL,0DH ; PC6置1,0DH=0000,1101BOUT 0D6H,ALReady: IN AL,0D2H ;读PC口TEST AL,04H ;打印机忙否(PC2 =BUSY=?)JNZ Ready ;PC2=1,打印机忙,等待MOV AL,CL ;打印的字符送AL中OUT 0D0H,AL ; BL中的字符送PA口MOV AL,0CH ;置PC6为0; 00001100=0CHOUT 0D6H,AL ; 置PC6=0,即 =0;INC AL ;置PC6为1; 0000
20、1101=0DHOUT 0D6H,AL ;置PC6=1,即 =1,,中断方式,例:8255A作为连接打印机的接口,工作在方式0,输出。,与查询方式不同的是CPU通过8255A发送一个字符给打印机,打印机取走数据后,利用中断信号通知CPU已取走刚刚送出的字符,打印机已准备好接收数下一个数据。,8086,8255A,打印机,D7D0,PA,PC0,PC6,STB,ACK,中断式打印机接口示意图,解:,A口:方式1、输出数据PC6输入外设响应信号 下C口:方式0、PC0输出选通信号,PC3,IR3,INTR,INTA,8259A,方式控制字为: 10100000B。,设端口地址是:0C0H0C6H,
21、用DI指示字符在缓冲区的位置。 程序如下:1、中断服务程序:(假设开始位置是2000H:1000H) PRNDRV: MOV AL, DI ;打印的字符送AL中OUT 0C0H,ALINC DIMOV AL,00 ;置PC0为0OUT 0C6H,ALMOV AL,1 ;置PC0为1OUT 0C6H,ALMOV AL,20H ;向8259A发EOI命令OUT 20H,ALIRET ;该程序做了简化处理。,2、主程序 INIT8259A:MOV AL,13H ;初始化8259AOUT 20H,ALMOV AL, 8OUT 21H,ALMOV AL,9OUT 21H,ALINIT8255A:MOV
22、AL,0A0H ;设置8255A工作方式OUT 0C6H,ALMOV AL,01 ;置PC2为1OUT 0C6H,AL,INSTDRV:MOV AX,0 ;安装中断向量MOV DS,AX ;IR3的中断类型是0BHMOV Word Ptr 0BH*4 ,1000HMOV Word Ptr 0BH*4+2 ,2000HSETUPIF:MOV AL,0DH ;设置8255A的INTEAOUT 0C6H,ALIN AL,21H ;设置8259A的IMR,允许IR3AND AL,0FBHOUT 21H,ALSTI ;开中断,3、打印驱动程序假设字符缓冲区从3000H:0000H处开始存放,在3000H
23、:1000H处存放一个字,表示打印字符数。 PRINT: MOV AX,3000HMOV DS,AXMOV DI,0000HINT 0BH ;第一次中断,可以软件 ;触发 LOOP1: CMP DI,1000H JB LOOP1 MOV AL,0CH ;关闭INTEAOUT 0D3H,AL 说明:打印结束也可以在中断服务程序中进行判断。,例4 设计一个PC/XT机与打印机的接口电路,采用中断控制,画出硬件逻辑图并设计相应的驱动程序。设8255口地址为280H286H,选A组方式1输出组态。,工作过程:,参考程序:,LPT_OUT SEGMENTASSUME CS: LPT_OUT, DS: L
24、PT_OUTASSUME ES: LPT_OUT, SS: LPT_OUT ORG 100H STA PROCJMP INIT UF_BEG DB 4096 DUP(20)POINT DW ? BUF_LEG EQU 4096,LPT_INT PROC STI PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS PUSH ES PUSH CS POP DS,MOV BX, POINT MOV AL, BX CMP AL, 1AH JE LPT_INT2 MOV DX, 284H OUT DX, AL INC BX MOV POINT, BX CMP BX, OFFS
25、ET POINT JNE LPT_INT1 移动文件读指针 读文件至缓冲区 初始化缓冲区指针,LPT_INT1: POP ESPOP DSPOP DXPOP CXPOP BXMOV AL, 20HOUT 20H, ALPOP AXIRET,LPT_INT2: MOV DX, 287HMOV AL,0CHOUT DX, ALMOV AL, 00HOUT DX, ALPUSH CSPOP ESMOV AH, 49HINT 21HJMP LPT_INT1 LPT_INT ENDP,INIT: STIIN AL, 21H AND AL, 0F7H OUT 21H, AL MOV DX, OFFSET
26、LPT_INT MOV AX, 250BH INT 21H,MOV DX, 287H MOV AL, 0A2H OUT DX, AL MOV AL, 0BH OUT DX, AL MOV AL, 0AH OUT DX, AL MOV AL, 01H OUT DX, AL MOV DX, 285H IN AL, DX AND AL, 7 JE L1 否,打印机出错提示,L1: 读文件至内存缓冲区,初始化缓冲区指针 MOV DX, 287H MOV AL, 0DH OUT DX, AL MOV DX, 284H MOV BX, POINT MOV AL, BX INC BX MOV POINT, BX OUT DX, AL MOV DX, OFFSET INIT INT 27H INT 20H STA ENDP LPT_OUT ENDSEND STA,习题,当8255A工作在方式1和方式2时,哪些引脚是联络线?这些联络信号有效时代表什么物理意义? 当CPU用查询方式和8255A交换信息时,应查询哪些信号? 用中断方式和8255A交换信息时,利用哪些端口提出中断请求? 8255A的方式选择控制字和口C置0/置1控制字都是写入控制端口的,8255A是怎样识别的?,