文章目录

一、简介

  • 并行接口是传输并行数据的接口,输入/输出都是并行格式的信号。8255是常用的8位可编程并行接口芯片

二、8255的内部结构及引脚信号

  • 下图是8255的内部结构,它由数据总线缓冲器读写控制逻辑部件A/B两组控制电路数据端口A/B//C组成
    在这里插入图片描述
  • 数据总线缓冲器、读写控制逻辑部件是所有接口芯片共有的部分,下面说明其他8255特有的部分

(1)8255内部主要部件

  1. 数据端口:
    在这里插入图片描述
  2. A/B组控制电路:根据设定的8255方式字来控制8255的工作方式,其中的控制寄存器接受CPU输出的方式字(就是用户写入的),然后分别决定两个组的工作方式;也可根据控制字对C口进行单独的位置位复位操作。

(2)8255引脚信号

  1. 与外设接口信号引脚
    (1)A口的8个I/O引脚:PA7~PA0
    (2)B口的8个I/O引脚:PB7~PB0
    (3)C口的8个I/O引脚:PC7~PC0
  2. 与系统总线接口信号引脚
    (1)数据线:D7~D0
    (2)控制信号:信号功能有效电平说明RD(上划线)读控制低从数据口读数据WR(上划线)写控制低向数据口写数据CS(上划线)使能芯片低芯片使能RESET复位芯片高清除所有内部寄存器,同时把3个数据口设为输入A1/A0选中端口高A1/A0=00、01、10、11分别选中A、B、C、控制口在这里插入图片描述

三、8255的工作方式

方式说明适用端口
方式0基本的输入输出A、B、C上半口、C下半口
方式1选通的输入输出A、B(C配合)
方式2双向传输A(C配合)
(非基本控制方式)单独控制每个位的输出电平C

1. 方式0 —— 基本的输入输出控制

(1)说明:

  1. 此方式适用于所有端口,C的上下半口可以分别配置为输入输出
  2. 此方式没有规定固定的用于应答的联络信号线
  3. 端口配置为方式0,则其作为输入时具有缓冲功能;作为输出时具有锁存功能

2. 方式1 —— 选通的输入输出

(1)说明:

  1. 此方式适用于端口A、B,需要C口某些为配合作为控制或通讯联络信号
  2. C口在配合A、B时有固定的搭配关系
  3. C口中当前不需要配合A、B工作的引脚,可以单独定义为I/O使用

(2)方式1下的输入组态:

  1. 注意下C组端口的匹配,这个是固定死
在这里插入图片描述
  1. 信号含义说明
    在这里插入图片描述
    补充:in指令(端口读指令)会使RD(上划线)拉低
  2. 时序图
    在这里插入图片描述
  3. 操作说明:
    1. 采用查询方式输入:CPU先查询8255的输入缓冲是否满(IBF),若IBF=1,则CPU从8255读入数据
    2. 采用中断方式输入:CPU先用C口的位控制功能使能INTE,当INTR信号触发CPU外部中断时从8255读入数据

(3)方式1下的输出组态:

  1. 注意下C组端口的匹配,这个是固定死
    在这里插入图片描述
  2. 信号含义说明
    在这里插入图片描述
  3. 时序图在这里插入图片描述

3. 方式2 —— 双向的数据传送方式

(1)说明:

  1. 此方式仅适用于A端口,C组端口配合其工作
  2. 此方式规定了固定的用于应答的联络信号线
  3. 它实际是方式1输入和输出的组合,区别在于C口某些选通控制或应答信号有些区别,此外输入和输出共用一共一个选通信号
  4. 因为输入输出中断共用一个信号,因此INTR为高时,需要对中断类型再进行判断(通过查C口状态)
  5. 因为方式2是方式1两种状态的组合,其工作原理是显而易见的

(2)组态逻辑

在这里插入图片描述

四、8255编程应用

  • 8255控制的关键是写入控制字
  • 8255的控制字主要有两个:方式选择控制字端口C置复位标志字

1. 8255方式选择控制字

(1)说明

  • 方式选择控制字是用来选择上述三种工作方式的控制字
  • 写入的地址是8255控制口的地址(A1A0=11)
    在这里插入图片描述

(2)示例

  • 编写对8255的初始化程序片段,要求:使A口为方式0输入,B口为方式0输出,C口作为8位的输出口使用。8255控制端口的地址为12BH。如果要读8255 A口数据,程序如何?
