第 9章 可编程并行接口芯片 Intel 8255A
9.1 8255A的工作原理
9.1.1 功能
1,Intel 8255A是一个通用的可编程的并行接口芯片,内部有 2个 8
位 I/O口( A,B),两个 4位 I/O口( PC7~ 4,PC3~ 0),
2,通过编程可设置 3种工作方式,可适用于 CPU与 I/O设备之间的多种数据传送方式的要求。
3,C口可作为数据口,可作为信号线( CPU与 I/O设备之间的应答信号),可作为状态口,可按位置位 /复位。
4,价格低廉,使用方便,可以直接与 Intel系列的芯片连接使用,
在中小系统中有着广泛的应用。
9.1.2 8255A 的内部结构和管脚
1,引脚( 40DIP)
( 1) D0~ D7,8位,双向,三态数据线,用来与系统数据总线相连;
( 2)端口 A,B,C,PA0~PA7( A组数据信号,用来连接外设);
PB0~PB7( B组数据信号,用来连接外设); PC0~PC7( C组数据信号,用来连接外设或者作为控制信号)。
( 3) CS,RESET,WR,RD,A1,A0(内部 4个端口)。
( 4) VCC,GND。
2,内部结构
1,三个数据端口 A,B,C
这三个端口均可看作是 I/O口,但它们的结构和功能也稍有不同 。
A口,是一个独立的 8位 I/O口,它的内部有对数据输入 /输出的锁存功能 。 可编程实现 8位输入,输出或双向传送 。
B口,也是一个独立的 8位 I/O口,仅对输出数据的锁存功能 。 可编程实现 8位输入,输出,但不能实现双向传送 。
C口,可以看作是一个独立的 8位 I/O口;也可以看作是两个独立的 4
位 I/O口 ( 用于输入,输出 ),也是仅对输出数据进行锁存 。 可 按位置位 /复位 。 也可作为 A口 ( C口的高 5位 ),B口 ( C口的低 3位 )
选通或 双向传送的状态,控制信号 。
2,A组和 B组的控制电路这是两组根据 CPU命令控制 8255A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据 CPU送来的编程命令来控制
8255A的工作方式,也可以根据编程命令来对 C口的指定位进行置 /
复位的操作 。 A组控制电路用来控制 A口及 C口的高 4位; B组控制电路用来控制 B口及 C口的低 4位 。
3,数据总线缓冲器
8位的双向的三态缓冲器 。 作为 8255A与系统总线连接的界面,
输入 /输出的数据,CPU的编程命令以及外设通过 8255A传送的工作状态等信息,都是通过它来传输的 。
4,读 /写控制逻辑读 /写控制逻辑电路负责管理 8255A的数据传输过程 。 它接收片选信号及系统读信号,写信号,复位信号 RESET,还有来自系统地址总线的口地址选择信号 A0和 A1
8255A的操作功能表
CS RD WR A1 A0 操 作 数 据 传 送 方 式
0 0 1 0 0 读 A 口 A口数据 → 数据总线
0 0 1 0 1 读 B 口 B口数据 → 数据总线
0 0 1 1 0 读 C 口 C口数据 → 数据总线
0 1 0 0 0 写 A 口 数据总线数据 → A口
0 1 0 0 1 写 B 口 数据总线数据 → B口
0 1 0 1 0 写 C 口 数据总线数据 → C口
0 1 0 1 1 写控制口 数据总线数据 → 控制口
1 × × × × 无效 数据总线进入高阻
9.1.3 8255A的编程命令
8255A的编程包括两个内容:工作方式控制字设置,C口的按位置位 /复位功能。这两个命令均 写入控制端口( A1A0=11),用特征位
D7区分,D7=1,为 工作方式控制字,D7=0,为 C口的按位置位 /复位。
1,工作方式控制命令字控制字要写入 8255A的控制口,写入控制字之后,8255A才能按指定的工作方式工作 。 设置时,某一位为 1,则表示输入;某一位为 0,则表示输出 。
D0D1D2D3D4D5D6D7
PC3 ~ PC0
1:输入
0:输出
B口 1:输入
0:输出
B组工作方式 0:方式 0
1:方式 1
PC7 ~ PC4 1:输入
0:输出
A口 1:输入
0:输出
A组工作方式
00:方式 0
01:方式 1
1×,方式 2
D7 = 1
特征位
B组A组
A组,3种工作方式 ( 0,1,2)
B组,2种工作方式 ( 0,1)
C口:分成两部分,PC7 ~ PC4属于 A组,PC3 ~ PC0属于 B组 。
8255有 3个 8位并行口 ( 2个 8位口,2个 4位口 )
例 1 某系统要求使用 8255A的 A口方式 0输入,B口方式 0输出,C口高 4位方式 0输出,C口低 4位方式 0输入 。 设 8255的口地址为 60H----
63H。
则控制字为,10010001 即 91H
初始化程序为,MOV AL,91H
OUT 63H,AL
2,C口的置位 /复位功能只有 C口才有,它是通过向控制口写入按指定位置位 /复位的控制字来实现的。 C口的这个功能可用于设置方式 1的中断允许,可以设置外设的启 /停等。 可以产生矩形波或方波 。
功能,指定 PC口的某一位(某一个引脚)输出高电平或低电平。
D0D1D2D3D4D5D6D7
1:置位
0:复位
C口选择 000,PC0
001,PC1
010,PC2
011,PC3
100,PC4
101,PC5
110,PC6
111,PC7
任选(可 1可 0)
D7 = 0
(特征位)
例 2,A口方式 2,要求发两个中断允许,即 PC4和 PC6均需置位 。 B
口方式 1要求使 PC2置位来开放中断 。 初始化程序可补充完整如下 。
MOV AL,0C4H
MOV DX,303H
MOV DX,AL ;设置工作方式
MOV AL,09H
OUT DX,AL ; PC4置位,A口输入允许中断
MOV AL,0DH
OUT DX,AL ; PC6置位,A口输出允许中断
MOV AL,05H
OUT DX,AL ; PC2置位; B口输出允许中断注,C口的置位 /复位命令只能写入命令口,不能写入 C口。
9.1.4 8255A的工作方式
8255A有三种工作方式,用户可以通过编程来设置 。
方式 0―― 简单输入 /输出 ―― 查询方式; A,B,C三个端口均可 。
方式 1―― 选通输入 /输出 ―― 中断方式; A,B,两个端口均可 。
方式 2―― 双向输入 /输出 ―― 中断方式 。 只有 A端口才有 。
工作方式的选择可通过向控制端口写入控制字来实现 。
1,方式 0
一种简单的输入 /输出方式,没有规定固定的应答联络信号,
可用 A,B,C三个口的任一位充当查询信号,其余 I/O口仍可作为独立的端口和外设相连 。
应用场合:同步传送,查询传送 。
2,方式 1
方式 1 是一种选通 I/O方式,A口和 B口仍作为两个独立的 8位
I/O数据通道,可单独连接外设,通过编程分别设置它们为输入或输出 。 而 C口则要有 6位 (分成两个 3位 )分别作为 A口和 B口的应答联络线,其余 2位仍可工作在方式 0,可通过编程设置为输入或输出 。
(1) 方式 1的输入组态和应答信号的功能下 图给出了 8255A的 A口和 B口方式 1的输入组态。
C口的 PC3~ PC5用作 A口的应答联络线,PC0-PC2则作用 B口的应答联络线,余下的 PC6~PC7则可作为方式 0使用 。
应答联络线的功能如下:
STB:选通输入 。 用来将外设输入的数据打入 8255A的输入缓冲器 。
IBF:输入缓冲器满 。 作为 STB的回答信号,。
INTR:中断请求信号 。 INTR置位的条件是 STB=1且 IBF=1且
INTE=1。
INTE:中断允许 。 对 A口来讲,是由 PC4置位来实现,对 B口来讲,
则是由 PC2置位来实现 。 事先将其置位 。
输入过程,外设准备好数据放在 DB上 外设向 8255发 STB
将数据输入 8255 IBF=1,输入缓冲器满 ( 在 INTE=1,中断允许时 ) INTR=1,向 CPU提出中断申请 CPU在允许的情况下响应中断 转入中断服务,将输入缓冲器的数据取走,同时,清
INTR,IBF=0,输入缓冲器空,允许外设输入数据 。
A口 B口
STB PC4 PC2
IBF PC5 PC1
INTR PC3 PC0
INTE PC4置 1 PC2置 1
(2) 方式 1的输出组态和应答信号功能
C口的 PC3,PC6,PC7用作 A口的应答联络线,PC0-PC2则作用 B口的应答联络线,余下的 PC4~PC5则可作为方式 0使用 。
应答联络线的功能如下:
OBF,输出缓冲器满 。 当 CPU已将要输出的数据送入 8255A时有效,用来通知外设可以从 8255A取数 。
ACK:响应信号 。 作为响应信号,表示外设已将数据从 8255A的输出缓冲器中取走 。
INTR:中断请求信号 。 INTR置位的条件是 ACK为高且 OBF为高且
INTE为高 。
INTE:中断允许 。 对 A口来讲,由 PC6的置位来实现,对 B口仍是由 PC2的置位来实现 。
输出过程,CPU向 8255写数据 OBF=0,输出缓冲器满外设读完数据 ACK=0有效,表明外设已收到数据 (在
INTE=1时) INTR=1,向 CPU提出中断申请 CPU在允许时响应中断 CPU向 8255写下一个数据。
A口 B口
OBF PC6 PC2
ACK PC7 PC1
INTR PC3 PC0
INTE PC6置 1 PC2置 1
3,方式 2
方式 2为双向选通 I/O方式,只有 A口才有此方式 。 这时,C口有 5根线用作 A口的应答联络信号,其余 3根线可用作方式 0,也可用作 B口方式 1的应答联络线 。
方式 2就是方式 1的输入与输出方式的组合,各应答信号的功能也相同。而 C口余下的 PC0~PC2正好可以充当 B 口方式 1的应答线,若 B口不用或工作于方式 0,则这三条线也可工作于方式 0。
( 1) 方式 2的组态
STB PC4
IBF PC5
OBF PC6
ACK PC7
INTR PC3
(2) 方式 2的应用场合方式 2是一种双向工作方式,如果一个并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出动作不会同时进行 。
(3) 方式 2和其它方式的组合
① 方式 2和方式 0输入的组合,控制字,11XXX01T
② 方式 2和方式 0输出的组合,控制字,11XXX00T
③ 方式 2和方式 1输入的组合,控制字,11XXX11X
④ 方式 2和方式 1输出的组合,控制字,11XXX10X
其中 X表示与其取值无关,而 T表示视情况可取 1或 0。
9.2 8255A接口应用举例
9.2.1 基本输入 /输出
8个开关 K7 ~ K0,要求不断检测它们的通断状态,并随时在发光二极管 LED7 ~ LED0上显示出来。开关断开,相应的 LED点亮;开关合上,LED熄灭。我们选用 8086 CPU,
8255A和 74LS138译码器等芯片。
设计 8255A的 A口作输入口,8个开关 K7~ K0分别接
PA7 ~ PA0。 B口为输出口,PB7 ~ PB0分别接显示器 LED 7~
LED0。 8255A的和 RESET引脚分别与 CPU的相应输出相连。
8255A的数据线 D7 ~ D0与 8086的低 8位数据总线 D7 ~ D0相连,
8255A的 4个口地址都应为偶地址,A0必须总等于 0。
当 A7 A6 A5=111,A4 A3 A0=100时,选中 8255A。这样,
8255A 的 4个端的地址分别为 F0H,F2 H,F4H和 F6 H,对应于 8255A的 A口,B口,C口和控制字寄存器。
其硬件电路如下图所示。
程序设计:
方式选择控制字,A口工作于方式 0、输人,B口工作于方式 0、输出,C口未用。控制字中与 C口对应的位可以被置为 0,则控制字为 10010000。完成初始化后,即可将 A口的开关状态读人寄存器
AL。若开关合上,AL中的相应位为 0,断开则为 1。当把 AL中的内容从 B口输出时,相应于 0的位上的 LED熄灭,表示对应的开关是合上的;否则 LED点亮,指示开关断开。
具体程序如下:
MOV AL,10010000B ;控制字
OUT 0F6H,AL ;写 入 控制字
TEST- IT,IN AL,0F0H ;从 A口读 入 开关状态
OUT 0F2H,AL ; B口控制 LED,指示开关状态
JMP TEST_ IT ;循环检测如果开关合上,LED点亮;开关断开,LED熄灭;程序该作如何改动?
9.2.2 8255外扩打印机例 利用 8255A的 A口方式 0与微型打印机相连,将内存缓冲区
BUFF中的字符打印输出 。 试完成相应的软硬件设计 。
首先我们分析一下打印机的工作 。 微型打印机和主机之间的接口采用并行接口 。
打印机数据传输时序打印机 Centronics标准引脚信号引脚 名 称 方向 功 能
1 STROBE 入 数据选通,有效时接收数据
2-9 DATA1-DATA8 入 数据线
10 ACKNLG 出 响应信号,有效时准备接收数据
11 BUSY 出 忙信号,有效时不能接收数据
12 PE 出 纸用完
13 SLCT 出 选择联机,指出打印机不能工作
14 AUTOLF 入 自动换行
31 INIT 入 打印机复位
32 ERROR 出 出错
36 SLCTIN 入 有效时打印机不能工作工作流程:主机将要打印的数据送上数据线,然后发选通信号 。 打印机将数据读入,同时使 BUSY线为高,通知主机停止送数 。 这时,打印机内部对读入的数据进行处理 。 处理完以后使
ACK有效,同时使 BUSY失效,通知主机可以发下一个数据 。 硬件连线如下图:
说明:
由 PC0充当打印机的选通信号,通过对 PC0的置位 /复位来产生选通 。 同时,由 PC7来接收打印机发出的,BUSY”信号作为能否输出的查询 。
8255A的控制字为,10001000 即 88H
A口方式 0,输出; C口高位方式 0输入,低位方式 0输出
PC0置位,00000001 即 01H
PC0复位,00000000 即 00H
8255A的 4个口地址分别为,60H,61H,62H,63H。
程序如下:
DADA SEGMENT
BUFF DB 'This is a print program!','$'
DATA ENDS
CODE SEGMENT
ASSUME CS,CODE,DS,DATA
START,MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUFF
MOV AL,88H ; 8255A初始化,A口方式 0,输出
OUT 63H,AL ; C口高位方式 0输入,低位方式 0输出
MOV AL,01H;
OUT 63H,AL ;使 PC0置位,使选通无效
WAIT,IN AL,62H
TEST AL,80H ;检测 PC7是否为 1,即是否忙
JNZ WAIT ; 为忙则等待
MOV AL,[ SI ]
CMP AL,'$' ;是否结束符
JZ DONE ; 是则输出回车
OUT 60H,AL ;不是结束符,则从 A口输出
MOV AL,00H
OUT 63H,AL
MOV AL,01H
OUT 63H,AL ;产生选通信号
INC SI ;修改指针,指向下一个字符
JMP WAIT
DONE,MOV AL,0DH
OUT 60H,AL ;输出回车符
MOV AL,00H
OUT 63H,AL
MOV AL,01H
OUT 63H,AL ;产生选通
MOV AL,0AH
OUT 60H,AL ;输出换行符
MOV AL,00H
OUT 63H,AL
MOV AL,01H
OUT 63H,AL ;产生选通
MOV AH,4CH ; 返回 DOS
INT 21H
CODE ENDS
END START
例 将上例中 8255A的工作方式改为方式 1,采用中断方式将 BUFF
开始的缓冲区中的 100个字符从打印机输出 。 ( 假设打印机接口仍采用 Centronics标准 )
分析,仍用 PC0作为打印机的选通,打印机的回应接 PC6,数据口为 8255A的 A口,8255A的中断请求信号 ( PC3) 接至系统中断控制器 8259A的 IR3,其它硬件连线同上例,如下图所示 。
8255A的控制字为,1010XXX0
PC0置位,00000001 即 01H
PC0复位,00000000 即 00H
PC6置位,00001101 即 0DH,允许 8255A的 A口输出中断假设 8255A的 4个口地址分别为,60H,61H,62H,63H。
假设 8259A初始化时送 ICW2为 08H,则 8255A A口的中断类型码是 0BH,此中断类型码对应的中断向量应放到中断向量表从 2CH(0B× 4=2CH)开始的 4个单元中 。
1
D0D1D2D3D4D5D6D7A0
T0T1T2T3T4T5T6T7
中断类型码的高 5位
IR的编码,8259A自动填入
000~111
中断类型码的高 5位就是 ICW2的高 5位 (00001),而低三位是决定于引入中断的引腿序号 3(011)。
主程序:
MAIN,MOV AL,0A0H
OUT 63H,AL ;设置 8255A的控制字
MOV AL,01H ;使选通无效
OUT 63H,AL
XOR AX,AX
MOV DS,AX
MOV AX,OFFSET ROUTINTR;中断子程序入口
MOV WORD PTR [002CH],AX
MOV AX,SEG ROUTINTR
MOV WORD PTR [002EH],AX ;送中断向量
MOV AL,0DH ; PC6置位
OUT 63H,AL ;使 8255AA口输出允许中断
MOV DI,OFFSET BUFF ;设置地址指针
MOV CX,99 ;设置计数器初值
MOV AL,[DI]
OUT 60H,AL ;输出一个字符
INC DI
MOV AL,00H
OUT 63H,AL ;产生选通
INC AL
OUT 06H,AL ;撤消选通
STI ;开中断
NEXT,HLT ;等待中断 (每中断一次输出一个字符 )
LOOP NEXT ;修改计数器的值,指向下一个要输出的字符
HLT
中断服务子程序如下:
ROUTINTR,MOV AL,[DI]
OUT 60H,AL,从 A口输出一个字符
MOV AL,00H
OUT 63H,AL,产生选通
INC AL
MOV 63H,AL ;撤消选通
INC DI,修改地址指针
IRET,中断返回阅读教材 P339 键盘接口举例。
阅读教材 P342 8255A在 PC/XT机中的应用。
作业:
P354 3 6
9 ( 1)(不要求每隔 0.5秒检测一次)