当前位置:首页 >> 信息与通信 >>

数字量输入输出-并行通信


可编程并行输入输出接口

?教学重点
? 8255A的工作方式和编程 ? 8255A的应用

并行数据传输方式
? 以计算机的字长,通常是8位、16位或32位为传输 单位,一次传送一个字长的数据 ? 适合于外部设备与微机之间进行近距离、大量和 快速的信息交换
? 例如:微机与并行接口打印机、磁盘驱动器

? 微机系统中最基本的信息交换方法
? 例如:系统板上各部件之间,接口电路板上各部件 之间

8255A的基本性能

? Intel 8086/8088 系列的可编程外设接口电路 (Programmable Peripheral Interface)简称 PPI, 型号为8255(改进型为8255A及8255A-5),具有 24条输入/输出引脚、可编程的通用并行输入/输出 接口电路。它是一片使用单一+5V电源的40脚双 列直插式大规模集成电路。8255A的通用性强, 使用灵活,通过它CPU可直接与外设相连接。

8255引脚图
34 33 32 31 30 29 28 27 5 36 9 8 35 6 D0 D1 D2 D3 D4 D5 D6 D7 RD WR A0 A1 RESET CS

8255

PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7

4 3 2 1 40 39 38 37 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10

8255A的内部结构和引脚
A组 控制

A组 端口A

PA0~PA7

D0~D7

数据 总线 缓冲器

内部数据线

A组 端口C 上部 B组 端口B

PC4~PC7

RD WR A0 A1 CS RESET

B组 控制 读写 控制 逻辑

PB0~PB7

内部控制线

B组 端口C 下部

PC0~PC3

8255A内部结构由以下四部分组成:

?数据端口A、B、C; ?A组控制和B组控制; ?读/写控制逻辑电路; ?数据总线缓冲器。

三个相互独立的输入/输出通道

?8255A具有三个相互独立的输入/输出通道: 通道A、通道B、通道C
?A,B,C三通道可以联合使用,构成单线、双 线或三线联络信号的并行接口。此时C口完全 服务于A、B口。 ?A口有三种工作方式:方式0、方式1、方式2。 ?B口有两种工作方式:方式0、方式1。

8255A的工作方式 ?方式0:基本输入输出方式
?适用于无条件传送和查询方式的接口电路

?方式1:选通输入输出方式
?适用于查询和中断方式的接口电路

?方式2:双向选通传送方式
?适用于与双向传送数据的外设 ?适用于查询和中断方式的接口电路

8255A的三个端口
端口A:包括一个 8 位的数据输出锁存/缓冲器和一个 8 位的数据输入锁存器,可作为数据输入或输出端口, 并 工作于三种方式中的任何一种。 端口B: 包括一个 8 位的数据输出锁存/缓冲器和一个 8 位的数据输入缓冲器,可作为数据输入或输出端口, 但 不能工作于方式2。 端口C: 包括一个 8 位的数据输出锁存/缓冲器和一个 8 位的数据输入缓冲器, 可在方式字控制下分为两个4位 的端口(C端口上和下),每个4位端口都有4位的锁存 器, 用来配合端口A与端口B锁存输出控制信号和输入 状态信号,不能工作于方式1或2。

A组和B组控制的作用

A组和B组控制的作用如下:
? A组控制逻辑控制端口A及端口C的上半部; ? B组控制逻辑控制端口B及端口C的下半部。

C端口置1置0控制字
端口C的数位常常作为控制位来使用,所以,在 设计8255A芯片时,应使端口C中的各位可以用 置1置0控制字来单独设置。 说明: C端口置1置0控制字尽管是对端口C进行操作, 但此控制字必须写入控制口,而不是写入C端口.

8255内部寄存器选择

/CS
0 0 0 0

A1 A0
0 0 1 1 0 1 0 1

/RD
A口->数据总线 B口->数据总线 C口->数据总线

/WR
数据总线->A口 数据总线->B口 数据总线->C口 数据总线->控制寄存器

写入方式控制字:控制字格式
方式选择控制字
1 D6 D5 D4 D3 D2 D1 D0

A组
方式选择
00=方式0 01=方式1 10=方式2

