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

第五章 数字量输入输出


第5章 数字量输入输出
? ? ? ? ? 5.1 概述 5.2 系统总线及接口 5.3 中断控制系统 5.4 计数定时接口 5.5 并行输入输出接口

1

5.1 概述
5.1.1 I/O信号的形式
1、开关量:只有两种稳定的信号,可以用两个最基本的逻辑符号表示 2、数字量:多位0和1按一定规则组合所表示的信号 3、脉冲量:两种稳态之间的变化

? 正跳变:由0变到1
? 负跳变:由1变到0 4、模拟量:数值和时间上都能连续变化的信号

2

5.1.2 I/O接口
接口的含义: ? 狭义上:连接计算机和I/O设备的部件; ? 广义上:还包括接口电路的管理驱动程序;

1、 I/O接口的功能
(1)信号的形式变换:非数字信号变换成二进制数字信号; (2)电平转换和放大 (3)锁存及缓冲 (4) I/O定向 (5)并行及串行I/O的转换 ? 并行方式:接口和I/O设备之间以并行方式传送; ? 串行方式:一位一位地进行传送;

3

2、 I/O的内容分类
(1)数据信息:数据信息可分为数字量、模拟量和开关量。 (2)状态信息:状态信息是CPU与外设之间交换数据时的联络信息。 (3)控制信息:控制信息用来设置I/O外设(包括I/O接口)的工作模式、 命令字等有关信息。如“启动”,“停止”信息。

3、 I/O接口的构成
(1)端口:构成I/O接口的基本单元。
较低地址端口存放较低字节内容,较高端口存放较高字节的内容 (2)端口的分类: ① ② ③ 数据端口:单向输入、单向输出、双向 状态端口 控制端口:输入、输出指令

4

5.1.3 I/O编址
两种I/O编址方式:存储器映象和I/O端口寻址

1、存储器映象编址:从存储器地址中分出一部分给I/O端口使用,每个
I/O端口被看成一个存储器单元,用访问存储器的方法访问I/O端口 优点:无须专门的I/O指令和专门的I/O控制信号也能完成I/O;

2、 I/O端口单独编址:使用专门的I/O指令和控制信号进行I/O;
优点:I/O指令和存储器分别编址,各自都有完整的地址空间;

两种方式优缺点互补;

5

5.1.4 I/O的控制方式
1. 无条件传送方式 无条件传送方式是假设输入接口数据已经准备好,或者输出设备是 空闲的,此时CPU无需查询状态,直接用IN和OUT指令完成与接口之 间的数据传送。

2. 查询传送方式 利用查询方式输入数据之前,CPU要查询输入数据是否准备好;利

用查询方式输出数据之前,CPU要查询输出设备是否空闲。只有确认 外设已经具备了传送条件后,才能用IN和OUT指令完成数据传送。

6

3、中断控制传送方式
中断控制的输入和输出方式,也成中断传送方式。当外设的输入 数据准备好或接受数据的锁存器空时,主动向CPU发出中断请求,使

CPU中断原来执行的程序(主程序),转去执行为外设服务的输入或输
出操作,服务完毕CPU再继续执行原来的程序。

4、直接存储器访问方式DMA

5、其他方式:如I/O处理机方式

7

5.2 系统总线及接口
5.2.1 总线概述
1、总线的特性
(1)多信号源 (2)被分时使用 (3)由主设备控制

2、总线的分级 (1)片内总线 (2)系统级总线:计算机机箱内部,插卡与插卡之间的连接总线;

(3)设备级总线:计算机机箱外部,I/O设备和计算机之间的连接总线;

8

5.2.2 系统总线标准
1、PC/XT及ISA总线
(1)总线信号

(2)总线周期:CPU执行一条指令的时间称为指令周期。
系统的总线周期分为CPU驱动和DMAC驱动 ① CPU驱动的总线周期 ② DMAC驱动的总线周期

?
? ?

存储器读总线周期
存储器写总线周期 I/O读总线周期

? DMA存储器读周期
? DMA存储器写周期

?

I/O写总线周期

9

5.3 中断控制系统
5.3.1 中断的基本概念
1、中断及返回
所谓“中断”是指CPU在正常执行程序 的过程中,由于内部/外部事件或由程序 的预先安排,引起CPU暂时中断当前程序 的运行而转去执行为内部/外部事件或预 先安排的事件服务的子程序,待中断服务 子程序执行完毕后,CPU再返回到暂停处 (断点)继续执行原来的程序,这一过程 称为中断,其示意图如图5-1所示。
现 行 程 序 断点

中 断 服 务 程 序

图 5-1 中断过程示意图

10

2、中断系统的功能 (1)发出中断请求信号:原始信号、经过管理后输往CPU的信号 (2)定向中断服务程序 (3)主程序的暂停及返回 ① ② 断点的保护和返回 现场的保护和返回

3、中断技术的优点
(1)并行操作(CPU与外设) (2)实时处理(测控信号)

(3)故障处理(掉电保护等)
(4)分时操作(多任务或多用户系统)

11

4、中断源:能引起中断的设备或事件称为中断源。 (1) 中断源种类 ? 设备中断(硬中断) ? 指令中断(软中断) ? 故障中断(状态中断) ? 实时时钟中断(定时中断) ? CPU内部运算产生的某些错误所引起的中断

12

(2) 中断源识别通常有两种方法:查询中断和矢量中断。
① 查询中断 查询中断时采用软件或硬件查询技术来确定发出中断请求的中断源。 多个中断源共用一个中断服务入口程序,进入中断服务程序后查询 方式有: ? ? 软件查询:首先读取中断源状态并查询检测,然后根据状态检测情 况作相应的中断处理。 硬件查询1:通过串行顺序链电路端口读取引起中断的最高优先级 中断源的编码,然后根据该编码(计算出入口地址)转入相应的处 理程序。

