下载PPT-8255文档

Download Report

Transcript 下载PPT-8255文档

第8章
可编程并行接口8255A
1并行接口的概述
2 可编程并行接口8255A
3 8255A的0方式及其应用
4 8255A的1方式及其应用
5 8255A的2方式及其应用
1并行接口的概述
一、串行与并行通信
CPU与外设之间的信息传送都是通过接口电路来进行的。
计算机与外部设备、计算机与计算机之间交换信息称之为计
算机通信,计算机通信可分为两大类:
并行通信:8位或16位或32位数据同时传输, 速度快,信息
率高,成本高
串行通信:一位一位数据传送(在一条线上顺序传送),成本低
实现并行通信的接口就是并行接口。
二、并行接口的特点
 并行接口最基本的特点是在多根数据线上以数据字节(字)
为单位与I/O设备或被控对象传送信息。
 如: 打印机接口,A/D、D/A转换器接口,IEEE-488接口,开
关量接口,控制设备接口等。
 在并行接口中,除了少数场合之外,一般都要求在接口与外
设之间设置并行数据线的同时,至少还要设置两根握手(联
线)信号线,以便进行互锁异步握手方式(即查询方式)的
通信。
 在并行接口中,8位或16位是一起行动的,因此,当采用并
行接口与外设交换数据时,即使是只用到其中的一位,也是
一次输入/输出8位或16位。
 并行传送信息,不要求固定的格式,这与串行传送的数据格
式的要求不同。
8255A——8255A
概述
Intel8255A是一种通用的可编程序并行I/O接口芯片,
又称“可编程外设接口芯片”,是为Intel8080/8085系列微处
理设计的,也可用于其它系列的微机系统。可由程序来改变
其功能,通用性强、使用灵活。通过8255A,CPU可直接同外
设相连接,是应用最广的并行I/O接口芯片。
含3个独立的8位并行输入/输出端口,各端口均具有数
据的控制和锁存能力。可通过编程设置各端口的工作方式和
数据传送方向(入/出/双向)。
并行接口连接外设示意图
数据输入准备好
数据总线
控制寄存器
读出信号
CPU
写入信号
输入缓冲寄存器
复位
输出缓冲寄存器
准备好
数据输入回答
输
入
设
备
数据输入
状态寄存器
中断请求
数据输出
地址 地址
译码
片选
A0
A1
数据输出准备好
数据输出回答
输
出
设
备
 不可编程并行接口和可编程并行接口
不可编程并行接口的工作方式和功能:
是由硬件接线决定,不能用软件来控制。
可编程并行接口的工作方式和功能:
可用软件编程的方法改变,
•
使接口具有更大的灵活性和通用性。

在并行接口芯片中,
不同的产品系列研制出与之相匹配的接口芯
片。
例
在80X86系列中使用8255A芯片
在Z80系列中使用Z80-PIO芯片
在6800系列中使用MC6820PIA芯片
一般情况下不交叉使用,因为:
只有本系列的芯片才能更好地保证时序上的配合,
和各种功能的发挥,使CPU可靠与外设交换信息。
8255A——8255A
8255A的内部结构
A组控制
D0~D7
RD
WR
A1
A0
CS
RESET
数据总线
缓冲器
A组
A口
(8位)
PA0~PA7
A组
C口高位
(4位)
PC4~PC7
读/写
控制逻辑
B组控制
B组
C口低位
(4位)
PC0~PC3
B组
B口
(8位)
PB0~PB7
8255A——8255A
1. 数据总线缓冲器:三态8位双向缓冲器,与系统数据总线连
接的缓冲部件;传送数据、控制字、状态字的通道。
2. 3个8位数据端口(PA、PB、PC):通常PA口与PB口用作输入输出
的数据端口,PC口用作数据传输或提供联络线的端口。在方
式字的控制下,PC口可以分成两个4位的端口,其中PC7~PC4
同端口A配合使用, PC3~PC0同端口B配合使用。
3. A组、B组控制电路:这两组控制电路根据CPU发出的方式选择控制字
来控制8255A的工作方式,每个控制组都接收来自读写控制逻辑的
“命令”,接收来自内部数据总线的“控制字”,并向与其相连的端
口发出适当的控制信号。A组控制电路控制PA口和PC口高4位,B组控
制电路控制PB口和PC口低4位。
4. 读/写控制逻辑:用来管理数据、控制字和状态字的传送,接收系统
总线发来的有关信号,并向A、B两组控制部件发送命令。
DIP封装,共40个引脚。
1.
连接系统总线的主要引脚
D0~D7:数据线,双向,连CPU数据总线;
RESET:复位输入,接系统总线的RESET;
CS*:片选控制输入,接译码器;
RD*:读命令输入,接CPU的RD*或IOR*;
WR*:写命令输入,接CPU的WR*或IOW*;
A0,A1:片内端口地址输入,可选4个片内
端口。接AB的任2位。
PA 3
PA 2
PA 1
PA 0
RD
CS
GND
A1
A0
PC 7
PC 6
PC 5
PC 4
PC 0
PC 1
PC 2
PC 3
PB 0
PB 1
PB 2
1
40
5
35
10
30
15
25
21
PA 4
PA 5
PA 6
PA 7
WR
RESET
D0
D1
D2
D3
D4
D5
D6
D7
VCC
PB 7
PB 6
PB 5
PB 4
PB 3
1.面向CPU一侧的引脚信号
⑴D7~D0,8位,双向,三态数据线
⑵RESET,复位信号
⑶CS*,片选信号
⑷RD*,读信号
⑸WR*,写信号
⑹A1 、A0,端口选择信号
8255A的读/写操作控制
A1 A0 RD*
WR*
CS*
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
0
0
1
1
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
输入操作(CPU读)
数据总线← 端口A
数据总线← 端口B
数据总线← 端口C
输出操作(CPU写)
数据总线→端口A
数据总线→端口B
数据总线→端口C
数据总线→控制端口
2.面向外设一侧的引脚信号

