文章目录
一、简介
- 并行接口是传输并行数据的接口,输入/输出都是并行格式的信号。8255是常用的8位可编程并行接口芯片
二、8255的内部结构及引脚信号
- 下图是8255的内部结构,它由数据总线缓冲器、读写控制逻辑部件、A/B两组控制电路、数据端口A/B//C组成
- 数据总线缓冲器、读写控制逻辑部件是所有接口芯片共有的部分,下面说明其他8255特有的部分
(1)8255内部主要部件
- 数据端口:
- A/B组控制电路:根据设定的8255方式字来控制8255的工作方式,其中的控制寄存器接受CPU输出的方式字(就是用户写入的),然后分别决定两个组的工作方式;也可根据控制字对C口进行单独的位置位复位操作。
(2)8255引脚信号
- 与外设接口信号引脚
(1)A口的8个I/O引脚:PA7~PA0
(2)B口的8个I/O引脚:PB7~PB0
(3)C口的8个I/O引脚:PC7~PC0 - 与系统总线接口信号引脚
(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)说明:
- 此方式适用于所有端口,C的上下半口可以分别配置为输入输出
- 此方式没有规定固定的用于应答的联络信号线
- 端口配置为方式0,则其作为输入时具有缓冲功能;作为输出时具有锁存功能
2. 方式1 —— 选通的输入输出
(1)说明:
- 此方式适用于端口A、B,需要C口某些为配合作为控制或通讯联络信号
- C口在配合A、B时有固定的搭配关系
- C口中当前不需要配合A、B工作的引脚,可以单独定义为I/O使用
(2)方式1下的输入组态:
- 注意下C组端口的匹配,这个是固定死的
- 信号含义说明
补充:in
指令(端口读指令)会使RD(上划线)
拉低 - 时序图
- 操作说明:
- 采用查询方式输入:CPU先查询8255的输入缓冲是否满(IBF),若IBF=1,则CPU从8255读入数据
- 采用中断方式输入:CPU先用C口的位控制功能使能INTE,当INTR信号触发CPU外部中断时从8255读入数据
(3)方式1下的输出组态:
- 注意下C组端口的匹配,这个是固定死的
- 信号含义说明
- 时序图
3. 方式2 —— 双向的数据传送方式
(1)说明:
- 此方式仅适用于A端口,C组端口配合其工作
- 此方式规定了固定的用于应答的联络信号线
- 它实际是方式1输入和输出的组合,区别在于C口某些选通控制或应答信号有些区别,此外输入和输出共用一共一个选通信号
- 因为输入输出中断共用一个信号,因此INTR为高时,需要对中断类型再进行判断(通过查C口状态)
- 因为方式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)查询法打印
- 按照上面给出的原理图进行打印
//核心代码如下
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
- 如果原理图如下连接,代码要进行修改
- 由于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)中断法打印
暂略