B组
端口C(下半部)
1=输入 0=输出

端口A 端口C(上半部)
1=输入 0=输出 1=输入 0=输出

端口B
1=输入 0=输出

方式选择
0=方式0 1=方式1

写入方式控制字:示例 ?要求:
?A端口:方式1输入 ?C端口上半部:输出,C口下半部:输入 ?B端口:方式0输出

?方式控制字:10110001B或B1H ?初始化的程序段:
mov dx,2A3h mov al,0b1h out dx,al ;假设控制端口为2A3H ;方式控制字 ;送到控制端口

端口C的位控制字
?位控制字写入控制端口 ?特别便于置位复位内部中断允许触发器INTE

端口C按位置/复位控制字
0 D6 D5 D4 D3 D2 D1 D0
C端口位选择
D7 D6 D5 D4 D3 D2 D1 D0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0

1=置位 0=复位

关于端口C(1)

? C端口被分成两个4位端口,两个端口只能以方式 0工作,可分别选择输入或输出 ? 在控制上,C端口上半部和A端口编为A组,C端 口下半部和B端口编为B组 ? 当A和B端口工作在方式1或方式2时,C端口的部 分引脚将被征用,其余引脚仍可设定工作在方式0

关于端口C(2) ?对端口C的数据输出有两种办法
?通过端口C的I/O地址:向C端口直接写入字节 数据。这一数据被写进C端口的输出锁存器,并 从输出引脚输出,但对设置为输入的引脚无效 ?通过控制端口:向C端口写入位控字,使C端口 的某个引脚输出1或0,或置位复位内部的中断 允许触发器

关于端口C(3)

?读取的C端口数据有两种情况
?未被A和B端口征用的引脚:将从定义为输入的 端口读到引脚输入信息;将从定义为输出的端 口读到输出锁存器中的信息 ?被A和B端口征用作为联络线的引脚:将读到反 映8255A状态的状态字

端口C的状态字
A组 B组

D7

D6

D5

D4

D3

D2

D1

D0

方式1输入
I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB

方式1输出
OBFA INTEA I/O I/O INTRA INTEB OBFB INTRB

方式2双向
OBFA INTE1 IBFA INTE2 INTRA × × ×

方式0

? 方式0是一种基本输入或输出方式,它适用于 无需握手信号的简单输入输出应用场合, 端 口A、B、C都可作为输入或输出数据使用,输 出有锁存而输入无锁存。

方式0输入时序

RD 输入端口 data

CS,A1,A0
D0~D7 data

方式0输出时序

WR 输出端口 CS,A1,A0 D0~D7 data data

方式1

方式1也称选通的输入/输出方式。在这种方 式下,无论是输入还是输出都通过应答关系 实现, 这时端口A或B用作数据口,端口C的 一部分引脚用作握手信号线与中断请求线。

方式1

若端口A工作于方式1,则B可工作于方式0; 若端口B工作于方式1,则A可工作于方式0或余 下的13位可工作于方式0; 若端口A和B同时工作于方式1,端口C余下的 两位还可用于传送数据或控制信号。

方式1输入引脚:A端口
数据选通信号 表示外设已经准备好数据 STBA

PA7~PA0
INTEA

PC4 PC5

IBFA
输入缓冲器满信号 表示A口已经接收数据 INTRA

PC3

中断允许触发器

中断请求信号 请求CPU接收数据

方式1输入引脚:B端口
数据选通信号 表示外设已经准备好数据 STBB

PB7~PB0
INTEB

PC2 PC1

IBFB
输入缓冲器满信号 表示A口已经接收数据 INTRB

PC0

中断允许触发器

中断请求信号 请求CPU接收数据

方式1输入联络信号
? STB*——选通信号,低电平有效
? 由外设提供的输入信号,当其有效时,将输入设备 送来的数据锁存至8255A的输入锁存器

? IBF——输入缓冲器满信号,高电平有效
? 8255A输出的联络信号。当其有效时,表示数据已 锁存在输入锁存器

? INTR——中断请求信号,高电平有效
? 8255A输出的信号,可用于向CPU提出中断请求, 要求CPU读取外设数据

方式1输入时序

STB IBF INTR

RD 输入端口
D0~D7 data data