?

硬件查询2:中断相应信号-INTA触发从串行顺序链电路中获取终端 类信号。根据类型号转入相应的处理程序(硬件查询2类似矢量中 断)
13



矢量中断
矢量中断又称向量中断,通常是由中断向量来指示中断服务程序

的入口地址。每个中断源都预先指定一个矢量标志,要求外设在提出中 断请求时提供该中断矢量标志。当CPU响应某个中断源的中断请求时, 控制逻辑就将该中断源的矢量标志送入CPU,CPU根据矢量标志自动指 向相应的中断服务程序的入口地址,转入中断服务程序。 每个中断源对应一个中断服务入口程序,CPU响应中断时,通过中 断电路获取中断矢量(或中断类型号),根据中断矢量转入该中断源的 中断服务程序。

14

5、中断的分类
内部中断也称软件中断,是由处理器检测到异常情况或执行软件 中断指令所引起的一种中断。

(1)内部中断
① ② 除法出错中断(除法指令操作结果溢出(除数位0),引起0号中断); INTO溢出中断(当OF=1,并且执行INTO指令,引起4号中断);


④ ⑤

INT n中断(执行INT n中断指令(相当于子程序调用指令),引起的中断);

断点中断(在程序某断点插入单个字节的INT3指令代码,当执行到INT3, 引发的3号中断类型); 单步中断(当TF=1时,每执行一条指令,自动转入1号中断类型的服务 程序)。

15

(2) 外部中断——硬件中断
外部中断也称硬件中断,是由CPU的外部中断请求信号触发的一种中 断,分为不可屏蔽中断NMI和可屏蔽中断INTR。 ① ② 非屏蔽中断请求NMI (上升沿触发) 可屏蔽中断INTR (高电平触发) 非屏蔽中断请求由不受中断允许标志位IF的影响,中断类型码为2。

若CPU发现有可屏蔽中断请求,CPU将根据中断允许标志位IF的状态 决定是否响应。如果IF=0,表示CPU处于关中断状态,屏蔽INTR 线上的中断,CPU不理会该中断请求而继续执行下一条指令;如果 IF=1,表示CPU处于开中断状态,允许INTR线上的中断,CPU执 行完现行指令后转入中断响应周期。

16

(3)中断处理顺序 中断处理顺序即按中断优先权从高到低的排队顺序对中断源

进行响应,8086系统的中断处理次序如下:
① ② ③ ④ 除法错误中断、溢出中断、INT n指令中断、断点中断。 非屏蔽中断NMI。 可屏蔽中断INTR。 单步中断。

17

6 中断向量表
中断向量就是中断服务程序的入口地址表。把系统中的所有中断向量 集中起来放到存储器的某一区域(0~3ffH)内,这个存放中断向量的 存储区就叫中断向量表(或中断矢量表),即每一个中断服务程序 与表内的中断向量具有一一对应关系。 中断向量表分为三部分:专用中断、备用中断和用户中断。 ① ② ③ 专用中断:类型0~类型4,共有5种类型。专用中断的中断服务程 备用中断:类型5~类型3FH,这是Intel公司为软、硬件开发保留 用户中断:类型40H~类型FFH,为用户可用中断,其中断服务程 序的入口地址由用户程序负责装入

序的入口地址由系统负责装入,用户不能随意修改。
的中断类型,一般不允许用户改作其他用途。

18

0000H

除法中断入口 IP 单步中断入口 NMI 中断入口 断点中断入口 溢出中断入口

0004H

CS

专 用 中 断

0008H

000CH 0010H 0014H

类型 5 中断入口

备 用 中 断

00C4H

∶ 类型 31H 中断入口 ∶

类型 32H 中断入口 00C8H

用 户 中 断

03FCH

∶ 类型 0FFH 中断入口 ∶

8086 的中断向量表

19

5.3.2 可编程中断控制电路
Intel 8259A可编程外部中断控制器的功能
? 可对8个中断源实现优先级控制
? 可扩展至对64个中断源实现优先级控制 ? 可编程设置不同工作方式

? 根据中断源向x86提供不同中断类型码

20

8259A引脚及功能
① ② 数据线D7~D0------8位;

见P297的图5.19

片选信号----------低电平有效;


④ ⑤ ⑥ ⑦

A0--------------地址引脚;
读写信号----------低电平有效; INT-------------中断请求信号; IR7~IR0----------外部中断请求8个; CAS2~CAS0-------多片8259A的级联

21

1.8259A的内部结构
-中断请求寄存器IRR ? 保存从IR0~IR7来的中断请求信号,某位=1表示对应的IRi有中 断请求 – 中断服务寄存器ISR ? 保存所有正在服务的中断源,某位=1表示对应的IRi中断正在被 服务 – 中断屏蔽寄存器IMR ? 存放中断屏蔽字,某位=1表示对应的IRi输入被屏蔽 – 中断优先权判别电路 ? 确定是否向CPU发出中断请求,中断响应时确定ISR的哪位应置 位及把相应中断的类型码放到数据总线上

22

2、 8259A的工作过程
? 8259A对中断请求的处理过程如下: – 当某IRi有效时,IRR相应位置1 – 若有效的IRi未被屏蔽,则向CPU发出中断请求 – 检测到第1个INTA信号后,置ISRi=1,IRRi=0

– 检测到第2个INTA信号后,把ISRi=1中最高优先级的中断类 型码放到DB上
– 若工作在AEOI方式,在第2个INTA#结束时,使ISRi复位; 否则由CPU发出EOI命令使ISRi复位

23

3、 8259A的工作方式
? 8259A的工作方式有如下几类:

– 中断优先方式与中断嵌套
– 中断结束处理方式 – 屏蔽中断源的方式

– 中断触发方式
– 级联工作方式

24

(1)中断优先方式与中断嵌套
? 中断优先方式 两类优先级控制方式:固定优先级和循环优先级 – 固定优先级方式 ? 所有中断请求IRi的中断优先级固定不变 ? 优先级排列顺序可编程改变 ? 加电后8259A的默认方式,默认优先级顺序从高到低为IR0~ IR7
默认优先级 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 7 6 5 4 3 2 1 0 优先级 优先级可编程改变 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 3 2 1 0 7 6 5 4

最低级

最高级

最高级

最低级

25

(1)中断优先方式与中断嵌套(续)
– 循环优先级方式 ? 中断源轮流处于最高优先级,即自动中断优先级循环 ? 初始优先级顺序可用编程改变 ? 某中断请求IRi被处理后,其优先级别自动降为最低,原来比它 低一级的中断上升为最高级
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISRi 0 7 1 6 0 5 1 4 0 3 0 2 0 1 0 0 ISR内容 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 0 2 1 1 0 0 0 7 0 6 0 5 0 4 0 3

最低级
IR4的服务结束以前

最高级

最高级

最低级

IR4的服务结束以后

26

(1)中断优先方式与中断嵌套(续)
? 中断嵌套方式 – 在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。 8259A有两种中断嵌套方式: ? 普通全嵌套方式(默认方式) 中断正被处理时,只有更高优先级的事件可以打断当前的中 断处理过程而被服务。 ? 特殊全嵌套方式 中断正被处理时,允许同级或更高优先级的事件可以打断当 前的中断处理过程而被服务。

注: 特殊全嵌套仅用于多个8259A级连时的主8259A,而不能用 于从属8259A或单8259A系统。

27

?

一般全嵌套方式与特殊全嵌套方式的区别
B.
主8259A
IR0 IR1 IR2

一般嵌套方式: IR4的中断被服务 时,这些中断将 被封锁。

C. 一般嵌套方式:
从8259A
IR0

从 片 的 INT 被 主 片 封锁,故更高级别 的IR0-IR2中断也无 法得到响应

IR1
IR2 IR3 IR4 INT

A.

假定IR3发生中 断,并获得服务

去CPU

IR3

INT IR4
IR5

IR5
IR6 IR7

IR6
IR7

E.

D. 特殊嵌套方式: IR4 的 中 断 被 服
务时,只封锁 IR5-IR7。

特殊嵌套方式: 因主片不封锁从片的 INT,故级别高的IR0IR2中断可以得到响应。 (但IR3-IR7仍被本从片 封锁)
28

(2)中断结束处理方式
? 当某一IRi中断被服务时,ISR中的相应位ISRi=1。当服务结束后,则 必须清零该ISRi位。使ISRi=0是通过向8259A发出中断结束命令(EOI 命令)实现的。 ? 三种EOI命令 – 自动EOI(AEOI)——(自动EOI方式)

– 非指定EOI(NSEOI)——(正常EOI方式)
– 指定EOI(SEOI)——(特殊EOI方式) – AEOI:在第2个INTA结束时,由8259A使ISRi自动复位; ? 因不保留当前正在服务的中断的状态,故AEOI不能用于中断 嵌套方式

29

(2)中断结束处理方式
– SEOI:由CPU发出一条SEOI命 令,该EOI命令中指出了所要复 位的ISR的位号。 ? 用于特殊屏蔽方式 – NSEOI:由CPU发出正常EOI命 令,该EOI命令使ISRi=1的位中 优先级最高的那一位复位。 ? 用于普通全嵌套方式 中断服务程序 ┇

向从PIC发EOI命令
读从PIC的ISR 全0? N

特殊全嵌套方式下的EOI处理

Y

向主PIC发EOI命令
恢复现场 IRET
30

只有当从PIC的中断全部 处理完后,才能向主PIC 发EOI命令

(3)屏蔽中断源的方式
? IMR屏蔽字决定了允许或禁止某位IRi所对应的中断:IMi=1 禁 止, IMi=0 允许。

? 特殊屏蔽方式:
– 提供了允许较低优先级的中断能够得到响应的特殊手段。 – 原理:假定当前正在处理IR6,先进入特殊屏蔽方式,然后设 置IM6=1。这时,除IR6外的所有中断请求均能得到响应。 – 特殊屏蔽方式中只能用SEOI命令结束中断。

31

(4)中断触发方式
? 边沿触发:IRi出现上升沿表示有中断请求 ? 电平触发:IRi出现高电平表示有中断请求 ? 在第1个INTA#结束前,IRi必须保持高电平

(5)级联工作方式
? 单片8259A可支持8个中断源; ? 采用多片8259A级连,可最多支持64个中断源。n片8259A可支持7n+1个 中断源; ? 级连时只能有一片8259A为主片,其余的均为从属片; ? 涉及到的8259A引脚包括: – CAS0-CAS2 – SP/EN – IRi – INT

32

级连电路连接方法
系统总线 AB、DB、CB

INTA A0 CS D0-D7 RD WR INT

INTA A0 CS D0-D7 RD WR INT

INTA A0 CS D0-D7 RD WR INT CAS0 CAS1 CAS2

8259A (从片1)

CAS0 CAS1 CAS2

8259A (从片2)

CAS0 CAS1 CAS2

8259A (主片)

SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0

VCC

33

