第七章 定时与计数技术

41
1 第第第 第第第第第第第

Upload: sirvat

Post on 04-Feb-2016

57 views

Category:

Documents


0 download

DESCRIPTION

第七章 定时与计数技术. 第一节 概 述. 一、定时与计数. 1 、定时 目的: 提供时间基准。. 分类: 内部定时、外部定时。. 外部定时实现: 已知 — 一个固定频率的脉冲,所需定时时长; 参数 — Num= 脉冲频率*所需定时时长; 工具 — 计数器 ( 每过一个脉冲 Num 减一 ) ; 结果 — 计数器 Num 为零时定时时间到。. 2 、计数 目的: 计算给定时间内脉冲个数。 计数与定时本质上是一致的,但复杂一些。. 实现: 已知 — 一个固定频率 (f1) 的脉冲,一个需计数 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第七章 定时与计数技术

1

第七章 定时与计数技术

Page 2: 第七章 定时与计数技术

2

第一节 概 述一、定时与计数1 、定时 目的:提供时间基准。 分类:内部定时、外部定时。 外部定时实现: 已知—一个固定频率的脉冲,所需定时时长; 参数— Num= 脉冲频率 * 所需定时时长; 工具—计数器 ( 每过一个脉冲 Num 减一 ) ; 结果—计数器 Num 为零时定时时间到。

Page 3: 第七章 定时与计数技术

3

2 、计数 目的:计算给定时间内脉冲个数。 计数与定时本质上是一致的,但复杂一些。 实现:已知—一个固定频率 (f1) 的脉冲,一个需计数 目标脉冲,所需计数时长 (t) ; 参数—定时初值 Num1=f1*t , 计数初值 Num2= 计数器允许的最大值; 工具—计数器 1( 到零时控制计数器 2 停止 ) ; 计数器 2( 连接需计数脉冲 ) ; 结果—计数器 1 的 Num1 到零时,读计数器 2当前计数值 Num ,计数值 =Num2-Num , 需计数脉冲频率 =(Num2-Num)/t 。

Page 4: 第七章 定时与计数技术

4

二、定时方法1 、软件定时 通过软件指令周期方法定时,如执行循环程序。 增加 CPU 负担,通用性差,一般用于短延时。2 、不可编程硬件定时 采用中小规模 IC 构成。 不增加 CPU 负担,成本低,定时值不可改变。3 、可编程硬件定时 采用可编程定时 / 计数器完成,软件可改变计数值。 可编程定时 / 计数器: Intel8253/8254 等。

Page 5: 第七章 定时与计数技术

5

三、定时 / 计数器基本原理1 、内部逻辑

16 位当前计数值锁存器OL

16 位减 1 计数器CE

16 位计数初值寄存器 CR

OUT

MSBLSB

锁存后读出

MSBLSB装入

CTRLCLKGATE

2 、工作原理 初始化 ( 工作方式、初值 ) ,输入→输出的控制

回 15页

功能特性— (CR)=fCLK/fOUT

Page 6: 第七章 定时与计数技术

6

第二节 Intel 8254 8253→8254→82801BA 。一、 8254-2 基本功能 3 个独立的 16 位定时 / 计数器 (T/C) ; 每个 T/C 功能: 可按二、十进制方式计数; 有 6 种不同的工作方式; 最高频率 10MHz ; 8253—2MHz , 8253-5—5MHz , 8254—8MHz , 8254-5—5MHz , 8254-2—10MHz , 82801BA—14.31818MHz 有读回状态功能 (8253 没有 ) 。

Page 7: 第七章 定时与计数技术

7

二、 8254-2 结构与引脚1 、内部逻辑

总线缓冲器 [8 位 R/W] :写工作方式、计数初值, 读当前计数值等。

Page 8: 第七章 定时与计数技术

8

2 、外部引脚

(1) 译码: CS 与 A1A0 : (2) 读 / 写: RD 、 WR ; (3) 外部信号: CLK 、 OUT 、 GATE 。 不同工作方式 OUT 波形不同

Page 9: 第七章 定时与计数技术

9

