50
1 第第第 第第第第

第八章 并行接口

Embed Size (px)

DESCRIPTION

第八章 并行接口. 第一节 并行接口概述. 一、并行接口与串行接口结构. 回下页. 就绪 / 忙信号. 速度取决于 就绪 / 忙信号. 传输需求. 选通信号. 并行数据线. 无格式要求. 空闲 — 可为 0 长度. …. …. 单条数据线. 起始 标志位. 串行 数据位. 停止 标志位. 约定的格式. 约定的速度. 二、并行与串行接口通信方式 1 、并行通信方式 一般采用异步互锁方式。. 2 、串行通信方式 一般采用起止式异步方式。. 转上页. 第二节 可编程芯片 82C55. 一、 8255 的基本功能. - PowerPoint PPT Presentation

Citation preview

Page 1: 第八章 并行接口

1

第八章 并行接口

Page 2: 第八章 并行接口

2

第一节 并行接口概述

一、并行接口与串行接口结构

回下页

Page 3: 第八章 并行接口

3

二、并行与串行接口通信方式1 、并行通信方式 一般采用异步互锁方式。

就绪 / 忙信号

选通信号

并行数据线

传输需求

无格式要求

速度取决于就绪 / 忙信号

2 、串行通信方式 一般采用起止式异步方式。

单条数据线

串行数据位

起始标志位

停止标志位

约定的速度

约定的格式

空闲—可为 0 长度

转上页

Page 4: 第八章 并行接口

4

第二节 可编程芯片 82C55

⑴ 具有 2 个 8 位 I/O 口 (A 口和 B 口 ) 和 2 个 4 位I/O 口 (C 口上半部和 C 口下半部 ) ,输入时具有缓冲、输出时具有锁存功能, A 口具有双向功能; ⑵ 对 A 组和 B 组支持多种工作方式 (0 、 1 、 2) ,实现无条件、查询、中断方式传输; ⑶C 口在方式 1 和方式 2 时,部分引脚作为 A 口和B 口的状态口 ( 其余引脚作为数据口 ) ,并可按位进行操作。

一、 8255 的基本功能

Page 5: 第八章 并行接口

5

1 、内部结构 二、 8255 的内部结构和外部引脚

Page 6: 第八章 并行接口

6

2 、外部引脚

CPU 侧引脚: D0-D7 , A1A0 , CS , RD 、WR外设侧引脚: PA0-PA7 , PB0-PB7 , PC0-PC3 , PC4-PC7

Page 7: 第八章 并行接口

7

I/O 端口地址: 8255 提供 4 个端口 ( 使用A1A0) 。 命令:初始化—设置工作方式; 操 作—对 A 口、 B 口、 C 口读 / 写 ( 整字节读 / 写 ) ; 对 C 口按位置位 / 复位 ( 状态口部分位只可读 ) 端口与命令关系表:

A1 A0 RD WR CS 操作001

010

000

111

000

A 口内容读至数据总线B 口内容读至数据总线C 口内容读至数据总线

输入

0011

0101

1111

0000

0000

数据总线内容写至 A 口数据总线内容写至 B 口数据总线内容写至 C 口

写控制寄存器或 C 口按位操作

输出

X1X

X1X

X0X

X11

100

端口输出为高阻非法

端口输出为高阻

禁止回下页

Page 8: 第八章 并行接口

8

三、 8255 操作及编程1 、初始化编程 —设置工作方式控制字 初始化仅需设置工作方式控制字 ( 各口工作模式 ) 。

I/O 端口: A1A0=11

工作方式控制字与 C 口按位操作冲突控制: 工作方式控制字— D7=1 ; C 口按位置 / 复位— D7=0 。

转上页 回下页 回 10页

Page 9: 第八章 并行接口

9

例 1 :要求使 8255 的 A 口工作于方式 1 作输入, B 口工作于方式 0 作输出, C 口上半部输入,下半部输出, 8255 的端口地址为 60H~63H 。请写出初始化程序。 控制字为: 10111000B=0B8H

初始化程序为: MOV AL , 0B8H

OUT 63H , AL

转上页 回下页

Page 10: 第八章 并行接口

10

2 、 C 口按位置位 / 复位操作 目的:当 C 口作为状态口时,有些位不可写,需要用按位置位 / 复位操作对可写位进行操作。