4、 8259A的编程使用
? 8259A的控制命令分为: – 初始化命令字ICW ? ICW1~ICW4 ? 向8259A写入ICW的过程称为初始化编程

– 操作命令字OCW
? OCW1~OCW3 ? 向8259A写入OCW的过程称为操作方式编程

34

(1)8259A内部寄存器的寻址方法
?

需要CS#、A0、RD#、WR#和D4、D3的配合 内部寄存器的访问方法如下表:

?

CS

RD

WR

A0 0 0 0 1

D4 0 0 1 x x

D3 0 1 x x x

读写操作 写OCW2 写OCW3 写ICW1 写ICW2,ICW3,ICW4,OCW1(顺序写入) 读出IRR、ISR 读出IMR

0

1

0

0

0

1

0 1

35

(2)8259A的初始化顺序 ? 8259的初始化流程如图 – 注意次序不可颠倒
写ICW1 写ICW2 N
级连?

(3)8259A的控制命令字
? 初始化8259A必须从ICW1开始 – 写ICW1意味着重新初始化8259A – 写入ICW1后,8259A的状态如下: ? 清除ISR和IMR(全0); ? 将中断优先级设成初始状态:IR0 最高,IR7最低; ? 设定为一般屏蔽方式; ? 采用非自动中断结束方式;

Y 写ICW3 N
需ICW4?

Y 写ICW4

? 状态读出逻辑预置为读IRR。

36


A0 0 D7 x D6 x

ICW1——初始化字
D5 x D4 1 D3 LTIM D2 x D1 D0 SNGL IC4

? LTIM: 触发方式
– =1 高电平触发 – =0 上升沿触发

? SNGL: 级连控制
– =1 单片 – =0 级连 ? IC4: ICW4控制 – =1 要写ICW4 – =0 不写ICW4(默认ICW4为全0)

37


A0 1 D7 T7 D6 T6

ICW2——中断向量码
D5 T5 D4 T4 D3 T3 D2 x D1 x D0 x

? T7~T3: 中断向量码的高5位
? T2~T0: 最低3位为中断源的序号IRn – 000~111分别对应IR0~IR7

– 由8259A根据中断源的序号自动填入
例如: 若ICW2命令字为48H=0100 1000B,则IR0的中断向量码为 48H=0100 1000B,IR7的中断向量码为4FH=0100 1111B,等 等。

38


A0 1 D7 S7 D6

ICW3——级连控制字
D5 S5 D4 S4 D3 S3 D2 S2 D1 S1 D0 S0

S6

? 主片的级联控制字
– Si=1 对应IRi线上连接了从片 A0 1 D7 0 D6 00 D5 0 D4 0 D3 ID2 D2 ID1 D1 ID0 D0

? 从片的级联控制字 – ID2~ID0 标识码,说明本从片连接到主片的哪个IR引脚上。 000~

111分别对应IR0~IR7。

39



ICW3——级连控制字(续)

? ICW3必须与主从片的连接关系一致: 例如,主片的IR4与从片的INT线连接,则主片的ICW3=10H, 从片的ICW3=04H。 ? 中断响应时,主片通过级连线CAS2-CAS0送出被允许中断的从片 标识码,各从片用自己的ICW3与CAS2-CAS0比较,二者一致的 从片才可发送中断向量码。

40


A0 D7

ICW4——中断结束方式字
D5 D4 0 SFNM D3 D2 D1 BUF M/S AEOI D0

1

D6 0 0

1

? SFNM: 特殊全嵌套
1 特殊全嵌套方式 0 一般全嵌套方式

? BUF: 缓冲方式
M/S: 主/从缓冲选择 BUF M/S 1 1 缓冲方式/主PIC 1 0 缓冲方式/从PIC 0 x 非缓冲方式/正常

? AEOI: 自动EOI
1 自动EOI方式 0 非自动EOI方式

41

(4)8259A的操作命令字OCW
? OCW用于设置8259的工作状态 ? 在初始化后写入 ? OCW的写入顺序可任意 ? 写入地址要求:

– OCW1必须写入奇地址端口(A0=1)
– OCW2,OCW3必须写入偶地址端口(A0=0)

42


A0 1 D7 M7 D6 M6

OCW1——中断屏蔽字
D5 M5 D4 M4 D3 M3 D2 M2 D1 M1 D0 M0

? Mi=1 中断请求线IRi被屏蔽(不允许中断) =0 允许该IRi中断
? OCW1将写入IMR寄存器。 ? A0=1时读OCW1可读出设置的IMR内容。

43


A0 0

OCW2——中断结束和优先级循环
D7 R D6 SL D5 EOI D4 0 D3 0 D2 L2 D1 L1 D0 L0

? L2~L0: 优先级编码 ? R: 优先级自动循环 ? SL: 指定优先级

? EOI: 结束中断命令

R SL EOI 0 0 1 非指定EOI命令(NSEOI), 全嵌套方式 0 1 1 指定EOI命令(SEOI),全嵌 套方式,按L2-L0编码复位ISR 1 0 1 NSEOI 命令,优先级自动循环 1 0 0 自动EOI,设置优先级自动循环 0 0 0 自动EOI,取消优先级自动循环 (固定优先级) 1 1 1 SEOI命令,按L2-L0编码循环 优先级(L2-L0设为最低优先级) 1 1 0 按L2-L0编码循环优先级(L2-L0 设为最低优先级)
44


A0 0 D7 0

OCW3——屏蔽方式和读出控制字
D6 D5 ESMM SMM D4 0 D3 1 D2 P D1 RR D0 RIS