端口A:PA0~PA7


端口B:PB0~PB7


A组,支持工作方式0、1、2
B组,支持工作方式0、1
端口C:PC0~PC7



仅支持工作方式0
A组控制高4位PC4~PC7
B组控制低4位PC0~PC3
功能:

端口A:PA0~PA7


端口B:PB0~PB7


常作数据端口,功能最强大
常作数据端口
端口C:PC0~PC7



可作数据、状态和控制端口
分两个4位,每位可独立操作
控制最灵活,最难掌握
8255A与系统的连接示意图
8255
DB
D0~D7
系
统
总
D0~D7
IOW
WR
IOR
RD
A1
A1
A0
A0
A口
外设1
C口
外设2
B口
外设3
线
A15~A2
译码器
CS
8255A的工作方式
• 方式0——基本输入/输出方式(A、B、C口)
• 方式1——选通工作方式(A、B口)
• 方式2——双向选通传送方式(仅A口)
某端口工作于哪一种方式,可通过软件编程来指定。即向
8255写入方式控制字来决定其工作方式。
端口A输入输出均能锁存
B端口输出时能锁存,输入时不能锁存
C端口没有输入锁存器,输出可以锁存
三个端口输出都可锁存/缓冲
8255A的工作方式——方式0(基本输入/输出方式)
特点:
8255A相当于三个独立的8位数据口。
各端口既可设置为输入口,也可设置为输出口,但不能
同时实现输入及输出。
C端口即可以是一个8位的简单接口,也可以分为两个独
立的4位端口。
设置为输出口时有锁存能力,设置为输入口时无锁存能
力。
适用于:
无条件输入输出方式。
查询输入输出方式:把A、B口作为8位数据的输入或输出
口,C口的高/低4位分别定义为A、B口的控制位和状态位。
8255A的工作方式——方式0(基本输入/输出方式)
IN AL,PORT
DB
AB
8
n
输入缓冲器
数据
外设
译码器
M / IO
RD
①外设将数据送到8255输入缓冲器中;
②CPU给出有效的8255地址;
③CPU发读命令,将8255A输入缓冲器中数据读入CPU
的AL寄存器中。
8255A的工作方式——方式0(基本输入/输出方式)
方式0输入时序:
8255A的工作方式——方式0(基本输出方式)
OUT PORT,AL
DB
AB
8
n
输出锁存器
数据
外设
译码器
M / IO
WR
① CPU给出有效的8255地址;
② CPU发写命令,将CPU的AL寄存器中数据写入
8255A输出锁存器中。
8255A的工作方式——方式0(基本输入/输出方式)
方式0输出时序:
tWW
WR
tDW
D7¡«D0
Êý¾ÝÓÐЧ
tAW
CS
A1¡¢A2
tWD
tWA
有效
Êý¾ÝÓÐЧ
Êä³öÊý¾Ý
tWB
8255A的工作方式——方式1(选通工作方式)
利用一组选通控制信号控制A端口和B端口的数据输入输出。
特点:
1. A、B口作输入或输出口,C口分为两部分,其部分位(6位)固定用
作A口、B口的选通控制信号。
2. C口的剩余位仍可作数据位使用。
3. A口、B口在作为输入和输出时的选通信号不同。
方式1的应用:
主要用于中断控制方式下的输入输出。
说明:C口除部分位用作选通信号外,其余位(2位)可工作在方式0下,
作为输入或输出线,用程序指定其数据传送方向。
(1)端口A方式1作输入:
D7~D0
数据选通信号
表示外设已经准备好数据
PA7~PA0
INTEA
PC4
PC4
PC5
STBA
IBFA
PC3
INTRA
与门
RD
中断允许触发器
输入缓冲器满信号
表示A口已经接收数据
中断请求信号
请求CPU接收数据
若允许PA口输入时,产生中断请求,则必须设置INTEA=1,
即置PC4=1;若禁止它产生中断请求,则置INTEA=0,即置
PC4=0,其程序段为:
MOV
DX,203H
MOV
AL,00001001B
OUT
MOV
OUT
;8255A命令口
;置PC4=1,允许中断请求
DX,AL
AL,00001000B
DX,AL
;置PC4=0,禁止中断请求
端口B方式1作输入:
数据选通信号
表示外设已经准备好数据
PB7~PB0
PC2
INTEB
PC2
STBB
PC1
IBFB
输入缓冲器满信号
表示B口已经接收数据
PC0
中断允许触发器
INTRB
中断请求信号
请求CPU接收数据
方式1输入联络信号定义

STB*——选通信号,低电平有效
由外设提供的输入信号,当其有效时,将输入设备送来的数据
锁存至8255A的输入锁存器

IBF——输入缓冲器满信号,高电平有效
8255A输出的联络信号。当其有效时,表示数据已锁存在输入
锁存器

INTR——中断请求信号,高电平有效
8255A输出的信号,可用于向CPU提出中断请求,要求CPU读
取外设数据

INTE ——中断允许信号,高电平有效
用于控制中断允许或中断屏蔽
8255A方式1作输入时的各联络信号对应关系
联络信号
端口A
端口B
STB*
对应PC4
对应PC2
IBF
对应PC5
对应PC1
INTR
对应PC3
对应PC0
INTE
PC4置位
PC2置位
8255A工作在方式1下的输入时序
(3)端口A方式1作输出:
D7~D0
输出缓冲器满信号
表示CPU已经输出了数据
PA7~PA0
INTEA
PC6
PC7
OBFA
PC6
ACKA
PC3
INTRA
外设响应信号
表示外设已经接收到数据
与门
WR
中断允许触发器
中断请求信号
请求CPU再次输出数据
端口B方式1作输出:
外设响应信号
表示外设已经接收到数据
PB7~PB0
INTEB
PC2
ACKB
PC1
OBFB
PC0
INTRB
中断允许触发器
输出缓冲器满信号
表示CPU已经输出了数据
中断请求信号
请求CPU再次输出数据
方式1输出联络信号

OBF*——输出缓冲器满信号,低有效


ACK*——响应信号,低有效


8255A输出给外设的一个控制信号,当其有效时,
表示CPU已把数据输出给指定的端口,外设可以取走
外设的响应信号,指示8255A的端口数据已由外设
接受
INTR——中断请求信号,高有效

当 输 出 设 备 已 接 受 数 据 后 , 8255A 输 出 此 信 号 向
CPU提出中断请求,要求CPU继续提供数据
8255A方式1作输出时的各联络信号对应关系
联络信号
端口A
端口B
OBF*
对应PC7
对应PC1
ACK
对应PC6
对应PC2
INTR
对应PC3
对应PC0
INTE
PC6置位
PC2置位
8255A工作在方式1下的输出时序
A端口、B端口方式 1 比较
A端口输入用C端口位PC3 、PC4 、 PC5
A端口输出用C端口位PC3 、PC6 、 PC7
B端口输入用C端口位PC0 、PC1 、 PC2
B端口输出用C端口位PC0 、PC1 、 PC2
A端口输入、输出用不同的C端口的位
B端口输入、输出用相同的C端口的位
B端口只有方式 1 选通输入/输出
A端口还有方式 2 双向数据传送
C端口未被使用的位
A端口方式 0、B端口方式 0
C端口所有位未被使用,PC0 ~ PC7 可作I/O用
A端口方式 0、B端口方式 1
PC0 ~ PC2被用,PC3 ~ PC7可作I/O用
A端口方式 1输入、B端口方式 0
PC3、PC4、PC5被用,PC0 ~ PC2、PC6、PC7 可作I/O用
A端口方式 1输出、B端口方式 0
PC3、PC6、PC7 被用,PC0 ~ PC2、PC4、PC5 可作I/O用
A端口方式 1输入、B端口方式 1
PC6、PC7 可作I/O用
A端口方式 1输出、B端口方式 1
PC4、PC5 可作I/O用
A端口方式2、B端口方式1;C口被用完,都不可作I/O用
3. 方式2(双向选通方式)




