当前位置: 首页 > >

微机接口第08章(定时器)

发布时间:

第 8 章

定时计数控制器

1

第8章 定时计数控制器
?

教学重点
?

?
?

8253 的引脚和 6 种工作方式 8253 的编程 8253 在IBM PC系列机上的应用

2

定时器和计数器
?

定时控制在微机系统中极为重要
?

?

定时器由数字电路中的计数电路构成,通过记 录高精度晶振脉冲信号的个数,控制产生准确 的时间间隔 一般,该计数电路也可记录引脚输入的脉冲信 号(可随机产生),反映输入脉冲的个数,所 以,定时器又常被称为“定时/计数器”

3

定时功能的实现方法
?

?

用软件实现延时——利用微处理器执行一个延 时程序段来实现 用硬件实现定时
?

?

采用不可编程器件(不灵活)——如分频器、 单稳电路、简易定时电路; 采用可编程器件(灵活)——采用可编程的定 时/计数器芯片来构成定时电路, 通过软件设 计,可在不同的条件或时段采用不同的定时策 略。

4

8.1 8253/8254定时计数器
?

8253/8254 有3个独立的计数器通道,每个计数

通道16位,可进行:
? ?

定时——对引脚上输入的周期性时钟信号进行计数 计数——对引脚上输入的非周期性脉冲信号进行计数

? ?

每个计数器有 6 种工作方式 可按二进制或十进制(BCD码)进行计数 8254是8253的改进型二者差别很小

5

8.1.1 8253/8254的内部结构和引脚

6

8253/8254的地址分配
?

8253/8254 有4个I/O端口:
?

?
? ?

A1A0=00 A1A0=01 A1A0=10 A1A0=11

数据口(CH0送计数初值,读计数) 数据口(CH1送计数初值,读计数) 数据口(CH2送计数初值,读计数) 控制口(送控制命令)

7

计数通道的内部结构示意
预置寄存器
CLK GATE

减1计数器

OUT

输出锁存器

8

计数器工作描述
? 预置寄存器——用于存放计数初值和重装初值, 注意:
? 计数初值为0时,计数值最大(65536/10000) ? 计数初值为1时,计数值最小(1/1) ? 预置寄存器中的预置值在计数过程中不会改变。

? 减法计数器——CLK引脚每收到一个脉冲,减 法计数器将减1。注意:
? 可采用二进制或十进制(BCD码)进行计数

? 输出锁存器——用于在接到命令时锁存当前计 数,这样,CPU在读取时,该值将不再变化
9

每个计数通道的3个引脚
?

CLK(时钟)——输入引脚,在计数过程中,此引脚 上每输入1个时钟信号(下降沿),计数器的计数值 将减1 GATE(门控)——输入引脚,控制计数器工作:
? ?

?

开通/关闭计数——高/低电*时开通/关闭计数通道 触发/重触发——上升沿产生触发或重触发

?

OUT(输出)——输出引脚,根据设置工作方式的不 同, OUT引脚可输出单个波形或连续的波形。
?

一般是在计数过程结束(计数归0)时,引脚输出 发生跳变

10

8.1.2 8253/8254的工作方式
?

方式0——计数结束中断(阶跃)

?
? ? ? ?

方式1——可编程单稳(负脉冲,宽度可调)
方式2——连续负脉冲发生器(脉宽为1) 方式3——连续方波发生器 方式4——软件触发选通(单脉冲,脉宽为1) 方式5——硬件触发选通(单脉冲,脉宽为1)

11

方式0 计数结束中断

写入方式0 写入4 -WR CLK GATE 4 OUT 3 2 1 0 写入3

②③





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

? GATE:开关作用
12

方式1 可编程单稳脉冲

写入方式1 -WR CLK GATE


写入4







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

③ 4
OUT

3

2

1

0

? GATE:触发作用
13

方式2 频率发生器(分频器)
写入方式2 写入4 -WR CLK GATE 4 3 2 1 4 1 0 3 2 1 0