3 、 CPU 操作功能及命令 I/O 端口地址: 8254 提供 4 个端口 ( 使用A1A0) ; 命令:初始化—设置工作方式、写计数器初值; 操 作—重写计数器初值、写锁存信息; 读当前计数值、读当前状态 I/O 端口与命令冲突的解决方法: ① 特征位—用数据的某几位表示操作的类型; 如: MOV AL , 83H MOV AL , 03H OUT 63H , AL 与 OUT 63H , AL 表示不同操作 ② 间接访问—两条命令完成一个操作 ( 不常用 ) 。 如: OUT+IN/OUT 命令

回下页

Page 10: 第七章 定时与计数技术

10

操 作 特征位 时序D7D6

0 1 0 0 0 计数初值写入 0# 计数器 ** 无0 1 0 0 1 计数初值写入 1# 计数器 ** 无0 1 0 1 0 计数初值写入 2# 计数器 ** 无0 1 0 1 1

向 T/C 控制 REG 写控制字

00~10 无锁存计数值 / 状态命令 11 无

0 0 1 0 0读 0# 计数器当前计数值 无 前一锁存命令

有效时,读取的是锁存对应的类型值;否则读取的是当前计数值。

读 0# 计数器状态 无0 0 1 0 1

读 1# 计数器当前计数值 无读 1# 计数器状态 无

0 0 1 1 0读 2# 计数器当前计数值 无读 2# 计数器状态 无

0 0 1 1 1 无操作1 * * * * 禁止使用0 1 1 * * 无效操作

CS RD WR A1 A0

8254 命令关系表:

转上页 回下页 回 12页 回 14页 回 15页 回 16页

Page 11: 第七章 定时与计数技术

11

三、 8254-2 命令及编程1 、设置工作方式命令—写工作方式控制字

工作方式控制字格式 端口地址: A1A0=11 ; 特征位: D7D6=00~10 为所选 T/C 设置工作方式命令, 11 为所有 T/C 读回命令。 读写格式: D5D4=01~11 ,只写 8 位时另 8 位自动清零。 例 1 : MOV AL , 01110100B ; T/C1 ,先低后高字节 OUT 43H , AL ;方式 2 ,十六进制方式

回 13页 转第 2章转上页

Page 12: 第七章 定时与计数技术

12

2 、写计数初值命令 端口地址: T/C0—A1A0=00 , T/C1—A1A0=01 , T/C2—A1A0=10 ; 步骤: (1) 每次写入一个字节 (8254 数据通道为 8位 ) ; (2) 根据工作方式控制字选择的读 / 写格式,决定计数器初值的高、低字节写入方法。 例 2 : MOV AL , 00H ;假设读写格式为先低后高字节格式 OUT 41H , AL ; BCD 方式计数时,则初值=2000 MOV AL , 20H ;二进制方式计数时,则初值=2000H OUT 41H , AL

转 10页

Page 13: 第七章 定时与计数技术

13

3 、锁存命令—软件锁存 有两种方法实现锁存当前计数值 / 状态功能( 1 )利用工作方式控制字实现锁存当前计数值功能 端口地址: A1A0=11 ; 特征位: D7D6=00~10— 选择 T/C ; D5D4=00— 锁存功能, 01~11-- 读写格式 功能:只能锁存当前计数值。 例 3 : MOV AL , 01000000B ;锁存 T/C1 当前计数值 OUT 43H , AL 特点:用工作方式控制字方法不能实现多个计数器的同时锁存。

转 11页 回下页回 19页

Page 14: 第七章 定时与计数技术

14

( 2 )利用读回命令实现锁存当前计数值 / 状态功能

读回控制字格式 端口地址: A1A0=11 ; 特征位: D7D6=11 。 功能:锁存当前计数值— D5D4=01 ; 锁存当前状态— D5D4=10 。 特点:读回控制字方法可同时锁存多个计数器; 8254 才支持该功能。

转 10页 转上页

Page 15: 第七章 定时与计数技术

15

4 、读出当前计数值命令 方法:⑴直接读取,一般在硬件锁存后读取; ⑵ 用工作方式控制字锁存 ( 软件 ) 后读取; ⑶ 用读回控制字锁存 ( 软件 ) 后读取。 实现:端口地址— A1A0=00~10 ,对应计数器号; 操作— 1~2 个读 (IN) 操作,个数取决于工作方式字的读写格式。