方式1的输入过程
1、当输入设备已准备好一个新数据时,首先检测IBF线的状 态,若为低(表示输入锁存器"空"),则输入设备将数据放入 PA7--PA0。 2、然后发出选通信号STB,STB将PA7--PA0上的数据置入数 据锁存器,这时8255A使IBF有效,指示输入锁存器已"满"。 3、STB变为无效后,8255A使INTR由低变高,通过8259A向 CPU发出中断请求,CPU响应请求并进入相应的中断服务程 序。 4、在中断服务程序中,CPU读端口A,RD的下降沿使INTR无 效。 5、RD的上升沿使IBF变无效,指示输入锁存器的数据已传送 给CPU,处于"空"状态,准备接收新的数据。

方式1输出引脚:A端口
外设响应信号 表示外设已经接收到数据 ACKA

PA7~PA0
INTEA

PC6 PC7

OBFA
INTRA

输出缓冲器满信号 表示CPU已经输出了数据

PC3

中断允许触发器

中断请求信号 请求CPU再次输出数据

方式1输出引脚:B端口
外设响应信号 表示外设已经接收到数据 ACKB OBFB INTRB 输出缓冲器满信号 表示CPU已经输出了数据

PB7~PB0
INTEB

PC2 PC1

PC0

中断允许触发器

中断请求信号 请求CPU再次输出数据

方式1输出联络信号
? OBF*——输出缓冲器满信号,低有效
? 8255A输出给外设的一个控制信号,当其有效时, 表示CPU已把数据输出给指定的端口,外设可以 取走

? ACK*——响应信号,低有效
? 外设的响应信号,指示8255A的端口数据已由外设 接受

? INTR——中断请求信号,高有效
? 当输出设备已接受数据后,8255A输出此信号向 CPU提出中断请求,要求CPU继续提供数据

方式1输出时序

WR OBF INTR ACK 输出端口 D0~D7 data data

方式1的输出过程
1、以端口A为例,当输出设备接收了前一次数据 后,8255A通 过8259A向CPU请求中断。 2、在中断服务程序中,CPU将数据写入指定的端口,WR变为 有效,于是数据写入输出锁存器并出现在PA7--PA0。 3、写信号WR的上升沿使OBF变为有效,指示输出设备PA7-PA0上,已有新的数据,同时还使INTR变为 无效。 4、在PA7--PA0上输出数据。 5、输出设备接收到数据后,向8255A发回ACK信号,ACK的上 升沿通常表示输出设备已准备好再接收新的数据。 6、8255A在ACK出现上升沿之前使OBF变为无效,若INTE=1, 则还使INTR变为有效,再次请求中断。

关于方式1中断控制
? 8255A的中断由中断允许触发器INTE控制
? 置位允许中断,复位禁止中断

? 对INTE的操作通过写入端口C的对应位实现, INTE触发器对应端口C的位是作应答联络信号的 输入信号的哪一位,只要对那一位置位/复位就可 以控制INTE触发器 ? 选通输入方式下
? 端口A的INTEA对应PC4 ? 端口B的INTEB对应PC2

方式2:双向方式
? 方式2将方式1的选通输入输出功能组合成一个双 向数据端口,可以发送数据和接收数据 ? 只有端口A可以工作于方式2,需要利用端口C的5 个信号线,其作用与方式1相同 ? 方式2的数据输入过程与方式1的输入方式一样 ? 方式2的数据输出过程与方式1的输出方式有一点 不同:数据输出时8255A不是在OBF*有效时向外 设输出数据,而是在外设提供响应信号ACK*时 才送出数据

方式2双向引脚
PA7~PA0
INTE1

PC6 PC7

ACKA OBFA STBA IBFA INTRA

用PC6设置INTE1(输出)
用PC4设置INTE2(输入) 输入和输出中断通过 或门输出INTRA信号

INTE2 PC4

PC5

PC3

方式2双向时序
WR OBF INTR ACK STB IBF RD PA0~PA7 D0~D7 data-in data-out

data-out

data-in

应用举例1:用8255A方式0与打印机接口

8255A
PA0~PA7

打印机 DATA0~7

PC7
PC2

STROBE
BUSY