? ESMM: 允许使能特殊屏蔽方式 ? SMM: 特殊屏蔽方式 ESMM SMM 1 1 特殊屏蔽方式置位 1 0 特殊屏蔽方式复位 0 x 非特殊屏蔽方式 P(Polling): =1 查询方式 =0 非查询方式 ? RR: 读寄存器 ? RIS: ISR/IRR选择 RR RIS 1 1 读ISR 1 0 读IRR 0 x 无效

45



OCW3(续)

? 查询方式允许8259A不工作于中断方式,而是以查询方式工作。 – CPU先写一个D2=1的OCW3,再对同一地址读入,即可得到 如下状态字节: I x x x x R2 R 1 R0

I=1表示有中断请求,中断请求号为R2-R0

此查询步骤可反复执行,以响应多个同时发生 的中断。
? 读IRR/ISR:写入此命令后,随后再对同一地址读,即可得到 IRR或ISR的内容。

46

5、8259A编程举例
? 按以下要求初始化8259A: – 接口地址为20H和21H;

– 中断为上升沿触发;单片8259A;不写ICW4;
– 与IR0-IR3对应的中断向量码为08H-0BH; – IR4-IR7不使用。 ? 根据要求,各初始化参数及工作参数如下: – ICW1 = 0001 0010 = 12H – ICW2 = 08H – OCW1 = 1111 0000 = 0F0H 中断向量码 中断屏蔽字

47

5、8259A编程举例(续)

初始化程序如下:
INIT8259A: MOV MOV OUT DX,20H AL,12H DX,AL ;A0=0,写ICW1 ;上升沿触发,单片,不写ICW4

MOV MOV OUT MOV OUT

DX,21H AL,08H DX,AL AL,0F0H DX,AL

;A0=1,写ICW2,OCW1 ;ICW2

;OCW1:屏蔽IR4-IR7

48

? 特殊屏蔽例: CLI MOV AL,68H OUT 0C0H,AL IN AL,0C2H OR AL,10H OUT 0C2H,AL STI

;IR4中断处理程序CLI ;OCW3:0 1 1 0 1 0 0 0 ;设置特殊屏蔽方式 ;屏蔽IR4;10H=0001 0000

;IR7请求,响应,返回

49

CLI IN AL,0C2H ;读出屏蔽字

AND
OUT MOV OUT STI

AL,0EFH
0C2H,AL AL,48H 0C0H,AL

;EFH=1110 1111清除IMR4
;OCW3:0 1 0 0 1 0 0 0 ;取消特殊屏蔽

;继续IR4中断服务
MOV OUT AL,20H 0C0,AL ;OCW2:0 0 1 0 0 0 0 0 (EOI)

IRET
50

6、 PC机中断程序设计
1)主程序 保存原中断向量 设置自己的中断向量 初始化堆栈指针 设置8259A的中断屏蔽字(其他的已由操作系统设置) STI 2)中断服务程序 保存所用到的寄存器内容 中断服务程序主体 恢复进入时保存的寄存器内容 发EOI命令(必要时可提前) STI(必要时可提前) IRET
51

中断程序举例
? PC机中主8259A的I/O地址为20H和21H,中断向量码为08H; ? 中断请求从IR6引入,故中断类型号为0EH; ? 主程序如下: ;保存原来的中断向量 mov ah,35h mov al,0eh ;中断类型码 int 21h ;取原中断向量(在es:bx中) mov save_ip,bx ;保存原来的中断向量 mov save_cs,es

52

;设置自己的中断向量 push ds mov dx,offset my_int mov ax,seg my_int mov ds,ax ;DS:DX的内容为my_int的首地址 mov ah,25h mov al,0eh int 21h ;设置自己的中断向量 pop ds ;初始化堆栈指针 mov sp,my_stack_top ;设置8259A的中断屏蔽字 in al,21h and al,10111111b ;开放IR6中断 out 21h,al sti …… <其他代码放在这里> ……

53

? 子程序如下:
my_int proc far pusha … <中断服务程序主体> … popa mov al,20h out 20h,al sti iret endp

;EOI命令,00100000B ;写OCW2

my_int

54

5.4 计数/定时接口
5.4.1 基本概念
计数定时接口电路需要讨论的问题: 1、计数容量 2、计数频率 3、计数过程 4、输出信号

55

2、定时功能的实现方法:
(1)软件延时
– 利用微处理器执行一个延时程序段实现

– 不用硬件,但占用CPU时间、定时精度不高,随系统时钟频率改变

(2)不可编程的硬件定时
– 采用分频器、单稳电路或简易定时电路控制定时时间 – 定时电路简单、定时时间可以在一定范围改变

(3)可编程的硬件定时
– 软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路
– 具有多种工作方式、能够输出多种控制信号
56

5.4.2 计数/定时器 8253
1、 8253的结构和工作原理
D7 D6 D5 D4 D3 D2 D1 D0 CLK0 OUT0 GATE0 GND 1 2 3 4 5 6 7 8 9 10 11 12 图 2-1 24 23 22 21 20 19 18 17 16 15 14 13 VCC WR RD CS A1 A0 CLK2 OUT2 (MSB) GATE2 CLK1 GATE1 OUT1
57

8253

8253 的引脚图

1)D0-D7:计算机总线;
_______

WR:计算机写命令OUT有效;
_______

RD:计算机读命令IN有效;
_______

CS :由地址总线高位(比如A2-A9)通过138译码器和与非门等组合而成
CS A1 A0 0 0 0 0 0 0 1 1 0 1 0 1 I/O地址 40H 41H 42H 43H 读操作RD 读计数器0 读计数器1 读计数器2 无操作 写操作WR 写计数器0 写计数器1 写计数器2 写控制字

58