方式2将方式1的选通输入输出功能组合成一个双向数据
端口,可以发送数据和接收数据
只有端口A可以工作于方式2,需要利用端口C的5个信号
线,其作用与方式1相同
方式2的数据输入过程与方式1的输入方式一样
方式2的数据输出过程与方式1的输出方式有一点不同:
数据输出时8255A不是在OBF*有效时向外设输出数据,
而是在外设提供响应信号ACK*时才送出数据
(1)方式2的信号定义
PA7~PA0
INTE1
PC6
ACKA
用PC6设置INTE1(输出)
PC7
OBFA
用PC4设置INTE2(输入)
INTE2 PC4
STBA
PC5
IBFA
PC3
INTRA
输入和输出中断通过
或门输出INTRA信号
8255A工作在方式2下的工作时序
当数据端口作为输入工作时,在STB有效时,由外设把输入数据送入端口,
并发出IBF有效信号。当CPU执行IN指令对该数据口进行读入操作后,由RD
MO DE 2 B1- DIR ECT ION AL BU S
的上升沿使IBF复位,为下一次输入数据作好准备。如果该数据端口的中断
允许INTE被置位,则在STB信号回复到高电平时,8255A通过INTR向CPU发中
WR
断请求。若CPU响应该中断请求,读取该数据端口的输入数据,则RD由下降
OB F
沿使INTR复位,为下一次数据输入请求中断作好准备。
OU T
IN TR
AC K
ST B
当数据端口作为输出口时,在CPU把数据写入端口后,由
IB F
WR的上升沿使OBF有效并使INTR复位。OBF由8255A输出到
PA 7-P A0
IN
OU T
外设,并通知外设可以取走端口的输出数据。当外设取走
RD
一个数据时,应向8255A发回应答信号ACK。
DA TA FRO M
DA TA FRO M
ACK的有效低电平可以使OBF恢复高电平,为下一
CP U
PE RIP HER AL TO 825 5 82 55 TO PER IPH ERA L
DA TA BUS
次输出作好准备。
CP U
82 55
CP U
82 55
主机
INTR
8259A
INT
主机 8255
IRQ0
IRQ1
IRQ2
PC3(INTR)
IRQ7
系统总线
方式2应用接口电路图
返回
8255A的初始化
可以利用软件编程确定8255的3个端口工作于何种方
式下。
8255A的各种工作方式由CPU对8255A写入控制命令字
来设定,这个过程称为“初始化”。
8255A有2种控制命令字:
方式选择控制字——确定3个端口的工作方式;
C口置位/复位控制字——确定C口某一位的初始状态,
或用于设置INTE位(方式1,2)。
8255A的初始化——方式选择控制字
D7 D6 D5 D4 D3 D2 D1 D0
B组
C口低位选择,1入0出
B口I/O选择,1入0出
B口方式选择,0=方式0
1=方式1
C口高位选择,1入0出
A口I/O选择,1入0出
A口方式选择00=方式0
01=方式1
1X=方式2
D7=1,方式控制字标志
A组
8255A的初始化——C口置位/复位控制字
D7 D6 D5 D4 D3 D2 D1 D0
无效
D7=0为置
位/复位控
制字标志
D3 D2 D1 位选择
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
置位/复位
选择
1=置位,
0=复位
8255A的初始化——方式选择控制字
在方式 1、2下,C口作为A口、B口联络信号的引
脚,其动作关系在芯片设计和制造时已固定,不由
用户自己安排,也不能编程改变。即C口作为联络信
号的引脚:不受方式控制字的控制。该出则出,该
入则入。
8255A的初始化
MOV
MOV
OUT
XOR
MOV
OUT
DX,387H
AL,82H
DX,AL
AL,AL
DX,384H
DX,AL
;设控制口地址
;1 00 0 0 0 1 0
;输出控制字
;A口输出全0
;设A口地址
;输出到A口
8255A应用举例
8255A
PA0~7
CPU
PC6
PC2
地
打印机插座
2~9
DATA0~7
STB
1
BUSY
11
地
图中用8255A的PA口作为输出打印数据
口,工作于方式0,PC口高4位工作于输
出方式,PC6产生STB#信号;PC口低4位
工作于输入方式,PC2接收打印机的BUSY
信号。程序流程如右示。
开始
8255A 初始化
BUSY=0?
Y
送 数
送 STB#
结束
N
例 : 利用 8255A作 为 打印 机 的连 接 接口 , 要求
CPU通过接口采用查询方式,把存放在从BUF单
元开始的内存缓冲区中的256个字符(ASCII码)
输出给打印机去打印。
假 定 8255A 的 端 口 地 址 范 围 为 0FBD0H ~
0FBD3H,则8255A与打印机接口的初始化程序
段如下:
8255A与打印机接口的初始化程序段
INIT:MOV DX,0FBD3H
;8255A的控制寄存器端口地址
MOV AL,10000001B ;方式选择控制字
(A组方式0:A口输出, PC7~PC4
B组方式0:B口输出, PC3~PC0输入)
OUT DX,AL
;控制字送控制口寄存器
MOV AL,00001101B ;C口置位/复位控制字,使PC6置位,
即=1
OUT DX, AL
;C口置位/复位控制字送控制寄存器
对8255A初始化编程,并使PC6初始化
状态置1,为发选通脉冲(负脉冲)准
备
MOV SI,OFFSET BUF
MOV CX,0FFH
PL:MOV DX,0FBD2H
;C
IN AL,DX
;从C口查询打印机的状态信息BUSY=0?
(即PC2=0?)
AND AL,00000100B
JNZ PL
; 若 BUSY= 1, 则 循环 等待;
BUSY=0,则
向A
8255A与打印机接口的初始化程序段(续)
MOV AL,[SI]
;否则,
MOV DX, 0FBD0H
;A口地址送DX
OUT DX,AL
;将内存中的一个字符输出到A
MOV DX, 0FBD3H
MOV AL, 00001100H ;设定C口按位操作控制字,置为低( PC6 =0)
NOP
NOP
MOV AL, 00001101B ;置为高电平 ( PC6 =1),在PC6上生成1
个负脉冲
OUT DX, AL
INC SI
DEC CX
;字符数减1
JNZ PL
;若输出字符未完,则继续
HLT
;若输出字符已完,则暂停
返回
8255A方式1
DATA0~DATA7
STB
BUSY
ACK
从图可见,当CPU通过接口要求打印机打印数据时,先要
查看BUSY信号,BUSY=0时,才能向打印机输出数据,在把数据
送 上 DATA 线 后 , 先 发 STB#=0 信 号 通 知 打 印 机 , 打 印 机 接 到
STB#=0后,发出BUSY=1,接收效据,当数据接收好并存入内部
打印缓冲器后,送出ACK#=0信号,表示打印机已准备好接收新数
据,并复位BUSY=0。
例2
设8255A为工作方式1,A口为输出。当外设向
8255A发 回 的应答 信号变 为高电 平时 , 若允许
8255A向CPU发中断请求信号,则必须设置中断
允许信号INTEA=1,即置PC6=1;若禁止它产
生中断请求,则INTEA=0,即置PC6=0。假定
端口的地址范围为300H~303H,其程序段为:
MOV DX, 303H ;置8255A
MOV AL, 00001101B ;置C口按位控制字,使PC6=1,允
许发中断请求
OUT DX, AL
MOV AL, 00001100B ;置PC6=0,
OUT DS,AL
8255A打印机接口
8255口线的使用
A为数据通道,方式1,输出
PC0产生打印机的选通脉冲
PC7未用;PC6为/ACK输入
PC3自动作INTR,接中断控制
器8259A的IR3 ,中断类型号
0BH,中断向量在
0002CH~0002FH单元
通道C其他位及通道B未用
D7~D0
PA7~PA0
INTEA
PC6
PC7
PC6
OBFA
ACKA
PC3
INTRA
与门
WR
8255初始化
MOV
MOV
OUT
MOV
OUT
DX,303H;
AL,0A0H
DX,AL
AL,1
DX,AL
;初始化,1010XXX0
;A口方式1,出;PC0出
;PC0=1,选通无效
设置中断向量
设置中断服务入口0100H:2000H
PUSH DS
;保护原数据段
XOR AX,AX
MOV DS,AX ;设向量表段地址为0000H
MOV AX,2000H
MOV WORD PTR [002CH],AX;中断服务程序偏移地址
MOV AX,0100H
MOV WORD PTR [002EH],AX;中断服务程序段地址
POP DS
;恢复原数据段
8255中断设置
MOV AL,0DH
;0000 1101;PC6 置1
OUT 0C6H,AL;允许8255A中断
STI
;CPU开中断
;主程序
中断服务程序
中断服务程序发选通信号,将数据送打印机
打印机接收并打印字符后发出应答信号,清除8255A的数据
缓冲区满信号
当外设向
8255A发回
RINT:MOV AL,[DI]
;输出字符送A通道
的应答信号
MOV DX,300H
变为高电平
OUT
DX,AL
时,若允许
8255A向
MOV
AL,0
; PC0产生低电平脉冲选通信号
CPU发中断
MOV,DX,303H
请求信号,
OUT
DX,AL;0000 0000, PC0置0
即中断允许
信号INTE
INC AL
A=1, 从
OUT 0C6H,AL; 0000 0001, PC0置1
PC3引脚发
…
;后续处理
出中断申请
要求CPU发
IRET
;中断返回
送新的数据
例3 利用OBF#作为触发打印机选通信号方式1输出
若将8255A的端口A与打印机相连,使A口工作于方式1下输出,
并利用中断方式向打印机输出一组(字符串长度为256字节)字
符,打印机接口连接电路如图所示。试编写采用中断方式传送
一组打印字符的程序段。
假定8255A的端口地址范围为300H~303H,8259A的端口地址为
020H与021H。初始化时使A口为方式1、输出,B口可任意设定为
方式0、输出,C口除联络线以外的5位线也均设定为输出,则方
式选择控制字为10100000B(0A0H)。允许A口输出中断请求的
INTEA 中断允许信号,由C口置位/复位控制字对PC6 置位来设定。
中断打印输出字符的程序由主程序MAIN和中断服
务子程序SUBP两部分组成。
主程序MAIN
MAIN: PUSH DS
MOV AX,SEG SUBP
;保存原DS
;为打印驱动子程序入口SUBP设置新的中断向量
DS:DX
MOV DS,AX
;SUBP的段地址送DS
MOV DX,OFFSET SUBP ;SUBP的偏移地址送DX
MOV AH,25H
;设置中断向量的功能号AH
MOV AL,0AH
;为8259A的IR2建立0AH
INT 21H
POP DS
;恢复原DS
MOV DX,303H
;设定8255A
MOV AL,0A0H
;8255A初始化,
OUT DX,AL
;控制字送端口
MOV AL,00001101B
;设定C口置位/
MOV DX,AL
;置PC6=1,使INTE A=1,允许8255A
MOV DX,300H
MOV AL,00H
;设置空白字符的ASCII码
OUT DX,AL
;A口输出一个空白字符,
MOV AX,OFFSET DATA ;打印字符串的标号DATA(首地址)的偏移地址送AX
MOV STR _ PTR,AX
;设置增1
MOV AX,SEG DATA
MOV STR _ PTR+2,AX ;设置增1
STI
;CPU
┆
中断服务子程序SUBP
SUBP: PUSH SI
PUSH DS
PUSH AX
LDS SI,DWORD PTR STR _ PTR ;设置打印字符串地址的指针DS:SI
CLD
LODSB
:从SI寻址的字符串中取一个8位字符送AL
MOV STR _ PTR,SI
;将自动增1后的SI
MOV DX,300H
;8255A的A
OUT DX,AL
;将AL的一个打印字符输出到A口
MOV CX,0FFH
DEC CX
JNZ NEXT
;字符送完否?未完,转NEXT
MOV AL,00001100B
;已送完,重设C口置位/
MOV DX,303H
;8255A
MOV DX,AL
;置PC6=0,使INTEA=0,禁止8255A产生中断
NEXT: MOV AL,20H
OUT 20H,AL
POP AX
POP DS
POP SI
IRET
;设置8259A的OCW2
; 送中断结束命令给8259A
;
8255A应用举例
LED开关接口。8086CPU通过8255用开关与8段LED显示器的接口如图示。
8255A PA口加驱动器接LED显示输出;PB口低4位接开关输入;PC口不用。
8255A的A0、A1接地址总线的A1、A2,其端口地址为:0FFF8H、0FFFAH、
0FFFCH、0FFFEH。要求:开关设置的二进制信息由8255A的PB口输入后,
通过PA口输出给8段LED显示器,显示开关状态所对应的十六进制值,试编
制其控制程序。
D7 ~ D 0
AD7 ~ AD0
ALE
AD19 ~ AD8
8086
译
码
器
b
PA1
A0
A1
A1
锁 A2
存 A19
器 ~A 3
a
PA0
c
PA2
d
PA3
e
PA4
CS
8255 A
f
PA5
g
PA6
DP
PA7
 5V