例 2 :如上例,若 A 口在方式 1 输入、中断传输方式时,应当使 C 口内部 REG D4=1 ,则按位置位操作为: MOV AL , 00001001B

OUT 63H , AL 转 8页 转上页 回 19页

Page 11: 第八章 并行接口

11

四、 8255 的工作方式 1 、方式 0— 基本 I/O 方式 ( 无条件 I/O 方式 )

A 口、 B 口、 C 口 ( 上半部及下半部 ) 均可用作输入或输出 ( 单向 ) ,实现无条件方式传输; CPU 可用 IN/OUT 指令实现数据传输。

Page 12: 第八章 并行接口

12

例 3 :用 8255( 起始地址为 60H) 发出一个正向脉冲,编写相应程序。 (可作为第 6 章频率计数时 STC 需要的 1 个脉冲) MOV AL , 80H ; PA 口方式 0 输出, PB 口方式0 输出 OUT 63H , AL ; PC 口高、低 4 位均输出 MOV AL , 0 OUT 60H , AL MOV AL , 2 OUT 60H , AL MOV AL , 0 ; PA1 产生一个正向脉冲 OUT 60H , AL

转第 6章计数例题中 STC信号

Page 13: 第八章 并行接口

13

例 4 :假设有一个 4×4 的矩阵键盘通过并行接口芯片 8255( 起始端口地址为 60H) 与微机相连,画出8255 与键盘电路连接图并编写键盘扫描程序。 分析:键盘行线连 8255 输出口 ( 输出 0) ; 键盘列线连 8255 输入口 ( 无按键时为 1) ; 键盘有键按下时, 8255 输入口某位为 0 。

回下页

Page 14: 第八章 并行接口

14

程序流程图:

PA 口输出 0

PB=0F ?

读 PB 口

检测各行:PA 口某位输出 0 ,读 PB 口,检测并取得按键值

Y

N读 PB 口

置下行起始键号,恢复下行 PA 口参数

N

Y

扫描完所有行?N

Y

置行数 =4 、首行 PA 口=0FEH

PA 口输出

置下行 PA 口参数,并保存

找到列号,并处理按键

按键非当前行?当前行列 PB循环右移一位

处理按键

Y

N

CF=1 ?

键号加 1

转上页 回下页

Page 15: 第八章 并行接口

15

汇编程序: MOV AL , 82H OUT 63H , AL ;初始化BEGIN : MOV AL , 0 OUT 60H , AL ; A 口输出 0

WAIT: IN AL , 61H AND AL , 0FH CMP AL , 0FH JZ WAIT ;等待按键 MOV DL , 4 ;行数 MOV AL , 0FEH ; 0行 PA

MOV CH , 0 ;键号0~15

SROW: OUT 60H , AL RCL AL , 1 MOV AH , AL ;下行PA

IN AL , 61H AND AL , 0FH CMP AL , 0FH JNZ SCOL ;有键按下 ADD CH , 4 ;下行键号 MOV AL , AH ;当前行 PA

DEC DL JNZ SROW ;扫描下行 JMP BEGINSCOL : RCR AL , 1 ;找列号 JNC PROCE INC CH JMP SCOL PROCE :…… ;按键处理程序

转上页

Page 16: 第八章 并行接口

16

2 、方式 1— 选通 I/O 方式 可采用查询、中断方式进行通信。( 1 )方式 1 的输入

回下页 回 22页回 21页

Page 17: 第八章 并行接口

17

①REG 及引脚信息产生过程 ( 内部逻辑自动实现 ) : a) 选通信号触发将 A 、 B 口引脚信息存入内部REG ;

STBA

PA0~PA7

A 口 REG

IBFA

外设给出

8255 给出

外设给出

b) 状态 REG 产生变化,可产生 INTRA 中断请求; 中断产生条件:STBA=1 、 IBFA=1 、 INTEA=1

INTEA

INTRA8255 给出

允许 =1 、禁止 =0软件设置

c)CPU 对 A 口 REG 的读操作使 IBFA 及 INTRA

复位。 注意:对 C 口 REG 的读操作不触发任何信号变化

RDCPU 给出( 读 A 口 REG)( 读 C 口 REG)

转上页 回下页 回 19页 回 20页

Page 18: 第八章 并行接口

18

② 状态口 (C 口 ) 信息字与引脚: a)C 口 REG 作为状态口,格式如下