2)A0,A1:分别对应3个计数器和控制字寄存器;
3)三个独立的十六位计数器:CPU可对其进行工作方式设定、计数次 数的预置。每当对CLK口的计数结束时,OUT口会有一个结束标志。 GATE门控信号,用于控制计数的进行。 4)计数启动:8253计数器的计数过程,可以直接用程序来启动,也可以设

置成接在GATE口外部电路的信号启动,分别称为软件启动和硬件启动。 预置寄存器

CLK
减1计数器

OUT

GATE
输出锁存器
59

计数器的3个引脚说明:
?

CLK时钟输入信号

在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值 减1
?

GATE门控输入信号

控制计数器工作,可分成电平控制和上升沿控制两种类型
?

OUT计数器输出信号

当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号 计数初值存于预置寄存器; 在计数过程中,减法计数器的值不断递减, 而预置寄存器中的预置不变。 输出锁存器用于写入锁存命令时,锁定当前计数值
60

? ? ? ?

2、 8253的编程

(1)写方式控制字
D7 D6 D5 D4 D3 D2 D1 D0

计数器

读写格式

工作方式

数制

00 01 10 11

计数器0 00 计数器1 01 计数器2 10 非法 11

000 计数器锁存命令方式0 0 二进制 001 只读写低字节 方式1 1 十进制 010 只读写高字节 方式2 011 方式3 先读写低字节 方式4 100 后读写高字节 方式5 101

控制字写入控制字I/O地址(A1A0=11)
61

3、 8253的工作方式
(1)方式0:计数结束中断 ① WR 方式0 ② ④ 4 ⑤ ⑥

CLK
GATE 4 3 2 1 0 OUT
GATE=1 允许计数;GATE=0/下降沿 禁止计数 CPU 写计数器操作—— 写低字节后终止上次计数, 写高字节后开始新的计数

④ ② ⑥ ① ⑤ 计 数 设 计设 计 值 定 数 定 数 送 结计 过工 入 数 束 作 程 计 初 方 数 值 式 器
62

(2)方式1:可编程单稳脉冲


① ② 4 ④ ⑤ ⑥

方式1
WR CLK

GATE


4
OUT

3

2

1

0

⑥ ② ⑤ ① 计 ③ 数 计 设 计 设 值 数硬 数定 送定 结件 过计 入工 束启 程数 计作 动 初 数方 值 器式
63

GATE=正跳变 1.启动计数 2. 下个脉冲后OUT=0

(3)方式2:频率发生器(分频器) 方式2 4 WR CLK GATE

4 3 2 1 0 4 3 2 1 0 4 3 2 1 0 4 3 2 1 0

OUT
GATE=1 允许计数; GATE= 0/下降沿 禁止计数, OUT=1; GATE=正跳变, 启动计数

64

(4)方式3:方波发生器 方式3 4

WR CLK
GATE 4 3 2 1 0 4 3 2 1 0 4 3 2 1 0 4 3 2 1 0

OUT
GATE=1 允许计数; GATE= 0/下降沿 禁止计数, OUT=1; GATE=正跳变, 启动计数
65

(5)方式4:软件触发选通信号
方式4 WR CLK GATE 4 3 2 1 0 OUT 3 2 3 2 1 0

4

3

GATE=1 允许计数;GATE=0 禁止计数

66

(6)方式5:硬件触发选通信号 方式5 WR CLK GATE 4 3 2 1 0 OUT
GATE=正跳变 启动计数
67

4

3

3 2 1 3 2 1 0

各种工作方式的输出波形 方式 0 方式 1 方式 2 方式 3 方式 4 方式 5
N N N 0 N 0

0

N
N/2 N

1 0/N
0/N N/2

1 0
0 0 1

0 1

N

0 1

68

写计数初值
8253计数初值的1到FFFFH+1或者1到9999+1。当初值为零时,要重 新减到零才算结束,因此零用来表示最大的计数初值。

读计数初值
(1)以普通对计数器端口读的方法取得当前计数值 可以用GATE无效或者阻断时钟输入等方法,使计数器暂停计数,保 证CPU读到稳定的数值。 (2)锁存计数器的当前计数值 用一个方式控制字,其D5D4=00,这个命令一写入后,把当前计数 值锁定寄存器,计数器可以继续工作,CPU可以读出计数值。

69

启动计数器 方式 0 方式 1 方式 2 方式 3 方式 4 方式 5 软件 硬件 软/硬件 软/硬件 软件 硬件

中止计数 GATE=0 / GATE=0 GATE=0 GATE=0 /

自动重复 无 无 有 有 无 无

更新初值 立即有效 下一轮有效 下一轮有效 下半轮有效 下一轮有效 下一轮有效

OUT 波形 N ??? N ??? N ??? 2 N/2 N ??? 1 N ??? 1 0 0 1 N/2 0 0 N

通常,对于控制专业应用来说,用于计数时,常用方式0;
用于定时则常用方式2或3。

70

例:8253的应用实例
原理:8253的CLK2接到1.19MHz的信号源,CNT2工 作于自动重复方式,产生连续600Hz的连续方波;当 8255的PB0=1时CNT2开始工作; PB1=1, PB0=1时 场门打开,经过滤波发声;8253的地址为:40H~43H

71

START: MOV AL, 0B7H; CNT2的控制字 OUT 43H, AL ; 043H对应控制字寄存器地址

MOV AX, 1983; 计数初值(十进制) OUT IN 42H, AL ; 042H对应计数器2的地址 AL, 61H ; 取8255的PB口

MOV AH, AL ; 保护 OR AL, 03 ; 设PB1=PB0=1

OUT 61H, AL ; 使扬声器发声 SUB CX, CX ; 使循环计数值最大 L: LOOP L ; 延时循环