转 10页 转 5页

注意:锁存功能在 IN 操作后自动解锁!

Page 16: 第七章 定时与计数技术

16

5 、读出当前状态命令 方法:用读回控制字锁存 ( 软件 ) 后读取。 实现:端口地址— A1A0=00~10 ,对应计数器号; 操作— 1 个 IN 操作,所读出状态字格式如下

状态字格式

回 20页 转 10页

Page 17: 第七章 定时与计数技术

17

6 、 T/C 初始化编程 (1) 设置工作方式控制字 ( 端口地址 A1A0=11) (2) 设置计数初值 ( 所选 T/C 端口地址A1A0=00~10) 例 4 : MOV AL , 01110101B ; T/C1, 先低后高字节 ,方式 2,BCD OUT 43H , AL MOV AL , 00H OUT 41H , AL MOV AL , 20H OUT 41H , AL ;计数初值为 2000 注意: (1) 每个准备使用的 T/C 均要初始化; (2) 计数初值设置方法由控制字 D5D4 位决定; (3) 计数初值≤ 65536 。

Page 18: 第七章 定时与计数技术

18

7 、 T/C 工作编程—读取当前计数值(1) 硬件锁存后读取当前计数值—直接读取 一般直接读取在硬件方法锁存后使用。 例 5 : MOV AL , 01100101B ; T/C1, 只写高字节 ,方式 2,BCD OUT 43H , AL MOV AL , 20H OUT 41H , AL ;计数初值为 2000 ……… IN AL , 41H MOV AH , AL MOV AL , 0 ; AX 为 T/C1 当前计数值,低位忽略为 0 注意:当初始化采用 BCD 码时,高和低字节计数值按十进制规则减 1(60H 减 1 后,变成 59H ,而非5FH) 。

Page 19: 第七章 定时与计数技术

19

(2) 软件锁存后读取当前计数值—间接方式读取 例 6 :利用工作方式控制字锁存后读取 MOV AL , 01000000B ;锁存 T/C1 当前计数值 OUT 43H , AL IN AL , 41H ;假设 T/C1 初值只写低字节 MOV AH , 0 ; AX 为 T/C1 当前计数值 例 7 :利用读回命令锁存后读取 MOV AL , 11011010B ;锁存 T/C0 、 T/C2 当前计数值 OUT 43H , AL IN AL , 40H ;假设 T/C0 先低后高字节写初值 MOV AH , AL IN AL , 40H XCHG AH , AL ; AX 为 T/C0 当前计数值 IN AL , 42H ;假设 T/C2 只写低字节写初值 MOV AH , 0 ; AX 为 T/C2 当前计数值

转 13页

Page 20: 第七章 定时与计数技术

20

8 、 T/C 工作编程—读取当前状态 例 8 : MOV AL , 11100100B ;锁存 T/C1 当前状态值 OUT 43H , AL IN AL , 41H ;若 AL=00110101 ,状态是什么? MOV AL , 11100010B ;锁存 T/C0 当前状态值 OUT 43H , AL IN AL , 40H ;若 AL=00010110 ,状态是什么?9 、 T/C 工作编程—重写计数初值 方法:与写 T/C 计数初值一致。 效果:重写计数初值会影响输出效果; 不同工作方式导致新初值生效时间不同。

计数初值 CR CE

写计数初值时 不同工作方式传递时机不同转 16页

Page 21: 第七章 定时与计数技术

21

功能 命令 命令中 AL 值初始化

(以 T/Cxy 为例 )

OUT BASE+3, ALOUT BASE+xy, ALOUT BASE+xy, AL①

AL= xy ab cde f AL= 初值低 / 高字节AL= 初值高 / 低字节,

读当前计数值

硬件锁存 ( 直接 )

IN AL, BASE+xyIN AL, BASE+xy①

AL= 当前计数值低 / 高字节AL= 当前计数值高 / 低字节

软件锁存(间接)

工作方式字

OUT BASE+3, ALIN AL, BASE+xyIN AL, BASE+xy①