D7 D6 D5 D4 D3 D2 D1 D0A 组状态 B 组状态

输入时输入时 I/O I/O IBFA INTEA INTRA

INTEB IBFB INTRB

b)PC4 、 PC2 引脚仅用作触发 A 口、 B 口锁存引脚信息到内部 REG ,与 C 口 REG(INTE) 无对应关系; c)INTEA 和 INTEB 为中断允许位, CPU 可通过对 C 口的按位置位 / 复位操作方法设置为允许 / 禁止。

转上页 回 21页回 24页

Page 19: 第八章 并行接口

19

③ 查询方式通信 ( 读取数据 ) 编程: a) 编程思路—利用数据口与状态口的内部控制逻辑; STBA 有效→ IBFA 或 / 和 INTRA 有效→…→读 A 口REG

→IBFA 或 / 和 INTRA 无效→外设使 STBA 有效 b) 编程方法— CPU 检测 ( 读 C 口 REG) 到 IBFA 或INTRA 有效时,可读取 A 口数据 (A 口 REG 为有效数据 ) 。 …… MOV AL , 10110000B ; A 口方式 1 输入, C 口上半部输出 OUT PORTCN , AL MOV AL , 00001001B ;置 INTEA=1 ,允许中断 OUT PORTCN , AL ;若只查询 IBFA 时,可省略WAIT : IN AL , PORTC ;读 C 口 REG TEST AL , 00100000B ;只检测 IBFA

JZ WAIT IN AL , POTRA ;当 IBFA=1 时, A 口 REG 数据有效 …… ;处理完当前数据后, JMP WAIT

转 17页 转 10页

Page 20: 第八章 并行接口

20

④中断方式通信 ( 读取数据 ) 编程: a) 编程思路—利用数据口与状态口的内部控制逻辑; STBA 有效→ IBFA 和 INTRA 有效→…→读 A 口 REG

→IBFA 和 INTRA 无效→外设使 STBA 有效

b) 编程方法—在中断服务程序中读 A 口数据 (肯定有效 ) 。 …… MOV AL , 10110000B ; A 口方式 1 输入, C 口上半部输出 OUT PORTCN , AL MOV AL , 00001001B ;必须置 INTEA=1 ,允许中断 OUT PORTCN , AL ; ……RECVINT PROC ;中断服务程序 IN AL , POTRA ; A 口 REG 数据肯定是有效的 …… IRETRECVINT ENDP

转 17页

Page 21: 第八章 并行接口

21

⑤对 C 口数据口引脚的操作: PC7 、 PC6 为 C 口的数据口引脚,对应 C 口 REG 的D7 、 D6 位。 引脚信号方向—初始化 ( 工作方式字 ) 时设定; 操作实现—输出时用对 C 口按位置位 / 复位方法, 输入时可用对 C 口 ( 字节 ) 读操作方法。

转 16页 转 18页

例 5 :实现 A 口方式 1 输入时,用 PC6 输出高电平; A 口方式 1 输入时,用 PC6 采集信号。; PC6 输出高电平

MOV AL , 0B0H ; A 口方式 1 输入OUT 63H , AL ; C 口上半部输出MOV AL , 00001101BOUT 63H , AL

; PC6 采集信号MOV AL , 0B8H ; A 口方式 1 输入OUT 63H , AL ; C 口上半部输入IN AL , 62HAND AL , 40H ;01000000

回 25页

Page 22: 第八章 并行接口

22

( 2 )方式 1 的输出

与输入方式引脚的区别: 联络信号从 STB 、 IBF 变成了 ACK 、 OBF ; C 口数据口引脚从 PC6 、 PC7 变成了 PC4 、PC5 。

转 16页回下页 回 24页

Page 23: 第八章 并行接口

23

①REG 及引脚信息产生过程 ( 内部逻辑自动实现 ) : a)CPU 写操作触发将数据送到 A 口、 B 口引脚;WRACPU 给出

OBFA

PA0~PA7

A 口 REG

8255 给出

8255 给出

INTEA

INTRA8255 给出

允许 =1 ,禁止 =0软件设置

b)ACKA 信号变化,可产生 INTRA 中断请求; 中断产生条件: ACKA=0→1 、 INTEA=1

外设给出 ACKA

c)CPU 对 A 口 REG 的写操作使 OBFA 有效及INTRA 复位。

RDCPU 给出( 读 C 口 REG) ( 读 C 口 REG)

转上页 回下页 回 25页 回 31页

Page 24: 第八章 并行接口

24

② 状态口 (C 口 ) 信息字与引脚: a)C 口 REG 作为状态口,格式如下

D7 D6 D5 D4 D3 D2 D1 D0A 组状态 B 组状态

输入时输入时 I/O I/O IBFA INTEA INTRA

INTEB IBFB INTRB输出时

OBFA INTEA I/O I/O INTRA

输出时

INTEB OBFB INTRB

b)PC6 、 PC2 引脚仅用作通知引脚数据已取走,触发状态 REG 变化,与 C 口 REG(INTE) 无对应关系; c)INTEA 和 INTEB 为中断允许位, CPU 可通过对 C 口的按位置位 / 复位操作方法设置为允许 / 禁止。 转 18页转 22页转上页

Page 25: 第八章 并行接口

25

③ 查询方式通信 ( 写入数据 ) 编程: a) 编程思路—利用数据口与状态口的内部控制逻辑; WRA 有效 ( 写 A 口 REG)→OBFA 有效或 / 和 INTRA

无效→… →ACKA 有效→OBFA 无效或 / 和 INTRA 有效→WRA 有效 b) 编程方法— CPU 写完数据后,检测 ( 读 C 口 REG)

到 OBFA 无效或 INTRA 有效时,可再次向 A 口写数据。 ④中断方式通信 ( 写入数据 ) 编程: a) 编程思路—利用数据口与状态口的内部控制逻辑; WRA 有效 ( 写 A 口 REG)→OBFA 有效和 INTRA 无效→… →ACKA 有效→OBFA 无效和 INTRA 有效→WRA

有效 b) 编程方法—在中断服务程序中向 A 口写数据。

 ⑤对 C 口数据口引脚 (PC5 、 PC4) 操作:同方式1 输入 转 23页 转 21页

Page 26: 第八章 并行接口

26

3 、方式 2 – 双向选通 I/O 方式 是方式 1 的输入方式和输出方式的组合。

只有 A 口才有此方式。

Page 27: 第八章 并行接口

27

五、 8255 应用举例 1 、 Centronics 并行打印接口标准

主机→打印机

主机←打印机

主机←打印机

STROBE :输出,用于通知打印机接收数据; BUSY :输入,有效表示打印机正在接收并处理数据; ACK :输入,表示数据已取走,通知主机可传送下个数据。

回下页

Page 28: 第八章 并行接口

28

2 、 Centronics 并行打印接口应用 例 6 :假设利用 8255 的 A 口方式 0 与打印机相连,编程实现将内存缓冲区 BUFF 中字符串 (以 $ 结束 )打印输出。

读 PC7(BUSY)

PC7=1 ?

PA 口输出数据,PC0 发一个脉冲

Y

N

待发送的是结束符?

N

结束

Y

转上页

Page 29: 第八章 并行接口

29

DATASEGMENT BUFF DB ‘HELLO,WORLD!’ , 13 , 10 ,‘ $’ PORTA EQU 60H PORTB EQU 61H PORTC EQU 62H PORTCN EQU 63HDATAENDS

CODE SEGMENT ASSUME CS : CODE , DS : DATASTART : MOV AX , DATA MOV DS , AX MOV SI , OFFSET BUFF MOV AL , 88H ; A 口方式 0 输出, C 口上半部输入 OUT PORTCN , AL ; C 口下半部输出 MOV AL , 01H ;置位 PC0 , STB# 无效 OUT PORTCN , AL

回下页

Page 30: 第八章 并行接口

30

WAIT : IN AL , PORTC ;读打印机状态,若“忙”则等待 TEST AL , 80H JZ WAIT MOV AL , [SI] CMP AL ,‘ $’ JZ PRINT_OVER OUT PORTA , AL ;发送数据 INC SI MOV AL , 00H ;手工产生 STB# , OUT PORTCN, AL ;打印机接收并打印数据 MOV AL , 01H OUT PORTCN , AL JMP WAITPRINT_OVER: ……

转上页

Page 31: 第八章 并行接口

31

