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


    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
    
    • 1
    • 2

    在这里插入图片描述




    二、端口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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6




    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
    	...				;后续程序段
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24





    例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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    网上借用程序写法:

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28



  • 相关阅读:
    知识积累:PageHelper分页问题,页码小于总页数和大于总页数返回数据问题,PageHelper分页失效
    基于SpringBoot的学生选课系统
    【MySQL】数据库进阶之索引内容详解(上篇 索引分类与操作)
    [CSAWQual 2016]i_got_id(Perl ARGV)
    DEJA_VU3D - Cesium功能集 之 070-编辑3Dtiles(平移+旋转)
    git push解决办法:! [remote rejected] prod -> prod (pre-receive hook declined)
    Java 和低延迟
    字符编码
    2)采样数学表示
    数据结构+java基础+进制之间的转换
  • 原文地址:https://blog.csdn.net/CSDN_e_1/article/details/127998745