MOV AL, AH ; 恢复8255的PB口 OUT 61H, AL ;
72

5.5可编程并行I/O接口芯片8255
5.5.1 8255A的组成及功能
1、8255A的引脚及结构
A1 A0端口选择线,共占用4个端口地 址,分别是A、B、C三个数据端口 以及一个控制寄存器端口,这四个 口用A1A0的状态组合来进行选择。
PA3 PA2 PA1 PA0 RD CS GND A1 A0 PC7 PC6 PC5 PC4 PC0 PC1 PC2 PC3 PB0 PB1 PB2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 PA4 PA5 PA6 PA7 WR RESET D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB6 PB5 PB4 PB3
73

8255A

图 2-12

8255A 的引脚

表 2-3 CS 0 0 0 0 0 0 0
_______

8255A 端口的读写信号 RD 0 0 0 1 1 1 1 WR 1 1 1 0 0 0 0 寄存器读写 读A口 读B口 读C口 写A口 写B口 写C口 写控制寄存器

A1 0 0 1 0 0 1 1

A0 0 1 0 0 1 0 1

CS :片选信号,低电平有效; WR ? 0 :从CPU 写到8255A ;OUT有效 RD ? 0 :从8255A读到CPU;IN有效
_______
_______

RESET :复位信号,高电平有效。复位后,控制寄存器被清除;A、B、

C口置成输入方式且锁存器全清零

74

例如:8255A的CS片选为200~203H,PA口地址为200H; PB口 地址为201H; PC口地址为202H;控制寄存器端口地址为203H。

WR:计算机写命令OUT有效; 例如:MOV DX,203H;
OUT DX,AL;写控制字
_______

_______

RD:计算机读命令IN有效; 例如:MOV DX,201H;
IN AL,DX;读PB口

并行I/O接口三端口: PA7~PA0,PB7~PB0 及PC7~PC0 A口----I/O锁存器和缓冲器; B口----I/O锁存器和缓冲器;输入时可以不锁存; C口----输入时只有缓冲无锁存;输出时锁存和缓冲;
75

A、B、C口输出----输出锁存器内容由CPU用输入指令读出;

用法:
1) A、B、C口---------三个独立的8位数据端口; 2) A、B口----------- 8位数据端口; C口-------------- A、B口与外设联络用的状态、控制信号; 3) A口、C口高四位---共同组成12位A组数据端口; B口、C口低四位---共同组成12位B组数据端口;

76

2、8255A的工作方式和控制字
方式0--基本输入或输出方式,既无须联络就可以直接进行的I/O。 在此方式下,A口、B口、C口的高、低4位都可分别设置为输入或输出。

方式1--选通I/O。此时接口和外设之间须联络信号进行协调。
只有A、B口可工作在方式1; C口某些线规定为A或B口与外设间的信号联络线,余下线只能工作方式0

方式2--双向I/O方式。同一端口既可输入也可输出。
只有A可工作在方式2; C口的5条I/O线-------A口与外设间的双向传送联络线,

3条I/O线-------作为B口方式1的联络线;
也可和B口一起成为B口方式0的I/O线。 在一般的控制应用中,常用方式0
77

D7 1 特征位 0 0 方式 0 0 1 方式 1 1 ? 方式 2

D6

D5

D4

D3

D2

D1

D0

A 口 C7~4 B 口 C3~0 A组 B组 工 方 作 式 I/O I/O 工 方 作 式 I/O I/O

? ? ? ?

?0 ?1 ?
0 输出 ? 1 输入 ? ? 0 输出 ? 1 输入 ? ?

输出 输入 输出 输入

?

?0 ?1 ? ?

? 0 方式 0 ? 1 方式 1 ?

图 2-14

8255A 的方式控制字

最高位D7----控制字的特征位,必须为“1”; D6~D3-------控制A口及C口高四位(A组); D2~D0-------控制B口及C口低四位(B组);

78

D7 0 特征位

D6 x

D5 x

D4 x

D3

D2

D1

D0 写入 内容

写 入位 码 编

PC0
PC1

0
0

0
0

0
1

?0 ?1 ?

写入 0 写入 1

PC2 PC3
PC4 PC5 PC6 PC7

0 0
1 1 1 1

1 1
0 0 1 1

0 1
0 1 0 1

C口位控字
79

3、8255A的各种工作方式的功能
(1)方式0----A、B、C三口作数据通道; 输入时:无锁存只有缓冲; 输出时:都有锁存;

控制字:8AH=1 0 0 0 1 0 1 0
D7--------1,特征位; D6 D5----00,方式0;

D4--------0,A口输出;
D3--------1,C口高四位输入; D2--------0,B口工作方式0; D1--------1,B口输入; D0--------0,C口低四位输出;

80

① 给输出设备送数前--通过PC7查询设 备状态;若ready从A口送出数据; 再从PC1发选通信号使输出设备接受 数据。

图5.46 附加联络信号的方式0 I/O

② 给输入设备送数前----通过PC6查询 设备状态;若ready从B口送入数据; 再从PC0发清除信号,以便输入后续 字节。(P323)

81

(2)方式1----A、B工作于方式1,C口的某些线作状态/控制用 ① 方式1输入

A口工作于方式1输入,PC5~PC3控制线; B口工作于方式1输入,PC2~PC0控制线;

图5.47 方式1输入的控制字及 信号

82

_______

STB
IBF

----选通信号,输入,低电平有效;
__________ __

STBA
IBFA

PC4, STBB PC5;IBFB

__________ __

PC2 PC1

----输入缓冲器满信号,输出,高电平有效。