例 7 :假设利用 8255 的 A 口方式 1 与打印机相连,编程实现将内存缓冲区 BUFF 中字符串打印输出。 设计: CPU 写数据后, 8255A会使 OBF有效,作为打印机的STB 信号,打印机的ACK 信号可用于使8255A 产生中断。 打印输出过程中的应答信号均自动产生。

D7-D0D7-D0

WR

RD

A1

A0

A7-A2=011000

8255 打印机

D7-D0

STB

ACK

IOW

IOR

A1

A0

PA7-PA0

(OBFA)PC7

(ACKA)PC6

(INTR)PC3

至 8259

转 23页

思考:利用 8255 的 B 口实现该功能时如何接线?

回下页

Page 32: 第八章 并行接口

32

DATA SEGMENT ;定义BUFF , PORTA 、 PORTB 、 PORTC 、 PORTCNDATA ENDSCODE SEGMENT ASSUME CS : CODE , DS : DATASTART : MOV AX , DATA MOV DS , AX ;保存原来和设置新中断向量

MOVSI , OFFSET BUFF MOV AL , 0C0H ; A 口方式 1 输出, C 口上半部输出 OUT PORTCN , AL MOV AL , 0DH ;置 INTEA=1 OUT PORTCN , AL ;中断方式通信时,必须置位 MOV AL , [SI] ;发送第一个字符 OUT PORTA, AL ;发送完后会自动产生 OBF# INC SI …… MOV AH , 4CH INT 21H

转上页

Page 33: 第八章 并行接口

33

SENDSRV PROC ;中断服务程序 …… MOV AL , [SI] CMP AL ,‘ $’ JZ PRT_OVER OUT PORTA, AL ;打印机产生的 ACK# , ;可触发 8255再次产生中断 INC SI PRT_OVER:…… ;中断手工结束方式时,需发 EOI 命令 IRETSENDSRV ENDPCODE ENDSEND START

Page 34: 第八章 并行接口

34

3 、 8255A 应用之一—检测 LS138

使用 8255A( 端口地址 60H~63H) 实现对74LS138 功能的检测,画出检测电路图,编写相应程序。 输 入 输 出

G1G2AG2B C B A Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

1 0 0 0 0 0 1 1 1 1 1 1 1 01 0 0 0 0 1 1 1 1 1 1 1 0 11 0 0 0 1 0 1 1 1 1 1 0 1 11 0 0 0 1 1 1 1 1 1 0 1 1 11 0 0 1 0 0 1 1 1 0 1 1 1 11 0 0 1 0 1 1 1 0 1 1 1 1 1

1 0 0 1 1 0 1 0 1 1 1 1 1 11 0 0 1 1 1 0 1 1 1 1 1 1 1

0 X X X X X 1 1 1 1 1 1 1 1

X 1 X X X X 1 1 1 1 1 1 1 1X X 1 X X X 1 1 1 1 1 1 1 1

Page 35: 第八章 并行接口

35

思路: 8255A 的 PA 口输出到 74LS138 的

CBA 、 Gx 等入端, PB 口检测 74LS138 的 Yx ; 8255A 采用方式 0枚举所有输入,检测输出。 电路图:

D7-D0D7-D0

WRRD

A1A0

A7-A2=011000

8255A

IOW

IOR

A1A0

PA2-PA0

PA5-PA3

PB7-PB0

Y0

Y7

ABC

G2B

G2A

G1

15

14

13

12

11

10

9

7

1

2

3

4

5

6

74LS138

74LS138

CS

回下页

Page 36: 第八章 并行接口

36

CODE SEGMENT ASSUME CS : CODE

START : MOV AL , 82H ; A 口方式 0 输出, B 口方式 0 输入 OUT 63H , AL MOV DL , 3FH ; DL 为 PA 口输出的数据TST : MOV AL , DL OUT 60H , AL ; PA 口输出数据到 138 的入端 CALL DELAY1US ;延时 1μs IN AL , 61H ;读 138 的 Yx ( PB 口数据) MOV AH , AL MOV AL , DL AND AL , 38H ;只留下G1 、 G2A# 、 G2B#(00111000) CMP AL , 20H ;判断是否为 00100000 JNZ GN100 ;非 G1=1 , G2A#=G2B#=0 时转 S2

转上页

Page 37: 第八章 并行接口

37