RD
WR
RESET
RD
PB3
WR
RESET
PB2
PB1
PB0
K3
K2
K1
K0
 5V
8255A应用举例
(1)控制字的设置
8255A的负载能力较小,PA输出口加驱动。
PA口设为方式0输出,PB口设为方式0输入。
由于地址总线的A0位未用,则8255A的每个端口有两个
地址。通常使用A0=0的地址。
则方式选择控制字为:1000×01×B
因未使用C口,故不需设置置位/复位控制字。
8255A应用举例
(2)开关状态与LED显示值关系
开关Ki闭合,则PBi=0,否则PBi=1。PB3~PB0 值与LED显
示值关系:
PB3~PB0
LED显示
PB3~PB0
LED显示
0000
0
1000
8
0001
1
1001
9
0010
2
1010
a
0011
3
1011
b
0100
4
1100
b
0101
5
1101
d
0110
6
1110
e
0111
7
1111
f
8255A应用举例
(3)PA口输出值与LED显示值间关系
8段码
.gfedcba
LED显示
’0’
11000000
’8’
10000000
’1’
11111001
’9’
10011000
’2’
10100100
’A’
10001000
’3’
10110000
’B’
10000011
’4’
10011001
’C’
11000110
’5’
10010010
’D’
10100001
’6’
10000010
’E’
10000110
’7’
11111000
’F’
10001111
LED显示
形状
形状
8段码
.gfedcba
8255A应用举例
(4) PB口输入值转换成PA口输出值方法
将前述8段码按0~F顺序连续存放于内存中;
将PB3~PB0对应值置于AL中;
执 行 换 码 指 令 XLAT 。 指 令 执 行 : (AL+BX)→AL
8255初始化
B口输入开关信息
屏蔽B口信息的高4位
转换成8位进制数
经A口输出
延时
8255A应用举例
ORG 2000H
;定位程序的段内地址
MOV AL,82H ;82H=10000010B
MOV DX,0FFFEH;设控制口地址
8255初始化
OUT DX,AL
;写方式控制字
RDPORTB:MOV DL,0FAH ;设PB口地址
B口输入开关信息
IN AL,DX
;读开关状态
AND AL,0FH ;屏蔽掉无用的高4位
屏蔽B口信息的高4位
MOV BX,OFFSET SSEGCODE
XLAT
;查表取段选码
转换成8位进制数
MOV DL,0F8H ;设PA口地址
OUT DX,AL;开关值段选码输出显示
经A口输出
MOV AX,56CH ;显示延时
DEC AX
延时
DELAY: JNZ DELAY
JMP RDPORTB ;循环读开关新状态
HLT
ORG 2500H
;定位段选码表的段内地址
SSEGCODE DB 0C0H,0F9H,0A4H ,0B0H,99H,92H,82H ;段码表
DB 0F8H,80H, 98H,88H,83H, 0C6H,0A1H,86H, 8EH
两种方式并行传送接口设计
1 .要求
在甲乙两台微机之间并行传送1K字节数据。甲机发
送, 乙机接收。甲机一侧的8255A采用1方式工作,乙机一侧
的8255A采用0方式工作。两机的CPU与接口之间都采用查询方
式交换数据。
2.分析
双机均采用可编程并行接口芯片8255A构成接
口电路,只是8255A的工作方式不同。此时,双方
的8255A把对方视为I/O设备。
3.设计
(1)硬件连接
根据上述要求,接口电路的连接如图所示。
(2)软件编程
接口驱动程序包含发送与接收两个程序。
0方式
1方式
8255A
PA0~7
乙(接收)
CPU
8255A
PA0~7
OBF PC
7
ACK
PC6
PC7
PC3
PC4~6
PC0~2
PB0~7
PC3
未
用
PC0~2、4~5
PB0~7
两种方式的并行传送接口电路框图
甲(发送)
CPU
甲机发送程序段:
MOV
DX,203H
;8255A命令口
MOV
AL,10100000B
;初始化工作方式字
OUT
DX,AL
MOV AL,00001101B
;置发送中断允许INTEA=1
OUT DX,AL
;PC6=1
MOV SI,OFFSET BUFS ;设置发送数据区的指针
MOV CX,3FFH
;发送字节数
MOV
号
;向A口写第一个数,产生第一个 OBF-信
DX,200H
MOV AL,[SI]
OUT DX ,AL
;送给乙方,以便获取乙方的ACK-信号
INC
SI
;内存地址加1
DEC CX
;传送字节数减1
L: MOV DX,202H
;8255A状态口
IN AL, DX
;查发送断请求INTRA=1?
AND AL,08H
;PC3=1?
JZ L
;若无中断请求,则等待;
;若有中断请求,则向A口写数
MOV DX,200H
MOV AL,[SI]
OUT
DX,AL
INC
SI
;8255APA口地址
;从内存取数
;通过A口向乙机发送第二个数据
;内存地址加1
DEC
CX
JNZ
L
;字节数减1
;字节未完,继续
MOV AH,4CH
INT
21H
BUFS DB 1024个数据
乙机接收程序段:(略)
;已完,退出
;返回
例设甲、乙两机之间进行并行通信,共传送1KB数据。甲
机一方的8255A的PA口采用方式2并用中断方式传送数据。
乙机一方8255A的PA口与PB口采用方式0输出与输入,按查
询方式传送数据。两机的CPU与接口之间都采用查询方式
交换数据。
硬件设计:接口电路的连接如图所示。甲机一侧的8255A
的A口作双向传送,既作输出又作输入,它的中断请
求线由PC3接到8259A的IR2上。乙机一侧的
8255A的A口和B口是单向传送,分别作输出与输入。
8259A
INTA
INTR
INTA
IR0
IR2
INTR
IR7
8255A
8255A
PA0~7
PA0~7
PC3
PC7
主
机
系统总线
PC4
PC6
PC5
PB0~7
PB0~7
OBF
STB
ACK
IBF
PC1
PC7
PC6
PC0
PC2~5
PC0~2
2方式接口电路框图
从
机
8255A的应用举例(续1)
┆
;8255A
MOV DX,303H;8255A
MOV AL,11000000B
B口未用
OUT DX,AL
MOV AL,00001001B
入中断允许
OUT DX,AL
MOV AL,00001101B
出中断允许
OUT DX,AL
MOV SI,300H
MOV DI,410H
MOV CX,3FFH
┆
;方式选择字:A口为方式2,输出;
;置位PC4,设置INTE2 =1,A口输
;置位PC6,设置INTE1 =1,A口输
8255A的应用举例(续2)
MAIN:STI
HLT
DEC CX
JNZ AGAIN
MOV AX,4C00H
INT 21H
;CPU
;字节数减1
;未完,
;已完,
;返回DOS
ROUT PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
PUSH AX
PUSH DX
PUSH DI
PUSH SI
MOV DX,303H
;8255A
MOV AL,08H
;复位PC4,使INTE2 =0,禁止
OUT DX,AL
8255A的应用举例(续3)
MOV AL,0CH ;复位PC6,使INTE 1=0,禁止输入中断
OUT DX,AL
CLI
MOV DX,302H
;8255A
IN AL,DX
;查中断源,
MOV AH,AL
AND AL,20H ;查状态位IBF=1?即判是输入?
JZ OUTP
;不是,则跳转至输出程序OUTP
INP: MOV DX,300H
;是,则由A
IN AL,DX
MOV[DI],AL
INC DI
;接收数据块内存地址加1
JMP RETURN
;跳转RETURN
OUTP:MOV DX,300H
;8255A 数据口A
MOV AL,[SI]
OUT DX,AL
;由A
INC SI
;发送数据块内存地址加1
8255A的应用举例(续4)
RETURN:MOV DX,303H ;8255A
MOV AL,00001101B;置位PC6,设置INTE1=1,允许A口输出
OUT
MOV
ROUT
DX,AL
AL,00001001B;置位PC4,设置INTE2=1,允许A口输
入
OUT DX,AL
MOV AL,62H
;设置OCW2为特殊EOI中断结束方式,清
除ISR2
OUT 20H,AL
POP SI
POP DI
POP DX
POP AX
IRET
ENDP
本 章 结 束,
谢谢您的合作!