INTR----中断请求信号,输出,高电平有效;
在INTE=1且IBF=1条件下,由选通信号后沿产生; PC3 INTRA; PC0 INTRB

INTE----中断允许位; INTE=1 允许中断;INTE=0 禁止中断;

83

方式1输入 1)A组方式控制字
特征位 0 1 方式 1

D7 1

D6 0

D5 1

D4 1

D3 1/0

D2 ?

D1 ?

D0 ?

端口 A 输入
D7 1 D6 ? D5 ? D4 ? D3 ?

PC7,6 I/O 控制 0 输出 1 输入
D2 1 D1 1 D0 ?

2)B组方式控制字

方式 1

端口 B 输入

3)读入C口状态,各位表现的状态

1

1

D7
I/O

D6
I/O

D5
IBFA

D4
INTEA

D3
INTRA

D2
INTEB

D1
IBFB

D0
INTRB

84

STB

tST

tSTB
IBF

tSIT tRIT tPH

tRIB

INTR
RD 来自外设的 输入数据

tps
1方式输入时工作时序图
85



方式1输出

A口工作于方式1输出,PC7、PC6、PC3控制线; B口工作于方式1输出,PC2~PC0控制线;

图5.48 方式1输出的控 制字及信号

86

OBF ----输出缓冲器满,输入,低电平有效;
__________ ___

_______

OBFA
_______

PC7,OBFB

_____________

PC1

ACK----应答信号,输出,低电平有效。
__________ ___

ACKA
在INTE=1且
PC3

PC6;
_______

__________ ___

ACKB

PC2

INTR----中断请求信号,输出,高电平有效;

OBF =1条件下,由应答信号后沿产生;
PC0 INTRB

INTRA;

INTE----中断允许位; INTE=1 允许中断;INTE=0 禁止中断;

87

方式1输出 1)A组方式控制字
特征位 0 1 方式 1

D7 1

D6 0

D5 1

D4 1

D3 1/0

D2 ?

D1 ?

D0 ?

端口 A 输出

PC4,5 I/O 控制 0 输出 1 输入

2)B组方式控制字
D7 1 D6 ? D5 ? D4 ? D3 ? D2 1 D1 0 D0 ?

3)读入C口状态,各位表现的状态
1 1

方式 1

端口 B 输出

D7 OBFA

D6 INTEA

D5 I/O

D4 I/O

D3 INTRA

D2 INTEB

D1 OBFB

D0 INTRB

88

WR
OBF

tAOB tWOB tWIT

INTR
ACK

tAK
输出

tAIT

tWB
1方式输出时工作时序
89

(3)方式2----只有A口工作于双向的I/O方式;



A口以方式2输出数据时

仅在应答信号有效时出现在PA7~PA0,否则为高阻状态; 应答信号的前沿使8255A输出数据,后沿使数据锁存在外设中。 ② ③ A口方式2的I/O共用一个中断请求INTR信号; A口方式2时,B组选择方式0, PC2~PC0可独立选择I/O; B组选择方式1, PC2~PC0成为B口的联络线;

90

方式2 1)控制字

D7 1

D6 1

D5 ?

D4 ?

D3 ?

D2 1/0

D1 1/0

D0 1/0

A 口双向

B 口方式 0 方式 0 1 方式 1

PC2~0 I/O 控制 0 输出 1 输入

2)读入C口状态,各位表现的状态

D7 OBFA

D6 INTE1

D5 IBFA

D4 INTE2

D3 INTRA

D2

D1

D0

91

≥1

PC3 PA7~0

INTRA

8
OBFA ACKA STBA IBFA I/O 3

& INTE 1

PC7 PC6

&

PC4 WR
RD

INTE 2

PC5 PC2~0

2方式的联络信号线定义
92

数据从CPU到8255A WR

OBF
INTR ACK STB

tAOB tWOB

tST
tSIB tAD tKD tRIB tPH
数据从8255A到外设 数据从外设到8255A 数据从8255A到CPU 2方式时序关系
93

IBF 外设数据线 RD

tPS

例:8255A的应用--打印机接口电路
8255A PA0~7 打印机插座 DATA0~7 STB BUSY 地

开始

8255A 初始化
N

BUSY=0?
Y

CPU

PC6 PC2 地

送 数 送 STB 内存+1 字节数-1
N

送完?
Y
结束
94

工作过程:
当主机要打印机打印字符时,先查询打印机信号BUSY信号,若 打印机正在处理一个字符或正在打印一个字符时,则BUSY=1;否则 BUSY=0。 当查询BUSY=0时;主机可以通过8255A向打印机输出一个字 符,需给打印机的STB端一个负脉冲,以便将字符选通到打印机的 输入缓冲器,打印机就可以打印该字符。 主机要打印的字符通过8255A的PA口送给打印机; 打印机的信号BUSY通过8255A的PC2传送给主机; 8255A的PC6用以输出选通脉冲。 8255A的端口地址:200H~203H

95

START: MOV AL, 81H ; 输入控制字81H=1000 0001 MOV DX, 203H

OUT DX, AL ;
MOV AL, 0DH OUT DX, AL ; ; 写入C口的位控字0DH=0000 1101

MOV DX, 202H
L: IN AL, DX ; 读取C口的状态值 ; 若BUSY=1则回去继续读取C口状态 ; 若BUSY=0则将CL中的字符送AL

TEST AL, 04H JNZ L

MOV DX, 200H ; OUT DX, AL ; 将字符送到A口
96

MOV AL, 0CH ; 使STB为低电平0CH=0000 1100选通

OUT DX, 203H ;
OUT DX, AL; MOV AL, 0DH

; 使STB为高电平0DH=0000 1101恢复原始状态
OUT DX, AL; RET

97


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