;当 G1=1 , G2A#=G2B#=0 时,应某一 Yx 有效G100 : MOV AL , DL AND AL , 07H ;只取 CBA 数据 (00000111) ROR AH , AL ;将有效位移至位 0 CMP AH , 0FEH JNZ ERROR JMP NEXTGN100 : MOV AL , AH ;当非G1=1 , G2A#=G2B#=0 时, Yx 应全无效 CMP AL , 0FFH JNZ ERRORNEXT : DEC DL JNZ TST JMP SUCCESSERROR :…… ;显示检测出错信息SUCCESS :…… ;显示检测正确信息

Page 38: 第八章 并行接口

38

4 、 8255A 应用之二—指示灯定时控制 用 8259 、 8254 、 8255A( 端口地址分别为10H~11H 、 20H~23H 、 30H~33H) 实现指示灯的控制 (轮流点亮 8 个指示灯之一,每秒换一个灯 ) , 74LS138负责 I/O 芯片片选译码 (I/O 地址线共 10根 ) 。已知有一个 1kHz 的标准脉冲信号源可用。为节省 CPU 时间,要求采用中断方式完成功能。 思路: ⑴ 74LS138负责所有芯片的译码; ⑵ 8254负责产生定时信号给 8259 产生中断; ⑶ 8255A负责对灯的控制,在中断服务程序中完成。 回 40页

Page 39: 第八章 并行接口

39

74LS138 连接电路:

数据总线地址总线控制总线

CPU MEM

Y0

Y7

ABC

G2B

G2A

G1

15

14

13

12

11

10

9

7

1

2

3

4

5

6

74LS138

IO/M

AEN

A4A5A6

A7A8A9

回下页

Page 40: 第八章 并行接口

40

数据总线地址总线控制总线

CPU MEM

8259A 、 8254 、 8255A 的 CPU 侧连接电路:

D7-D0

CS

A0

WR

RD

IR0

IR4

IR7

8259A

Y1A3A2A1

D7-D0

CSA1A0

WR

RD

CLK0GATE0

OUT0CLK1

GATE1OUT1

8254Y2A3A2

D7-D0

CSA1A0

WR

RD

PA7

PA0

8255AY3A3A2

转上页 转 38页

Page 41: 第八章 并行接口

41

设计: ( 1 ) 8254 采用方式 2 ,每秒产生一个负脉冲; 思考:当需要采用多片 8254 时,如何实现? ( 2 ) 8259A 采用边沿触发,防遗漏和重复中断; 思考:采用电平触发时, 8254负脉冲是否够宽或太宽? ( 3 ) 8255A 输出 1 时灯不亮,输出 0 时灯亮;

+5V

( 4 ) 8254 的 T/C0 的 GATE由 8255A 提供0→1 的变化。

转下页

Page 42: 第八章 并行接口

42

数据总线地址总线控制总线

CPU

8259A 、 8254 、 8255A 的外设侧连接电路:

MEM

D7-D0

CS

A0

WR

RD

IR0

IR4

IR7

8259A

D7-D0

CSA1A0

WR

RD

CLK0GATE0

OUT0CLK1

GATE1OUT1

8254

D7-D0

CSA1A0

WR

RD

PA7

PA0PC0

8255A

1kHz+5V

×

×

回上页 转下页

Page 43: 第八章 并行接口

43

实现功能的对应程序:DATA SEGMENT CTRL DB 11111110B ;用于控制 8 个灯中的一个DATA ENDSCODE SEGMENT ASSUME CS : CODE, DS:DATASTART : MOV AX, DATA MOV DS, AX MOV SI, OFFSET CTRL MOV AL , 10000000B ;设置 8255 工作于方式0 , ; A 组输出, C 口输出 OUT 33H , AL MOV AL , 00000000B ;置 PC0 为低电平 OUT 33H , AL

回上页

Page 44: 第八章 并行接口

44

MOV AL , 00100101B ; 8254 的 T/C0 工作于方式 3 , ;只写高字节, BCD码 OUT 23H , AL MOV AL , 10H ; T/C0 计数初值为 1000 OUT 20H , AL MOV AL , 00010010B ; 8259 的 ICW1 :边沿触发, OUT 10H , AL ;不要 ICW3 、 ICW4 MOV AL , 00001000B ; 8259 的 ICW2 :起始中断类型为 08H OUT 11H , AL MOV AL , 11101111B ;开放 8259 的 IR4 中断 OUT 11H , AL ;保存原来的 0CH 中断向量