打印机接口的信号

?主机把数据送给引脚DATA0~DATA7 ?同时送出数据选通信号STROBE* ?打印机在BUSY信号线上发出“忙”信号 ?打印机处理好输入的数据时,撤消“忙”信 号

打印机接口时序

DATA0~7

STROBE BUSY

ACK

8255A的初始化

mov dx,0fffeh ;控制端口地址 mov al,10000001B ;方式控制字:91H out dx,al ;A端口方式0输出,C端口上输出、下输入 mov al,00001111B;端口C的复位置位控制字,使PC7=1 out dx,al

打印子程序:查询

printc

prn:

proc push ax push dx mov dx,0fffch ;读取端口C in al,dx ;查询打印机状态 and al,04h ;PC2=BUSY=0? jnz prn ;PC2=1,打印机忙,则循环等待

打印子程序:输出

mov dx,0fff8h mov al,ah out dx,al

;PC2=0,打印机不忙,则输出数据
;将打印数据从端口A输出

打印子程序:打印

mov dx,0fffeh mov al,00001110B out dx,al nop nop mov al,00001111B out dx,al

;从PC7送出控制低脉冲

;置STROBE*=0

;产生一定宽度的低电平

;置=1

打印子程序:返回

printc

pop dx pop ax ret endp

用8255A方式1与打印机接口
8255A PA0~PA7 打印机 DATA0~7 ACK 4

PC6

ACK
STROBE

PC7 OBF 1 LS123 PC3 单稳 14 电路 INTR 15 1000pf 2K

2
3

+5V

8255A方式1与打印机接口时序配合

PA0~PA7 (DATA0~7) OBF STROBE

ACK

8255A的初始化 mov dx,0fffeh ;控制口地址=0fffeh mov al,0a0h ; 控制字 1010 0000 out dx,al mov al,0ch ;0000 1100 使INTEA(PC6)为0,禁止中断 out dx,al …… mov cx,counter ;打印字节数送CX mov bx,offset buffer ;取字符串首地址 call prints ;调用打印子程序

打印子程序:输出
prints proc push ax push dx mov al,[bx] mov dx,0fff8h out dx,al

;保护寄存器

print1:

;取一个数据

;从端口A输出

打印子程序:查询

print2:

mov dx,0fffch in al,dx test al,80h ;检测(PC7)为1否? jz print2 ;为0,说明打印机没有响应,继续检测

打印子程序:返回

prints

inc bx ;为1,说明打印机已接受数据 loop print1 ;准备取下一个数据输出 pop dx ;打印结束,恢复寄存器 pop ax ret ;返回 endp

8255内部寄存器选择

/CS
0 0 0 0

A1 A0
0 0 1 1 0 1 0 1

/RD
A口->数据总线 B口->数据总线 C口->数据总线

/WR
数据总线->A口 数据总线->B口 数据总线->C口 数据总线->控制寄存器

写入方式控制字:控制字格式
方式选择控制字
1 D6 D5 D4 D3 D2 D1 D0

A组
方式选择
00=方式0 01=方式1 10=方式2

B组
端口C(下半部)
1=输入 0=输出

端口A 端口C(上半部)
1=输入 0=输出 1=输入 0=输出

端口B
1=输入 0=输出

方式选择
0=方式0 1=方式1

端口C的位控制字
?位控制字写入控制端口 ?特别便于置位复位内部中断允许触发器INTE

端口C按位置/复位控制字
0 D6 D5 D4 D3 D2 D1 D0
C端口位选择
D7 D6 D5 D4 D3 D2 D1 D0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0

1=置位 0=复位

端口C的状态字
A组 B组

D7

D6

D5

D4

D3

D2

D1

D0

方式1输入
I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB

方式1输出
OBFA INTEA I/O I/O INTRA INTEB OBFB INTRB

方式2双向
OBFA INTE1 IBFA INTE2 INTRA × × ×

补充资料:51单片机P1端口
读锁存器 输入缓冲器 Vcc

R
内部总线


D P1.X Q

锁存器
CL Q





P1.x 引脚

写锁存器

读引脚

输入缓冲器

?作业: 题5-1 题5-2 题5-17


相关文章:
更多相关标签: