微机----------------可编程并行接口8255A

本文详细介绍了8255A的内部结构、控制字设定以及三种工作方式,包括基本输入输出、选通输入输出和双向传输。通过具体的编程示例,阐述了8255A在不同工作方式下如何与外部设备如打印机交互,并展示了初始化程序和中断处理子程序的编写。
摘要由CSDN通过智能技术生成

8255A的内部结构

在这里插入图片描述
在这里插入图片描述

①数据总线缓冲器
②数据端口A、B、C
③A组和B组控制电路
④读/写控制逻辑




8255A控制信息和传输动作的对应关系

在这里插入图片描述



⭐8255A的控制字

一、方式选择控制字

①方式0(基本输入输出工作方式)

在这里插入图片描述
例如:
在一个8086系统中,若8255A的控制端口地址为0046H,要求该8255A的端口A工作在方式0,作输出口;端口B工作在方式1,作输出口;端口C的高4位做输出,低四位配合端口B工作,设置为输出。

D7D6D5D4D3D2D1D0
10000110

可以用下列指令设置8255A的方式选择控制字

MOV AL,86H	;方向选择控制字
OUT 46H,AL	;控制端口地址0046H

在这里插入图片描述




二、端口C置1/置0控制字

经常将端口C的 某一个数位几个数位作为控制信号使用,以配合端口A或端口B工作。
端口C置1/置0控制字可以设置端口C的某个数位为1或为0,从而完成信息传输过程中的信号设置要求。

在这里插入图片描述

在这里插入图片描述
例如:
要求将端口C的PC6置0,PC3置1,则端口C置1/置0控制字分别为0CH和07H,若8255A的控制端口地址为B0F6H。
则将该8255A的端口C的PC6置0,PC3置1的程序段如下:

PC6

D7D6D5D4D3D2D1D0
00001100

PC3

D7D6D5D4D3D2D1D0
00000111
MOV DX,0B0F6H
MOV AL,0CH
OUT DX,AL

MOV AL,07H
OUT DX,AL




8255A的工作方式

8255A的工作方式有三种,分别为方式0、方式1和方式2
端口A可以工作在这三种方式的任何一种
端口B只能工作在方式0或方式1
端口C除作为一般输入输出口之外,常用作配合端口A和端口B工作的控制联络口

②方式1(选通的输入输出工作方式)

当8255A的端口A或端口B有一个工作在方式1,而另一个工作在方式0时,端口C的3位固定地作为数据传送的控制联络信号
若端口A和端口B都工作在方式1, 则端口C的6位被占用作为数据传送的控制信号

正是由于工作在方式1时,端口C的某些数位自动地转为数据传送的选通应答信号,故称为该方式 选通的输入输出方式。

在这里插入图片描述





![在这里插入图片描述](https://img-blog.csdnimg.cn/845f76fc12f94338932a3cf90e
在这里插入图片描述





在这里插入图片描述




在这里插入图片描述
在这里插入图片描述

基于以上分析,若8255A的某一个端口工作在方式1的输入或输出情况下,端口C中 自动提供了相应的数位作为控制信号,尤其是提供了中断请求信号。

③方式2(双向传输方式)

⭐⭐8255的编程及应用

例1:8255A作为连接打印机的接口,工作于方式0。
工作过程为:当主机要往打印机输出字符时,先查询打印机忙信号。如果打印机正在处理一个字符或正在打印一行字符,则忙信号为1,反之,则忙信号为0。因此,当查询到忙信号为0时,则可通过8255A往打印机输出一个字符。此时,要将选通信号 S T B ‾ \overline{STB} STB置为低电平,然后再使 S T B ‾ \overline{STB} STB置为高电平,这相当于在 S T B ‾ \overline{STB} STB端输出一个负脉冲(初始状态, S T B ‾ \overline{STB} STB是高电平)。
现将端口A作为传送字符的通道,工作方式0,输出方式;
B端口未用;
端口C也工作于方式0,
PC3作为BUSY信号输入端,故PC3~PC0 为输入方式,
PC6作为 S T B ‾ \overline{STB} STB信号输出,故PC7~PC4为输出方式。
设需打印的字符已放在CL寄存器中,8255A的端口地址为
    A端口:C000H     C端口:C004H
    B端口:C002H     控制口:C006H
具体代码段如下:

在这里插入图片描述

方向选择控制字:

D7D6D5D4D3D2D1D0
10000001
PRINT:MOV DX,0C006H
	  MOV AL,81H	;方向控制字,A、B和C端口工作于方式0,A口输出,PC7~PC4输出,PC3~PC0输入
	  OUT DX,AL

	  MOV AL,0DH	;用C端口置1/置0方式使PC6为1,即STB初始状态为高电平
	  OUT DX,AL		;STB送高电平
LP:	MOV DX,0C004H	;C端口
	IN	AL,DX		;检测BUSY,从DX中读一个字节送入AL

	TEST AL,08H		;测试PC3位 0000 1000
	JNZ LP			;若打印机忙,则等待(不等于0跳转,打印机忙时为1)
	
	MOV	AL.CL		;如不忙,则把CL中字符送端口AL
	
	MOV DX,0C000H	;端口A
	OUT DX,AL		;若打印机不忙,将AL中字符送端口A	
	
	MOV	DX,0C006H	;控制口
	MOV	AL,0CH  	;用C端口置1/置0方式使PC6为0
	OUT DX,AL		;使STB为低电平

	MOV	AL,ODH		;用C端口置1/置0方式使PC6为1
	OUT	DX,AL
	...				;后续程序段





例2:8255A工作方式1,作为用中断方式工作的Centronic360字符打印机的接口
在这里插入图片描述

8255A的端口A作为数据通道,工作于方式1。

PC7自动作为 O B F ‾ \overline{OBF} OBF信号输出端,

PC6自动作为 A C K ‾ \overline{ACK} ACK信号输入端

PC3自动作为INTR信号输出端。
在Centronic360字符打印机标准定义的信号线中,最主要的是8位并行数据线,2条联络信号,选通信号 S T B ‾ \overline{STB} STB ,响应信号 A C K N L G ‾ \overline{ACKNLG} ACKNLG和一条忙信号线BUSY。所需的数据选通脉冲信号 S T B ‾ \overline{STB} STBCPU控制PC0来产生。 O B F ‾ \overline{OBF} OBF在这里没有用到,可将它悬空,8255A的 A C K ‾ \overline{ACK} ACK连接到打印机的 A C K N L G ‾ \overline{ACKNLG} ACKNLG端。

PC3连接8259A的中断请求输入端IR3。对应于中断类型号0BH,此中断对应的中断向量放在2CH,2DH,2EH和2FH 4个内存单元中,假设8259A在系统程序中已经完成初始化,这部分电路连接图未画出。
设8255A的端口地址为
    A端口:00C0H     C端口:00C4H
    B端口:00C2H     控制口:00C6H

方向控制字

D7D6D5D4D3D2D1D0
10100000

方向控制字为A0H,其中D3~D1为任选,现取为0,其他各位的值使A组工作于方式1,A端口为输出,PC0作为输出。
实际使用时,在此系统中由中断处理程序完成字符输出,而主程序仅仅完成方向控制字的设置和开放中断需要指出的是这里开放中断①不仅要用STI开放CPU的中断, 而且 ②要使8255A的INTE为1。

在中断处理程序中,设字符已存放在主机的字符输出缓冲区,往A端口输出字符后,CPU用 对C端口的置1/置0命令使选通信号为0,从而将数据送到打印机 。当打印机接收并打印字符后,发出回答信号 A C K ‾ \overline{ACK} ACK,由此清除了8255A的“缓冲器满”指示,并使8255A产生新的中断请求。如果中断是开放的,CPU便响应中断,进入中断处理程序。
以下为具体程序段:

MINA:	MOV	AL,0A0H		;初始化程序
		OUT	0C6H,AL		;将方向控制字送入控制口进行初始化,设置8255A的控制字
		
		MOV AL,01H		;使PC0为1,即让STB初始状态为低电平
		OUT 0C6H,AL
		
		XOR	AX,AX
		MOV DS,AX		;DS指到0段,中断向量表在0段

		MOV [2CH],OFFSET	ROUT;中断类型号为0BH,写入的表地址为0BH×4

		MOV	[2EH],SEG	ROUT

		MOV AL,0DH		;使PC6为1,允许8255A中断
		OUT 0C6H,AL
		STI				;开放中断


参照以上主程序的初始化部分,中断处理子程序必须装配在1000H:2000H处。
中断处理子程序的主要程序段如下:
ROUT:	MOV AL,[DI]		;DI为缓冲区指针,字符送端口A
		OUT	0C0H,AL	
	
		MOV AL,00H		;使PC0为0,产生选通信号
		OUT	0C6H,AL

		INC AL			;使PC0为1,撤销选通信号
		OUT 0C6H,AL
		...
		IRET

网上借用程序写法:

INIT:	
	MOV    AL,0AOH			;初始化程序
 	OUT    0C6H,AL           	;设置8255A的控制字
 	MOV    AL,01             	;使PC0为1,即让STB初始状态为低电平
 	OUT    0C6H,AL	 
 	XOR    AX,AX	 
 	MOV    DS,AX             	;DS指到0段,中断向量表在0段
 	LEA    AX,INTPR	 
 	MOV    WORD PTR [0BH*4],AX	;中断类型号为0BH,写入的表地址为0BH×4
 	MOV    AX,SEG  INTPR	 
 	MOV    WORD PTR [0BH*4+2],AX;把向量高字写入高地址
 	MOV    AL,0DH            	;使INTE为l,允许8255A请求中断
 	OUT    0C6H,AL	 
 	STI                        	;使IF为1,开放中断


中断处理子程序的主要程序段如下:

INTPR:	
	MOV    AL,DI 			;DI为打印字符缓冲区指针,字符送A端口
 	OUT    0COH,AL	 
 	OUT    0C6H,AL				;使PC0 为0,产生选通信号负脉冲
 	INC    AL	 
 	OUT    0C6H,AL   			;使PC0为1,撤消选通信号
 	·	 
	·	 
	·					;后续处理
	IRET              	;中断返回



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值