MOV AX , CODEMOV DS , AX

MOV DX , OFFSET CTRLLAMP MOV AX , 250CH ;写入新的 0CH 中断向量 INT 21H

Page 45: 第八章 并行接口

45

MOV AL , 00000001B ; 设 置 PC0 从 0 到1 , 8254开始计数 OUT 33H , AL … ; CPU 进行其它工作EXIT : MOV AH , 0 ;退出程序 INT 21H

CTRLLAMP PROC ;中断服务程序 PUSH AX MOV AL,[SI] ;取当前应打开的灯的数据 OUT 30H,AL ROL AL ;产生下次应打开的灯的数据 MOV [SI],AL ;将下次应打开的灯的数据保存 POP AX IRETCTRLLAMP ENDPCODE ENDSEND START

Page 46: 第八章 并行接口

46

5 、 8255 应用之三—中断方式双机双向 8 位通信

D7-D0D7-D0

WR

RD

A1

A0

A9-A2=00011000

甲机 8255

IOW

IOR

A1

A0

PA7-PA0

PB7-PB0

A9-A2=00011000

D7-D0

WR

RD

A1

A0

D7-D0

IOW

IOR

A1

A0

PA7-PA0

PB7-PB0

乙机 8255

(OBFA)PC7(ACKA)PC6

(INTRA)PC3

至 A 机8259

(STBB)PC2 (I/O)PC5

(INTRB)PC0

PC2(STBB)PC5(I/O)

PC3(INTRA)

PC7(OBFA)PC6(ACKA)

PC0(INTRB)

至 B 机8259

主程序:完成 2 个中断服务程序入口填入向量表, 8255 初始化 ( 中断方式 ) ,必要的数据准备; 中断服务程序:发送或接收数据、处理数据、返回。

Page 47: 第八章 并行接口

47

DATA SEGMENT SENDBUFF DB ‘HELLO,WORLD!’ , 13 , 10 ,‘ $’ RECVBUFF DB 64 DUP(?) …… ;定义 PORTA 、 PORTB 、 PORTC 、 PORTCN OLDOC DD ? OLD0D DD ?DATA ENDSCODE SEGMENT ASSUME CS : CODE , DS : DATASTART : MOV AX , DATA MOV DS , AX MOV AX , 350CH ;保存原来的 0CH 中断向量 INT 21H MOV WORD PTR OLD0C , BX MOV WORD PTR OLD0C+2 , ES MOV AX , 350DH ;保存原来的 0CH 中断向量 INT 21H MOV WORD PTR OLD0D , BX MOV WORD PTR OLD0D+2 , ES

Page 48: 第八章 并行接口

48

MOV AX , CODE ;写入新的 0CH 中断向量 MOV DS , AX MOV DX , OFFSET SENDSVR MOV AX , 250CH INT 21H MOV AX , CODE ;写入新的 0DH 中断向量 MOV DS , AX MOV DX , OFFSET RECVSVR MOV AX , 250DH INT 21H MOV AX , DATA ;恢复 DS MOV DS , AX

MOVSI , OFFSET SENDBUFF MOVDI , OFFSET RECVBUFF

Page 49: 第八章 并行接口

49

MOV AL , 0A6H ; 8255A 口方式 1 输出, B 口输入 OUT PORTCN , AL ; C 口上半部输出 MOV AL , 0DH ;置 INTEA=1 OUT PORTCN , AL MOV AL , 05H ;置 INTEB=1 OUT PORTCN , AL MOV AL , 0BH ;? OUT PORTCN , AL MOV AL , [SI] ;发送第一个字符 OUT PORTA, AL ;发送完后会自动产生 OBFA# INC SI …… MOV AH , 4CH INT 21H

Page 50: 第八章 并行接口

50

SENDSVR PROC ;发送 PUSHA MOV AL , [SI] CMP AL ,‘ $’ JZ EXIT OUT PORTA, AL INC SI JMP EXITEXIT: POPA IRETSENDSVR ENDP

RECVSVR PROC ;接收 PUSHA IN AL , PORTB MOV [DI] , AL INC DI …… ;处理 MOV AL , 0AH ;产生脉冲 OUT PORTCN, AL MOV AL , 0BH OUT PORTCN , AL POPA IRETRECVSVR ENDPCODE ENDSEND START

思考:如何实现双机间 16 位单向传输?