AL= xy 00 0000AL= 当前计数值低 / 高字节AL= 当前计数值高 / 低字节

读回命令

OUT BASE+3, ALIN AL, BASE+xyIN AL, BASE+xy①

AL= 11 01 0010,bitxy+1=1

AL= 当前计数值低 / 高字节AL= 当前计数值高 / 低字节

读当前状态 ( 间接 )OUT BASE+3, ALIN AL, BASE+xy

AL= 1110 0010,bitxy+1=1AL=bitOUT bitVa ab cde f

重写初值OUT BASE+xy, ALOUT BASE+xy, AL①

AL= 初值低 / 高字节AL= 初值高 / 低字节

说明:① -- 初始化时 ab=11 有该指令, ab=01/10 无该指令

Page 22: 第七章 定时与计数技术

22

四、 8254-2 工作方式1 、方式 0— 计数结束时中断

特点:一次计数; GATE 高允许、下降暂停、低禁止、上升继续计数; WR# 写 [ 重写 ] 后下一脉冲下降沿重新计数; OUT 在写完时变低、计数值为 0 时变高 (N+1 个低 ) 。 回 25页

Page 23: 第七章 定时与计数技术

23

2 、方式 1— 硬件可重触发单稳

特点:一次计数; GATE 上升重新计数,高、下降、低不影响计数; WR# 写 [ 重写 ] 在下次计数 ( 重新 ) 时有效; OUT开始计数时变低、计数值为 0 时变高 (N 个低 ) 。 与方式 0比较: GATE 效果不同、 OUT宽度不同。 回 26页

Page 24: 第七章 定时与计数技术

24

3 、方式 2— 频率发生器

特点:多次计数; GATE 上升重新、高允许、下降停止、低禁止计数 ; WR# 写 [ 重写 ] 在下次计数时有效; OUT 在计数值为 1 时输出宽度为 1 个 CLK 的负脉冲 ( 周期为 N) 回下页

Page 25: 第七章 定时与计数技术

25

4 、方式 3— 方波发生器

特点:多次计数; GATE 上升重新、高允许、下降停止、低禁止计数; WR# 写 [ 重写 ] 在下次计数时有效; OUT开始计数时变高,初值装入 (奇数时装 N-1) 、每个 CLK 计数减 2 、计数值为 0 时 OUT反向 (奇数时停 1 个 CLK) 与方式 2比较: OUT 波形不同。

转上页

Page 26: 第七章 定时与计数技术

26

5 、方式 4— 软件触发选通

特点:一次计数; GATE 上升重新、高允许、下降停止、低禁止计数; WR# 写 [ 重写 ] 后下降沿重新计数; OUT开始计数时变高,在计数值为 0 时输出 1 个CLK 的负脉冲 ( 总长 N+1) 。 与方式 0比较: GATE 上升沿效果、 OUT 波形不同。 转 22页

Page 27: 第七章 定时与计数技术

27

6 、方式 5— 硬件触发选通

特点:一次计数; GATE 上升重新计数,高、下降、低不影响计数; WR# 写 [ 重写 ] 在下次计数时有效; OUT 在计数值为 0 时输出 1 个 CLK 负脉冲 ( 总长N+1) 。 与方式 1比较: OUT 波形不同。

转 23页

Page 28: 第七章 定时与计数技术

28

  方式 0 方式 1 方式 2 方式 3 方式 4 方式 5OUT状态

写 CW后 变 0 变 1 变 1 变 0 变 1 变 1

波形宽度 n+1 n n n n+1 n+1

初 值 自 动重装 无 无 计数到 0

重装计数到 0

重装 *无 无

计 数 过 程中 改 变 初值

立即有效 重新计数时有效

计数结束或重新计数时有效

计数结束或重新计数时有效

立即有效 重新计数时有效

GATE

0 禁止计数 无影响 禁止计数 禁止计数 禁止计数 无影响下降沿 暂停计数 无影响 停止计数 停止计数 停止计数 无影响上升沿 继续计数 重新计数 重新计数 重新计数 重新计数 重新计数

1 允许计数 无影响 允许计数 允许计数 允许计数 无影响说明: *-- 装入值为偶数,初值为奇数、 OUT 为高时,停顿 1 个 CLK再重装

工作方式比较表:n 0n 0 n 0 n 0 n 0 n 0

Page 29: 第七章 定时与计数技术

29

五、 8254-2 应用举例1 、分频器设计 用 8254( 地址 40H~43H)将 5MHz 的脉冲变为1Hz 脉冲。 思路:初值 =fCLK/fOUT=5×106> 216 ,需 2 个T/C级联,采用方式 3产生连续方波脉冲, T/C 的GATE统一控制。CLK0

GATE0OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

D0~D7

A1

A0

RD

WR

CS

5MHz

1Hz

MOV AL , 00110111B ; T/C0OUT 43H , ALMOV AL , 00HOUT 40H , ALMOV AL , 50HOUT 40H , AL ;初值 5000MOV AL , 01110111B ; T/C1OUT 43H , ALMOV AL , 00HOUT 41H , ALMOV AL , 10HOUT 41H , AL ;初值 1000回下页

Page 30: 第七章 定时与计数技术

30

思考: (1) 如何用 8254将 5MHz 的脉冲变为 0.2Hz 方波? (2) 如何用 8254将 5MHz 的脉冲变为先 3s 后2s 脉冲 ? (3) 程序初始化后, CPU 执行其它程序,结果如何 ? (4) 上例如下图连接, OUT1 结果如何?

CLK0GATE0

OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

D0~D7

A1

A0

RD

WR

CS

5MHz

2500 个原 CLK0.5ms

2500 个原 CLK0.5ms

OUT01kHz

0.2ms1000 个原 CLK

0.2ms1000 个原

CLK

OUT15kHz

转上页

Page 31: 第七章 定时与计数技术

31

2 、频率计数器设计 用 8254 计数外来信号频率 fIN( 设 fCLK=1MHz) 。 思路: fIN=(N-M)/t 。 用 T/C0得到 M( 初值为 N) ,采用方式 0 ; 用 T/C1得到 t ,采用方式 1 , OUT1 连接GATE0 ;

CLK0GATE0

OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

D0~D7

A1

A0

RD

WR

CS

信号fCLK

TRGTRG :计数开始控制信号;EOC :计数结束状态信号。

EOC

回下页 回 33页 回 34页

Page 32: 第七章 定时与计数技术

32

MOV AL , 0; TRG(D1位 )=0 , STC(D0 位 )=0 OUT PIO1 , AL MOV AL , 01110010B ; T/C1 ,先低后高字节OUT 43H , ALMOV AL , 10HOUT 41H , ALMOV AL , 27HOUT 41H , AL ;间隔为10msMOV AL , 00110000B ; T/C0 OUT 43H , ALMOV AL , 00HOUT 40H , ALOUT 40H , AL ;初值为N=65536; STC产生一个脉冲

MOV AL , 2 OUT PIO1 , AL ; TRG=1 ,开始计数S1 : IN AL , PIO2 ;读 EOC AND AL , 01H CMP AL , 01H JNZ S1 ;等到EOC=1 IN AL , 40H MOV AH , AL IN AL , 40H XCHG AH , AL ; AX 为当前计数值 M

转上页 回下页

Page 33: 第七章 定时与计数技术

33

结果: fIN=(N-M+1)/t=[(65536-AX+1)/10]*1000 Hz 注意: (1)10ms 时 M 应大于 0 ; (2)T/C0 在方式 0 时经过一个 CLK 后才将初值写到 CE 中,因此计数结果必须+1 。 思考:如何使结束结果不需要 +1?

信号

TRG

≥1 &

STC

GATE1

CLK0

;实现思路:;在 T/C0 初值写完后,送初值到CEMOV AL , 1OUT PIO1 , AL ; STC(D0位 ) 0→1MOV AL , 0OUT PIO1 , AL ; STC(D0位 ) 1→0;如此计数结果不需要 +1 。转上页 转 31页 回下页

Page 34: 第七章 定时与计数技术

34

综合思考: (1) 上例 T/C1 为方式 0 时,接线及程序如何改变? (2) 采用简化电路,用读回命令的实现方法能否很精确? (3) 为得到精确的 fIN ,需增大时间间隔,在时间间隔内 M=0怎么办? (4) 分析下图 T/C 间连接的效果。

CLK0GATE0

OUT0CLK1

GATE1OUT1

CLK0GATE0

OUT0CLK1

GATE1OUT1

CLK0GATE0

OUT0CLK1

GATE1OUT1

分频器转上页 转 31页

两个独立、同步控制T/C

间歇型 T/C

Page 35: 第七章 定时与计数技术

35

3 、组合波形发生器设计…

t1=0.5s t2=0.5s1 个定时周期

t1=1s t2=1s1 个定时周期

f1=1kHz f2=0Hz f1=1kHz f2=64Hz…

… …

OUT0=1Hz

OUT1=1KHz

分析:波形的组成

设计: T/C 的引脚连接CLK0

GATE0OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

CLK0GATE0

OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

… …

OUT0=0.5Hz

OUT1=1KHz

… …OUT2=64Hz

CLK0GATE0

OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

CLK0GATE0

OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

Page 36: 第七章 定时与计数技术

36

4 、电子钟显示功能实现 设计思路:  ⑴ 8254 采用方式 2 ,每秒产生一个请求到8259A ;  ⑵ 8259A 实现定时中断服务功能;  ⑶中断服务程序实现 (简略 )电子钟的显示功能。 注意:  ⑴ 8254 与 8259A 的端口地址不同,如何连接?   ⑵ 8259A 有哪些手段尽量不遗漏中断请求?   ⑶中断服务程序入口地址的写入与原入口地址的保存 /恢复?

Page 37: 第七章 定时与计数技术

37

第三节 8254 在微机中应用

PC 系列机定时系统结构框图回 41页

Page 38: 第七章 定时与计数技术

38

一、计数器 0— 系统定时器 工作方式: 3 方式,计数初值: 65536 。1 、系统定时器 OUT0 连接到 8259A 的 IRQ0( 中断类型号为 8)上。 fOUT0=1.1931816MHz/65536=18.2Hz , 即每秒产生 18.2 次中断用于日时钟计时。 应用: BIOS 提供 1CH 用户定时中断 (被 08H 中断调用 ) 。2 、软盘驱动器马达控制 系统要求:完成软盘操作后 2s 时关闭软驱马达。 实现:操作完成时,置 2s÷54.925ms=37 到40:40H单元 (BOIS映射 ) ,每次 08H 中断减 1 ,其为 0 时关闭马达

Page 39: 第七章 定时与计数技术

39

二、计数器 1— 动态存储器定时刷新控制 工作方式: 2 方式,计数初值: 18 。 OUT1 连接到 8237 的 DREQ0 上,定时产生负脉冲。 脉冲宽度=1/1.1931816MHz=838ns , 脉冲周期 =18/1.1931816MHz=15.08μs , 即:每隔 15.08μs产生一个脉冲用于 RAM刷新。

Page 40: 第七章 定时与计数技术

40

三、计数器 2—扬声器音频发生器 工作方式: 3 方式,计数初值:由调用程序设置。 连接: OUT2 与 8255 的 PB 口 D1 信号“与”后连接到扬声器上,控制扬声器发生频率及时长。

8255 的 PB 口 D1 位T/C2 的 OUT2

扬声器

控制: 时长: CPU 控制 8255 的 PB 口的 D1 位的电平实现; 频率: CPU 控制 8254 的 T/C2 的初值。

Page 41: 第七章 定时与计数技术

41

例:教材 P198乐曲播放程序。 音符序列: 1 2 3 1 1 2 3 1 3 4 5 3 … 音符频率: 262 294 330 262 262 294 330 262 330 349 392 330 … 音符时长 (10ms) : 10 10 10 10 10 10 10 10 10 10 20 10 … 8254 初始化,设置频率 (音符 )

取时间,等待 10ms 通过等待音符时长通过

打开扬声器

关闭扬声器直到乐曲结束

533H 时频率为 896Hz ,计数初值 =533H*896/ 频率

比较 dl(10ms) 不同即可计数并比较音符时长

转 37页