4 3
0

2 1

0 4 3 2

OUT

? GATE:开关作用
14

方式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:开关作用 ? 初值N为偶数:N/2脉冲数输出高, N/2脉冲数输出低 ? 初值N为奇数:(N+1)/2脉冲数输出高, (N-1)/2脉冲数输出低
15

方式4 软件触发选通信号
写入方式4 写入4 -WR 写入3

CLK GATE
4 3 2 1 0 OUT 3 2 3 21 0

? GATE:开关作用
16

方式5 硬件触发选通信号
写入方式5 写入4 -WR CLK GATE 4 3 2 1 0 3 2 1 3 2 1 0 写入3

OUT

触发

触发

重触发:装计数值

? GATE:触发/重触发作用
17

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

0
N 0 N N N/2 N N
连续波形

N 0 1 0 N/2 0 0 1

1 0/N 0/N

0 1

N

0 1

18

8.1.3 8253/8254的编程
?

加电后8253的工作方式不确定,必须经初始化 编程后才能正常工作。初始化编程过程:
? ?

?
?

先写入控制字 再写入计数初值 方法1:各通道依次进行, 方法2:先写所有通道的控制字,再写所有通道的计 数初值 一般,先用命令将当前计数锁存在通道的锁存器中 然后,可分两次读取16位的计数值

?

工作中可随时读取动态的计数值:
? ?

?

8254 新增的读回命令

19

1 写入方式控制字
D7 D6 D5 D4 D3 D2
工作方式

D1

D0
数制

计数器

读写格式

00 01 10 11

000 方式0 00 计数器0 计数器锁存命令 001 方式1 01 计数器1 只读/写低字节(写时高字节写0) 0 二进制 010 方式2 10 计数器2 只读/写高字节(写时低字节写0) 1 十进制(BCD) 011 方式3 11 非法 后读/写高字节 先读/写低字节,方式4 100 101 方式5

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

2 写入计数初值
?

选择二进制时
? ?

计数范围:1H~10000H 初值写入0时计数最大(65536/10000H) 计数范围:1~10000 初值写入0时计数最大(10000)

?

选择十进制(BCD码)时
? ?

? 计数初值要写入各计数通道(I/O地址) ? 控制字要写入同一控制口
21

3 读取计数值
?

?

对8位数据线,读取16位计数值,需分两次进行 由于计数随时进行,故应将当前计数先行锁存, 然后再从容读取:
? ?

向控制字I/O地址写入锁存命令 从计数器I/O地址读取被锁存的计数值 只读低8位 只读高8位 先低后高

?

3 种读取方式:
? ? ?

读取计数值时要注意格式和数制
22

8.2 8253在IBM PC系列机上的应用
-IOR — RD -IOW — WR A0 — A0 A1 — A1 -T/C CS — CS D0~D7 1.19318MHz +5V D0~D7 CLK0 CLK1 CLK2 GATE0 GATE1 GATE2

方波
OUT0
+5V