//对照方式选择控制字格式可得到控制字为:1001 0000B = 90H
MOV AL,90H	;方式选择控制字
MOV DX,12BH	;由于端口号>256,用DX间接寻址
OUT DX,	AL	;写入控制寄存器

//因为控制口12BH = 0001 0010 1011,最后连续的两个11必是A1A0,所以A口地址为128H
MOV DX,128H
IN AL, DX	;读A口数据



2. 端口C置复位控制字

(1)说明

  • 端口C置复位控制字可以单独对8255的C组端口的8个位进行操作
  • 注意: 端口C置复位控制字也要写入控制寄存器
    在这里插入图片描述

(2)示例

  • 使A口为方式1输入,且采用中断传送,B口采用方式0输出,其余C口的位作为输出。假设控制端口地址为63H。则程序段为:
MOV AL,10110000B   	;A口方式1输入,B口方式0输出,其余C口位输出
OUT	63H, AL			;方式选择控制字写入控制寄存器
MOV	AL,00001001B 	;置位/复位控制字,使PC4=1,即使INTE=1允许内部中断
OUT 63H, AL			;置位/复位控制字写入控制寄存器

五、8255作为打印机接口示例

  • 在早期PC机中,常用8255作为打印机数据通信接口,原理图如下:
    在这里插入图片描述
  • 经译码电路,得到的8255端口地址为3000H~300CH
  • 打印机时序要求如下
    在这里插入图片描述
  • 方式按以上原理图连接8255,由A口方式1输出特性可知:在A口输出数据时会自动产生STB脉冲,符合打印机时序要求。因此只要打印前检查打印机BUSY状态,当BUSY=0时,CPU送数据到8255A口输出,8255自动给打印机STB脚送一个负脉冲选通信号,数据即可进入8255缓冲。打印结束后8255回复一个ACK信号,这样就可以继续打印下一个数据

(1)查询法打印

  1. 按照上面给出的原理图进行打印
//核心代码如下
	MOV AL,10101000B		;方式选择字(C上半口输入PC4)
	MOV DX,PROTCtrl			;300CH控制端口
	OUT DX,AL				;方式选择控制字写入控制口
	MOV CX,Counter			;打印字符个数Counter装入计数器
	MOV BX,OFFSET Pstrings	;代打印内容是字符串Pstrings,一次传一个字符
LP1:  
	MOV DX,PORTC			;3008H向C端口
	IN AL,DX				;读取C口状态
	AND AL,00010000B   		;屏蔽无关位, 取BUSY对应的PC4
    JNZ LP1					;BUSY=1等待,直到不忙
LP2:  
	MOV  AL,[BX]		
	MOV DX,PORTA			;3000H
	OUT DX,AL				;送一个字符到8255的A口
	INC BX
	LOOP LP1
  1. 如果原理图如下连接,代码要进行修改
在这里插入图片描述
  • 由于B口方式0打印时不会自动产生选通信号给STB,所有这里手动控制PC7输出选通信号
	MOV  AL,81H			;8255方式选择控制字10000001B(B下输出C半口输入PC0)
	MOV DX,CTRLP		;控制端口
	OUT DX,AL			;方式选择控制字写入控制口
	MOV CX,Counter		;打印字符个数装入计数器
	MOV BX,OFFSET Pstrings
	MOV AL,000001111B	
	OUT DX,  AL			;PC7=1(C端口置复位命令字),/STB=1
LP1:	
	IN AL,DX			;读取C口状态(准备检查BUSY状态)
	AND AL,00000001B  	;屏蔽无关位, 取BUSY对应的PC0
	JNZ LP1				;等待接收新数据,BUSY=1等待,直到不忙
LP2:	
	MOV AL,[BX]			
	MOV DX,PORTB
	OUT DX,AL			;送一个字符到8255的B口
	MOV DX,CTRLP
	MOV AL,000001110B	;
	OUT DX,  AL			;PC7=0(C端口置复位命令字),/STB=0
	NOP 				;延时
	NOP
	MOV AL,000001111B	;
	OUT DX,  AL			;PC7=1(C端口置复位命令字),/STB=1
	MOV DX,PORTC
	INC BX
	LOOP LP1

(2)中断法打印

暂略

类似文章