接至8255的IRQ0 (# 8) (55ms)

8253
D OUT1 Q CLK

连续负脉冲
DRQ0接至DMA控制器 (15us) DACK0 BRD

方波
OUT2

PB0
PB1

接至扬声器驱动器 (约900Hz)

23

8.2.1 定时中断和定时刷新
?

阅读初始化程序段,看计数器0 触发55ms定时中断的作用 将计数器1用作对DRAM定时刷 新(15us)的触发信号,考虑如 何编写初始化程序段
PC机中8253的用法

?

24

计数器0:定时中断
? ?

?

?

?

工作于方式3,计数初值:0,门控端GATE常有效 输出方波频率18.206Hz=1.19318MHz/65536,周期约为 55ms。 OUT0接8259A的IRQ0端,用作中断请求信号。每秒 钟产生18.2次中断请求,即每隔55ms(54.925493ms) 申请1次中断 DOS系统利用计数器0和08号中断实现日时钟的计时 功能 DOS系统将1CH软中断留给用户使用,即在08号中断 服务中安排了1条 int 1ch 指令

25

CH0 55mS 定时中断

mov al,36h out 43h,al mov al, 0 out 40h,al out 40h,al

;计数器0为方式3(连续方波) ;采用二进制计数,先低后高写入计数值 ;写入方式控制字 ;计数值为0 ;写入低字节计数值 ;写入高字节计数值

PC机上8253地址:40h-43h
26

8253初始化

计数器1:定时刷新DRAM
?

需要重复不断(15uS)提出刷新请求

门控端常有效,可选方式2或方式3
?

2ms内必须刷新128次,即每15.6?s刷新1次 计数初值为18 (频率为1.19318MHz/18周期为
15.09us )

27

CH1 15uS

定时刷新DRAM

mov al,54h out 43h,al mov al,18 out 41h,al

;计数器1为方式2(连续负脉冲) ;采用二进制计数,只写低8位计数值 ;写入方式控制字 ;计数初值为18 ;写入计数值

PC机上8253地址:40h-43h
28

8253初始化

8.2.2 扬声器的发声及控制
?

计数器2 的输出频率控制PC机中扬声器的音调高低, 通过初始化设置可加以改变。

?

?

计数器2 工作于方式3(连续方波),经滤波后可得 到*似的正弦波,以此驱动扬声器发声(单音) 扬声器同时还受控于并行接口(8255芯片),必须使 8255的输出端 PB0 和 PB1 同时输出高电*,与门才开 通,扬声器才能发声,8255 B口的地址为 61H。
? ?

in al,61h out 61h,al

;读8255 B口 ;写8255 B口

29

CH2 900Hz
speaker proc push ax mov al,0b6h out 43h,al pop ax out 42h,al mov al,ah out 42h,al ret endp

频率设置子程序

;入口参数(发声频率) ;方式3(连续方波) ;写入控制字
;写入低8位计数值 ;写入高8位计数值

speaker

PC机上8253地址:40h-43h
30

扬声器控制

开扬声器子程序
speakon proc push ax in al,61h or al,03h out 61h,al pop ax ret endp ;无入口参数

; PB1PB0=11B,其他位不变

speakon

PC机上8255地址:60h-63h
31

扬声器控制

关扬声器子程序
speakon proc push ax in al,61h and al,0fch out 61h,al pop ax ret endp ;无入口参数

; PB1PB0=00B,其他位不变

speakon

PC机上8255地址:60h-63h
32

扬声器控制

主程序
;数据段 dw 1193180/600 ;代码段 mov ax,freq call speaker call speakon mov ah,1 int 21h call speakoff

freq

;600为发声频率(音调)

;设置扬声器音调 ;打开扬声器开关 ;等待按键 ;关闭扬声器开关

33

扬声器控制

8.2.3 可编程硬件延时
?

PC/XT/AT提供的定时中断资源
? ?

?

?

采用8253/8254定时芯片 08H号硬中断——8253/8254通道0产生,引向8259的IR0, 8253/8254 的CLK频率为1.19318MHz,每55ms发生1次 INT 1AH——BIOS中断功能调用(设置/读取时钟),以 55ms为单位 INT 1CH——报时中断(用户),被嵌在08H号中断服务中 采 用 146818 定 时 芯 片 并 配 有 后 备 电 池 , 提 供 周 期 中 断 (976us)和报警中断两个输出. 70H号硬中断——146818周期中断输出引向8259(2)的 IR9 , 该 中 断 被 称 为 实 时 时 钟 中 断 , 每 976us=1/1024s (约1mS)发生1次 INT 1AH——扩充了操作实时时钟的功能 (子功能号2~7) INT 15H——BIOS中断功能调用,以976us为单位

?

PC/AT以后的PC机新增加的定时中断资源
?

?

? ?

34

8.2.3 可编程硬件延时
?

日时钟中断(INT 1AH)——每隔55ms中断 一次。
?

可以利用它编写一段不随系统时钟频率变化的固定 延时程序。 由于日时钟中断的时间单位是55ms,所以无法实 现更短时间的延时

?

?

实时时钟中断(INT 15H)——它的定时单位 约为1ms(976 ?s=1/1024s)

35

日时钟
;延时5秒开始 mov ah,0 int 1ah add dx, 90 mov bx,dx int 1ah cmp bx,dx jne repeat ……

repeat:

;子功能号,读时钟 ;BIOS中断 ;再加5秒(5×18=90) ;期望值送bx ;再读日时钟 ;与期望值比较 ;不等,则循环 ;相等,延时结束 每秒发生 08h 号中断18.2次

可编程硬件延时 36

实时时钟
;延时2ms开始 mov cx,0

;入口参数cx.dx单位us ;实际以976us为单位,否则将失败 mov dx,1952 ;延时1952us=976?s×2 ;应为976的整数倍 mov ah,86h ;86h为子功能号 int 15h ;返回时,定时时间到

37

可编程硬件延时

8.3 扩充定时计数器的应用
例题8.2 利用扩充定时计数器对外部事件进行计数 例题8.3 为A/D转换电路提供可编程的采样启动信号

?

?

38

例8.2 利用扩展的定时器
对外部事件进行计数
-IOR -IOW A0 A1
D0~D7 — -RD — -WR — A0 — A1 D0~D7 OUT0 -CS IRQ GATE0 8253 CLK0 外部事件脉冲 +5V

A3~A9 AEN

译码 电路

I/O地址 200H~203H

39

初始化程序段

mov dx,203h mov al,10h out dx,al mov dx,200h mov al,64h out dx,al

;设置方式控制字 ;00 01 000 0B

;设置计数初值 ;计数初值为100

40

例8.2

例8.3

A/D采样/转换时序

1、用手动控制启动A/D转换 2、每启动一次产生一个单稳,用单稳有效时间来完成采样 3、在采样时间的末端,启动A/D转换 OUT1 OUT1
作定时器0的门控 控制采样持续时间

采样时间

OUT0
OUT0 启动转换

41

例8.3 提供A/D采样控制和启动信号
求 计 数 值 cnt0 CLK0 方式2 GATE0 连续 负脉冲 OUT0 CLK1 cnt1 方式1 GATE1 单稳 OUT1 CLK2 A0 cnt2 A1方式3 GATE2 方波 OUT2 -CS

采样转换频率 F/cnt0
启动转换

时钟源 频率 F
+5V

注意 地址 连接

A1 A2

方波

启动 控制

I/O地址 200H~207H

8253
CH0的输出频率: F/cnt0 (连续负脉冲) CH0的门控端:CH2、CH1级联后控制, 采样持续时间: (cnt1*cnt2)/F(单稳)

42

初始化计数器0

mov al,14h ;00 01 010 0B out 206h,al mov al, cnt0 ;CH0分频系数 out 200h,al

43

例8.3

初始化计数器1

mov al,52h out 206h,al mov al, cnt1 out 202h,al

;01 01 001 0B ;CH1分频系数

44

例8.3

初始化计数器2

mov al,96h out 206h,al mov al, cnt2 out 204h,al

; 10 01 011 0B ;CH2分频系数

45

例8.3

第8章教学要求
1. 掌握8253引脚,尤其是CLK、OUT、 GATE引脚的功能 2. 掌握8253的 6 种工作方式、编程和在 IBM PC系列机上的应用

46

作业
?

*题8
8.2 8.3 8.4

(P203)——
8.6 8.7

47

实验3

计数器/定时器实验

?

?

不用实验台,就可以实现发声程 序:参考例题8.1 如果要实现第⑶项实验要求,应 该利用中断实验的中断服务程序

提 示

48




友情链接: