第 6 章 定时与计数技术 6.1 概 述

59
1 微微微微微微 6 微 微微微微微微微 6.1 6.1.1 6.1.1 微微微微微 微微微微微 1. 1. 微微 微微 微微微微微微微微微微微微微微微微微微微 微微微微微 、。 2. 2. 微微 微微 微微微微微微微微微 微微微 一。 微微微微微微微微微 微微微 一。 微微微微微微微 微微微微微微微微微微微 ,。 微微微微微微微 微微微微微微微微微微微 ,。 3. 3. 微微 微微 微微微 微微微微微微微微微微微微微微微 微微微 微微微微微微微微微微微微微微微

Upload: amora

Post on 24-Jan-2016

86 views

Category:

Documents


0 download

DESCRIPTION

第 6 章 定时与计数技术 6.1 概 述. 6.1.1 定时与计数. 1. 定时. 定义: 提供的时间基准。. 分类: 内部定时、外部定时。. 2. 计数. 定时与计数本质上是一致的。. 计数的信号随机,定时的信号具有周期性。. 3. 应用. 分时系统切换任务的时间基准、测速、计数. 6.1.2 定时方法. 1. 软件定时. 通过软件指令周期方法定时,如执行循环程序。. 增加 CPU 负担,通用性差,一般用于短延时。. 2. 不可编程硬件定时. 采用中小规模 IC 构成。. 不增加 CPU 负担,成本低,定时值不可改变。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 6 章 定时与计数技术 6.1   概  述

1

微计算机系统

第 6 章 定时与计数技术6.1 概 述6.1.1 6.1.1 定时与计数定时与计数1.1. 定时定时 定义:定义:提供的时间基准。 分类:分类:内部定时、外部定时。2.2. 计数计数 定时与计数本质上是一致的。定时与计数本质上是一致的。 计数的信号随机,定时的信号具有周期性。计数的信号随机,定时的信号具有周期性。3.3. 应用应用分时系统切换任务的时间基准、测速、计数分时系统切换任务的时间基准、测速、计数

Page 2: 第 6 章 定时与计数技术 6.1   概  述

2

微计算机系统6.1.2 6.1.2 定时方法定时方法1.1. 软件定时软件定时 通过软件指令周期方法定时,如执行循环程序。 增加 CPU 负担,通用性差,一般用于短延时。2.2. 不可编程硬件定时不可编程硬件定时 采用中小规模 IC 构成。 不增加 CPU 负担,成本低,定时值不可改变。3.3. 可编程硬件定时可编程硬件定时 采用可编程计数器完成,软件可改变计数值。 可编程定时可编程定时 // 计数器:计数器:实质上定时和计数本质上都是脉冲计数器,定时计的是内部基准时钟源产生的脉冲,计数是计外部脉冲。

Page 3: 第 6 章 定时与计数技术 6.1   概  述

3

微计算机系统6.1.3 6.1.3 定时定时 // 计数器基本原理计数器基本原理1.1. 内部逻辑内部逻辑 CPUCPU 接口:接口:

片选、低端地址线、读写控制线、数据线外设接口:外设接口: 时钟、控制、输出内部逻辑:内部逻辑: 端口地址译码器、各种寄存器

2.2. 工作过程工作过程 设初值、控制(计数)、输出

Page 4: 第 6 章 定时与计数技术 6.1   概  述

4

微计算机系统6.2 Intel 8254 8253→8254→82801BA 。6.2.1 8254-26.2.1 8254-2 基本功能基本功能 3 个独立的 16 位定时 / 计数器( T/C ); 每个 T/C 功能: 可按二、十进制( BCD )计数; 有 6 种不同的工作方式; 最高频率 10MHz ; (82801BA 中的为 14.31818MHz) 有读回状态功能。 (8253 没有 )

Page 5: 第 6 章 定时与计数技术 6.1   概  述

5

微计算机系统6.2.2 8254-26.2.2 8254-2 结构与引脚结构与引脚1.1. 内部逻辑内部逻辑

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

Page 6: 第 6 章 定时与计数技术 6.1   概  述

6

微计算机系统2.2. 计数器内部逻辑计数器内部逻辑

16 位当前计数值锁存器 OL

16 位减 1 计数器 CE

16 位计数初值寄存器 CR

OUT(减 1 至 0 时)

MSBLSB锁存后读出当前值

MSBLSB装入 / 读出初值

&CLK

GATE

CRCR :: 16 位 CPU 写入 [ 两次 ] 、清零CECE :: 16 位 通过 CR 写入、计数、输出OLOL :: 16 位 先锁存再读出状态状态 REGREG :: 8 位 先锁存再读出

注意:注意: GATE 信号的作用与应用,重写 CR 的效果。 计数初值:计数初值: N=fCLKi/fOUTi, 在不同工作方式及定时 / 计数时的应用不同。

Page 7: 第 6 章 定时与计数技术 6.1   概  述

7

微计算机系统3.3. 外部引脚外部引脚

(1)(1) 译码:译码: CS 与 A1A0

: (2)(2) 读读 // 写:写: RD 、 WR;

Page 8: 第 6 章 定时与计数技术 6.1   概  述

8

微计算机系统

4.CPU4.CPU 操作功能及命令操作功能及命令I/OI/O 端口地址:端口地址: 8254 提供四个端口 ( 使用 A1A0) ;命令:命令:初始化—设置工作方式、设置计数器初值

操 作—重写计数器初值、取状态命令状态:状态:当前计数值、工作方式及当前状态。 I/OI/O 端口操作冲突时解决方法:端口操作冲突时解决方法: 写工作方式与写读取状态命令采用特征位方法; 读取当前计数值或读取状态采取时序方法。 82548254 命令关系表:命令关系表:

Page 9: 第 6 章 定时与计数技术 6.1   概  述

9

微计算机系统操 作 特征位 时序D7D6

0 1 0 0 0 计数初值写入 0# 计数器 ** 无0 1 0 0 1 计数初值写入 1# 计数器 ** 无0 1 0 1 0 计数初值写入 2# 计数器 ** 无0 1 0 1 1 向控制字寄存器写控制字 00~10 无

写“读计数值 / 状态”命令

11 无

0 0 1 0 0 读 0# 计数器当前计数值 无 前一命令 A1A0=11 时, D7D6 为 11 且 D5 为 0或 D7D6 为非 11 且 D5

D4 为 00 时,读取的是当前计数值; D7D6 为11 且 D4 为 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

Page 10: 第 6 章 定时与计数技术 6.1   概  述

10

微计算机系统6.2.3 8254-26.2.3 8254-2 命令及编程命令及编程1.1. 工作方式控制字(工作方式控制字( A1A0=11)A1A0=11)

特征位:特征位: D7D6=00~10 、 D5D4=01~11 ; D7D6D7D6 选择计数器选择计数器: 00 - T/C0 ; 01 - T/C1 ; 10 -T/C2

D5D4D5D4 选择读选择读 // 写方式写方式: 01 -只写低字节; 10 -只写高字节; 11 -先写低字节再写高字节( 16 位) D3D2D1D3D2D1 选择工作方式选择工作方式: 000 ~ 101 六种工作方式。 D0D0 选择计数进制选择计数进制: 0 -二进制方式; 1 - BCD 码方式。例:例: MOV AL , 01110100B ; T/C1 ,先低后高字节 OUT 43H43H , AL ;方式 2 ,二进制方式

Page 11: 第 6 章 定时与计数技术 6.1   概  述

11

微计算机系统2.2. 计数初值计数初值 (1) 不同通道的计数初值写到不同地址中;

A1A0 A1A0 定时定时 // 计数器计数器 0 0 T/C00 0 T/C0 0 1 T/C10 1 T/C1 1 0 T/C21 0 T/C2 (2) 每次写入一个字节; (3) 根据控制字定义,决定高、低字节写入方

法。 (4) 初始值的范围是: • 二进制为二进制为 65536(0000H)65536(0000H) 、、 65535(FFFFH)~1(0001H65535(FFFFH)~1(0001H

)) 。。• 十进制为十进制为 10000(0000H)10000(0000H) 、、 9999(9999H)~1(0001H)9999(9999H)~1(0001H)

。 。

Page 12: 第 6 章 定时与计数技术 6.1   概  述

12

微计算机系统3.T/C3.T/C 初始化初始化 (1) 写工作方式控制字 (2) 设置计数初值例例 :: MOV AL, 01110101B; T/CT/C11,, 先低后高字节先低后高字节 ,, 方式方式 2,BCD2,BCD

OUT 43H43H, ALMOV AX, 2000H ; 计数初值为计数初值为 20002000

OUT 41H41H, AL ;MOV AL, AH

OUT 41H41H , AL ; MOV AL , 00010110B; T/CT/C00,, 只低字节只低字节 ,, 方式方式 3,3, 二进制二进制 OUT 43H43H , AL OUT 40H40H , 50H ; 计数初值为计数初值为 50H50H (( 8080 )) 注意: (1) 每个使用的 T/C 均要初始化; (2) 计数初值的设置与 T/C 的 CLK 密切相关; (3) 计数初值的设置方法由控制字决定。

Page 13: 第 6 章 定时与计数技术 6.1   概  述

13

微计算机系统4.T/C4.T/C 数据读取数据读取(1)(1) 读取当前计数值方法读取当前计数值方法 11工作方式控制字 (A1A0=11)D7D6 = 00 ~ 01 , D5D4=00 (a) 锁存当前计数值或禁止计数 (b) 读取当前计数值 例:例: MOV AL , 0100000101B ; T/C1, 锁存

;先低后高字节 , 方式 2,BCD OUT 43H43H , AL IN AL , 41H41H MOV AH , AL IN AL , 41H41H XCHG AH , AL ; AX 为 T/C1 当前计数值

Page 14: 第 6 章 定时与计数技术 6.1   概  述

14

微计算机系统(2)(2) 读取当前计数值方法读取当前计数值方法 2—2— 使用读回命令使用读回命令(( A1A0=11A1A0=11))

特征位:特征位: D7D6=11 。 (A1A0=11)(A1A0=11) 功能选择:功能选择:锁存状态- D5D4=10 ;

锁存计数值- D5D4=01 ; 锁存状态与计数值- D5D4=00 。 ( 先读

状态再读计数值) 计数器选择:计数器选择: D1=1—T/C0 , D2=1—T/C1 , D3=1—T/C2 特点:特点:控制字同时只能锁存单个通道, 读回命令可同时锁存多个通道。

Page 15: 第 6 章 定时与计数技术 6.1   概  述

15

微计算机系统例:例: MOV AL , 1111010100B ; T/C1, 锁存计数值 OUT 43H , AL IN AL , 41H ; MOV AH , AL IN AL , 41H XCHG AH , AL ; AX 为当前计数值 MOV AL , 1111011010B ; T/C0 、 T/C2 锁存计数值 OUT 43H , AL IN AL , 40H ; MOV AH , AL IN AL , 40H XCHG AH , AL ; AX 为 T/C0 当前计数值 IN AL , 42H ; MOV AH , AL IN AL , 42H XCHG AH , AL ; AX 为 T/C2 当前计数值

Page 16: 第 6 章 定时与计数技术 6.1   概  述

16

微计算机系统(3)(3) 读取计数器当前状态—使用读回命令读取计数器当前状态—使用读回命令

例:例: MOV AL , 11100100B ; T/C1, 锁存状态值 OUT 43H , AL IN AL , 41H ;若 AL=00110101 ,表示 T/C1

; 为方式 2,BCD 码,先低后高; 读 / 写,当前 OUT 为低电平

MOV AL , 11100010B ;T/C0, 锁存状态值 OUT 43H , AL IN AL , 40H ;若 AL=00010110 ,表示 T/C0

; 为方式 3 ,二进制码,只有低;字节,当前 OUT 为低电平

读出的状态字格式:读出的状态字格式:

Page 17: 第 6 章 定时与计数技术 6.1   概  述

17

微计算机系统6.2.4 8254-26.2.4 8254-2 工作方式工作方式1.1. 方式方式 0—0— 计数结束时中断计数结束时中断

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

Page 18: 第 6 章 定时与计数技术 6.1   概  述

18

微计算机系统2.2. 方式方式 1—1— 硬件可重触发单稳硬件可重触发单稳

特点:特点:一次计数; GATE 上升重新重新、高与下降和低不影响不影响计数; WR# 写 [ 重写 ] 在下次 GATE从 0 到 1 的跳变时有效; OUT 在写入控制字后变高,开始计数时变低、计数值为 0 时变高 (N 个时钟周期的低 ) 。

Page 19: 第 6 章 定时与计数技术 6.1   概  述

19

微计算机系统3.3.方式方式 2—2— 频率发生器频率发生器

特点:特点:多次计数; GATE 上升重新重新、高允许、下降停止停止、低禁止禁止计数; WR# 写 [ 重写 ] 在下次计数时有效; OUT 在计数值为 1 时输出宽度为 1 个 CLK 的负脉冲 ( 周期为 N 个时钟周期,频率为 1/N 的时钟频率,实际上是对 CLK 的 N 分频 ) 。

Page 20: 第 6 章 定时与计数技术 6.1   概  述

20

微计算机系统4.4. 方式方式 3—3— 方波发生器方波发生器

特点:特点:多次计数; GATE 上升重新重新、高允许、下降停止停止、低禁止禁止计数; WR# 写 [ 重写 ] 在下次计数时有效; OUT 在写入控制字后变高,计数开始后,采用每脉冲计数减 2 : 当计数初值为偶数当计数初值为偶数 NN 时时,计数到 0 时反向。脉冲宽度 T×N/2, 方波周期为 T×N 。 当计数初值为奇数当计数初值为奇数 NN 时时, OUT 变高的第一 CLK 减 1 后装入 CE ,其余每个脉冲计数减 2 。 OUT正脉冲时,计数到 0 的下一个CLK 时 OUT反向 OUT正脉冲宽度为 T×(N++1)/2 ; OUT 负脉冲时在计数到 0 时反向。负脉冲宽度为 T×(N--1)/2 ,方波周期仍然是T×N 。

Page 21: 第 6 章 定时与计数技术 6.1   概  述

21

微计算机系统

特点:特点:一次计数; GATE 上升重新重新、高允许、下降停止、低禁止计数; WR# 写 [ 重写 ]会立即重新重新计数(软件触发); OUT 在写入控制字及计数当中为高电平,计数值为0 时输出 1 个 CLK 的负脉冲。

5.5. 方式方式 4—4— 软件触发选通软件触发选通

Page 22: 第 6 章 定时与计数技术 6.1   概  述

22

微计算机系统6.6. 方式方式 5—5— 硬件触发选通硬件触发选通

特点:特点:一次计数; GATE 上升重新重新、高与下降和低不影响计数; WR# 写 [ 重写 ] 在下次 GATE从 0 到 1 的跳变时有效; OUT 在计数值为 0 时输出 1 个 CLK 的负脉冲。

Page 23: 第 6 章 定时与计数技术 6.1   概  述

23

微计算机系统   方式方式 00 方式方式 11 方式方式 22 方式方式 33 方式方式 44 方式方式 55

OUTOUT 输 出 状输 出 状态态

写 入 控 制字后变 0 ,计 数 结 束变 1 ,并维持至 重写 控 制 字或 计 数 初值

写入控制字后变 1 , GATE 上 升沿触发变 0 ,开始计数,计数结束变1

写入控制字后变 1 ,计数到 1 变 0 ,维持一个 Tclk 变 1

写 入 控 制 字后 变 1 , 装入初值且 GATE=1 则 OUT 变 1 , 计数 到 变 0 ,重 装 初 值 继续 计 数 , 计数到则反向

写 入 控 制 字后 变 1 , 计数结束变 0 ,维持一个 Tclk 变 1

写入控制字后变 1 , GATE 上 升沿触发开始计数,计数结束输出一个 CLK 的负脉冲

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

根 据 初 值奇偶分别重 装 ;

无 无

计数过程中改计数过程中改变初值变初值

立即有效 GATE触发后有效

计数到 1 或GATE触发后有效

计 数 结 束 或GATE 触 发后有效

立即有效 GATE触发后有效

GAGATETE

00 禁止计数 无影响 禁止计数 禁止计数 禁止计数 无影响

下降沿下降沿 暂停计数 无影响 停止计数 停止计数 停止计数 无影响

上升沿上升沿 继续计数 从初值开始重新计数

从初值开始重新计数

从初 值开始重新计数

从初 值开始重新计数

从初值开始重新计数

11 允许计数 无影响 允许计数 允许计数 允许计数 无影响

Page 24: 第 6 章 定时与计数技术 6.1   概  述

24

微计算机系统6.2.5 8254-26.2.5 8254-2 应用举例应用举例1.1. 分频器设计分频器设计用 8254( 地址 40H~43H)将 5MHz 的脉冲变为 1Hz 的脉冲。初值 =fCLK/fOUT=5×106> 65536 ,怎么办?

CLK0GATE0

OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

D0~D7

A1

A0

RD

WR

CS

5MHz

1Hz

MOV AL , 00110111B ; T/C0 OUT 43H43H , ALMOV AX, 5000HOUT 40H40H , ALMOV AL, AHOUT 40H40H , ALMOV AL , 01110101B ; T/C1 MOV AX, 1000HOUT 41H41H , ALMOV AL, AHOUT 41H41H , AL

需要 2 个 T/C级联, T/C0 采用方式 3 产生连续分频方波,做 T/C1 的 CLK , T/C1 采用方式 2 产生 1Hz 脉冲。两个 T/C 的 GATE 统一控制。

Page 25: 第 6 章 定时与计数技术 6.1   概  述

25

微计算机系统2.2. 占空比占空比 4:94:9 的方波发生的方波发生器器8254 的 CLK0 的时钟频率是 8KHz ,问1 ) T/C0 最大定时时间是多少?2 )要求 8254 端口地址为 90H 、 92H 、 94H 和 96H,请使用 74LS138 译码器加简单门电路完成地址连线。3 )现在要求使用该 8254 产生周期为 9秒,占空比为 4:9 的方波,请在上面的电路图中完成电路,并编写初始化程序。答:1 ) TCLK0=1/fCLK0=1/8000=0.125ms最大定时时间= 65536×0.25ms=8.192秒或:或: ffCLK0CLK0/f/fOUTOUT=65536=65536 == >T>Tmaxmax=1/f=1/fOUTOUT=65536/ f=65536/ fclk0clk0

=65536/8000=8.192=65536/8000=8.192 秒秒

Page 26: 第 6 章 定时与计数技术 6.1   概  述

26

微计算机系统2)

D7~D0

IOWIOR

Y2

A1A2

A7

A5A4A3

≥1

≥1

A8A9A6A0

CLK1GATE1

D7~D0WRRDA0A1

8254CS

CBA

74LS138

G1G2A

G2B

CLK0GATE0

OUT0

CLK0GATE0

OUT0

OUT1

8KHz

1Hz 5V

占空比4:9, 周期 9秒的方波

3)

Page 27: 第 6 章 定时与计数技术 6.1   概  述

27

微计算机系统

MOV AL , 00110111B ; T/C0 OUT 96H96H , ALMOV AX, 8000HOUT 90H90H , ALMOV AL, AHOUT 90H90H , ALMOV AL , 01110111B ; T/C1 MOV AX, 9HOUT 92H92H , ALMOV AL, AHOUT 92H92H , AL

Page 28: 第 6 章 定时与计数技术 6.1   概  述

28

微计算机系统3.3. 包装流水线控制包装流水线控制 某产品的包装流水线中,一个包装箱能装 24罐饮料。装箱时希望流水线上每通过 24罐饮料,流水线要停 4秒以等待包装箱封口,然后继续通过下一箱的 24罐。流水线就是这样周而复始的运作。试利用一片 8254来完成流水线控制中的定时和计数功能。假设 8254 的端口地址为8CH~8FH ,采用的时钟频率是 2KHz 。

Page 29: 第 6 章 定时与计数技术 6.1   概  述

29

微计算机系统思路思路:用 8254 的计数通道 1 作为计数器,用于 24 个罐的计数;计数通道 2 作为定时器,定时为 4S 。当计数通道 1 的 OUT 脚出现 0 到 1 的跳变的时候,将启动计数通道 2开始定时,而计数通道 2 定时阶段将控制计数通道 1 停止计数,只有其定时结束并停止定时阶段才可再次启动计数通道 1开始计数。

• 计数通道计数通道 11 工作在方工作在方式式 22 ,计数初值,计数初值 2424

• 计数通道计数通道 22 工作在方工作在方式式 11 ,计数初值,计数初值 80008000

CLK0GATE0OUT0CLK1

GATE1OUT1CLK2

GATE2OUT2

D0~D7

A1A0

RDWR

CS流水线信号

fCLK

控制流水线停和运行的信号

Page 30: 第 6 章 定时与计数技术 6.1   概  述

30

微计算机系统

;初始化程序;初始化程序;计数通道;计数通道 11 初始化初始化MOV AL, 01010100BOUT 8FH, ALMOV AL, 24OUT 8DH, AL;初始化计数通道;初始化计数通道 22MOV AL, 10110010BOUT 8F, ALMOV AX, 8000OUT 8EH, ALMOV AL, AHOUT 8EH, AL

Page 31: 第 6 章 定时与计数技术 6.1   概  述

31

微计算机系统6.3 8254 在微机中应用

PC 系列机定时系统结构框图

来自主板上 74LS138 的 Y2 ,地址范围是 40H~5FH,加上 A1A0 两根地址线,组成 8254 的端口地址是 40H 、 41H 、 42H 、43H 。

返回 1 返回 2

Page 32: 第 6 章 定时与计数技术 6.1   概  述

32

微计算机系统

6.3.1 6.3.1 计数器计数器 0—0— 系统定时器系统定时器 工作方式:工作方式: 3 方式,计数初值:计数初值: 65536 。1.1. 系统定时器系统定时器 OUT0连接到 8259A 的 IRQ0( 中断类型号为 8)上。 fOUT0=1.1931816MHz/65536=18.2Hz , 即:每秒产生 18.2 次中断用于日时钟计时。 应用:应用:系统 BIOS 的 INT 8H 用作日时钟计时; INT 8H调用 INT 1CH 作为用户定时中断接口。2.2. 软盘驱动器马达自动延迟控制软盘驱动器马达自动延迟控制

Page 33: 第 6 章 定时与计数技术 6.1   概  述

33

微计算机系统6.3.2 6.3.2 计数器计数器 1—1— 动态存储器定时刷新控制动态存储器定时刷新控制

工作方式:工作方式: 2 方式,计数初值:计数初值: 18 。

连接到 8237 的 DREQ0 上,定时产生负脉冲。 脉冲宽度 =1/ 1.1931816MHz=838ns , 脉冲周期 =18/1.1931816MHz=15.08μs , 即:每隔 15.08μs 产生一个脉冲用于刷新。

Page 34: 第 6 章 定时与计数技术 6.1   概  述

34

微计算机系统6.3.3 6.3.3 计数器计数器 2—2— 扬声器音频发生器扬声器音频发生器

工作方式:工作方式: 3 方式,计数初值:计数初值:由调用程序控制。 与 8255 的 PB 口 D1 信号“与”后连接到扬声器上,

控制扬声器发声频率及时长。

82558255 控制发声:控制发声: 8254 的 OUT2=1 , CPU 控制 8255的 PB 口的 D1 位的电平实现;82548254 控制发声:控制发声: 8255 的 PB 口的 D1 位为高电平,控制 8254 的 T/C2 的 OUT2 实现。

通过改变 OUT2 的方波信号频率,就可以改变扬声器发声的音调。

CRCR预置值=预置值= CLK2CLK2 脉冲频率脉冲频率 //发声的频率发声的频率转图

Page 35: 第 6 章 定时与计数技术 6.1   概  述

35

微计算机系统;功能:按照指定的时间间隔发 896Hz声音;调用: CX= 指定时间;返回:无BEEP PROC FAR

IN AL , 61H; 读读 8255PB8255PB 口的当前值口的当前值MOV AH , AL PUSH AXMOV AL , 10110110BOUT 43H , ALMOV AX , 0533H ; =1.1931816MHz/896Hz=1.1931816MHz/896HzOUT 42H , ALMOV AL , AHOUT 42H , ALPOP AX

Page 36: 第 6 章 定时与计数技术 6.1   概  述

36

微计算机系统

OR AL , 03H ;置 61H 端口 D0 、 D1 均为 1, ;打开扬声器

OUT 61H , ALNOP

L1 : LOOP L1 ;延迟AND AL , 0FDH ;置 61H 端口 D1 为 0

,;封锁 OUT2 输出

OUT 61H , ALMOV AL , AHOUT 61H , ALRET

BEEP ENDP 转图

Page 37: 第 6 章 定时与计数技术 6.1   概  述

37

微计算机系统6.4 实时钟电路及其应用6.4.1 MC1468186.4.1 MC146818 特性及工作原理特性及工作原理

MC146818MC146818 外部引脚图外部引脚图

Page 38: 第 6 章 定时与计数技术 6.1   概  述

38

微计算机系统

MC146818MC146818 在系统中连接框图在系统中连接框图

Page 39: 第 6 章 定时与计数技术 6.1   概  述

39

微计算机系统

实时钟工作原理示意图实时钟工作原理示意图

Page 40: 第 6 章 定时与计数技术 6.1   概  述

40

微计算机系统

偏移地址 信息内容 偏移地址 信息内容0 秒 7 日1 报警秒 8 月2 分 9 年3 报警分 0A 状态寄存器 A

4 时 0B 状态寄存器 B

5 报警时 0C 状态寄存器 C

6 星期几 0D 状态寄存器 D

32H 日 期 世 纪

COMS RAMCOMS RAM 实时钟信息存放位置表实时钟信息存放位置表

可以用 INT 1A 功能读取或设置这些值。

Page 41: 第 6 章 定时与计数技术 6.1   概  述

41

微计算机系统

6.4.2 6.4.2 实时钟状态寄存器实时钟状态寄存器

6.4.3 RT/CMOS RAM6.4.3 RT/CMOS RAM 操操作作815EP芯片组 82801BA 的 RTC 电路包含 128 字节标准 CMOS RAM 区和 128 字节扩展 CMOS RAM区。 访问 RT/CMOS RAM 的端口地址范围从 70H~77H。其中, 70H 和 71H 用来访问标准 CMOS RAM 区, 72H, 73H 用来访问扩展 CMOS RAM 区。

1. 状态寄存器 A2. 状态寄存器 B3. 状态寄存器 C4. 状态寄存器 D

Page 42: 第 6 章 定时与计数技术 6.1   概  述

42

微计算机系统

MOV AL , 6H ; 6H 是存放 "星期几 " 的单元偏移地址OUT 70H , AL ;送地址端口JMP $+2 ;芯片 I/O 延时要求IN AL , 71H ;读数据端口MOV AH, AL ; AH 中存放的是当前“星期几”的信息

; 0 表示星期日

Page 43: 第 6 章 定时与计数技术 6.1   概  述

43

微计算机系统

6.4.4 CMOS 6.4.4 CMOS 密码的破解密码的破解 基本原理是破坏 CMOS 中的设置,使得开机后必须重新设置 CMOS ,从而破解密码。

mov AL, 2EHout 70H, AL mov AL, 00H out 71H, AL mov AL, 2FHout 70H, AL mov AL, 00H out 71H, AL

CMOS 中偏移为 2EH 和 2FH的位置放的是标准校验和

Page 44: 第 6 章 定时与计数技术 6.1   概  述

44

微计算机系统6.5 Win32 编程中的时钟(自学)6.5.1 6.5.1 使用基于使用基于 WM_TIMERWM_TIMER 消息的定时器消息的定时器1. 使用 Win32 SDK函数• 必须使用# include “Windows.h”• 必须使用 User32.lib

Page 45: 第 6 章 定时与计数技术 6.1   概  述

45

微计算机系统

Page 46: 第 6 章 定时与计数技术 6.1   概  述

46

微计算机系统

UINT_PTR SetTimer( HWND hWnd, // handle to // handle to windowwindow

UINT_PTR nIDEvent, // timer identifier// timer identifier UINT uElapse, // time-out value// time-out value TIMERPROC lpTimerFunc // timer procedur// timer procedur

ee );BOOL KillTimer( HWND hWnd, // handle to windo// handle to windoww

UINT_PTR uIDEvent // timer identifier// timer identifier ); );

Page 47: 第 6 章 定时与计数技术 6.1   概  述

47

微计算机系统

LONG APIENTRY MainWndProc( HWND hwnd, // handle to main window

UINT message, // type of message WPARAM wParam, // additional informati

on LPARAM lParam) // additional informatio

n {

……switch (message) {

……case WM_TIMER: // Process the timer event.// Process the timer event. case WM_DESTROY: // Destroy the timer.// Destroy the timer.

KillTimer(hwnd, IDT_MOUSETRAP); PostQuitMessage(0); break;

…… }

Page 48: 第 6 章 定时与计数技术 6.1   概  述

48

微计算机系统

2. 使用 MFC 类 CWnd 的成员函数

UINT SetTimer( UINT nIDEvent, // Specifies a nonzero timer // Specifies a nonzero timer // identifier.// identifier.

UINT nElapse, // Specifies the time-out value,// Specifies the time-out value,// in milliseconds.// in milliseconds.

void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) // Specifies the address of the // Specifies the address of the // application-supplied TimerProc callback function that processes // application-supplied TimerProc callback function that processes // the WM_TIMER messages. If this parameter is NULL, the // the WM_TIMER messages. If this parameter is NULL, the // // WM_TIMERWM_TIMER messages are placed in the application’s message messages are placed in the application’s message // queue and handled by the CWnd object.// queue and handled by the CWnd object.););

BOOL KillTimer( int nIDEvent );

Page 49: 第 6 章 定时与计数技术 6.1   概  述

49

微计算机系统void CMainFrame::OnStartTimer() { m_nTimer = SetTimer(1, 2000, 0); } void CMainFrame::OnStopTimer() {

KillTimer(m_nTimer); } void CMainFrame::OnTimer(UINT nIDEvent){

MessageBeep(0xFFFFFFFF); // Beep // Call base class handler. CMDIFrameWnd::O

nTimer(nIDEvent); }

Page 50: 第 6 章 定时与计数技术 6.1   概  述

50

微计算机系统

缺点:• WM_TIMER消息的优先级比较低,定时时间不能精确保证。

• 定时精度低,最小精度为 54.915ms, 约 18.2 次 /秒。

Page 51: 第 6 章 定时与计数技术 6.1   概  述

51

微计算机系统

6.5.2 6.5.2 使用多媒体定时器使用多媒体定时器1. 使用 Win32 SDK函数•必须使用 #include "Mmsystem.h"• 必须使用 Winmm.lib

Page 52: 第 6 章 定时与计数技术 6.1   概  述

52

微计算机系统

Page 53: 第 6 章 定时与计数技术 6.1   概  述

53

微计算机系统1. 确定最大和最小周期

MMRESULT timeGetDevCaps( LPTIMECAPS ptc, // Pointer to a // Pointer to a TIMECAPS TIMECAPS structustructu

re.re.UINT cbtc //Size, in bytes, of the TIMECAPS struc//Size, in bytes, of the TIMECAPS struc

tureture););typedef struct {

UINT wPeriodMin; //Minimum supported resolution//Minimum supported resolutionUINT wPeriodMax; //Maximum supported resolution//Maximum supported resolution

} TIMECAPS;

Page 54: 第 6 章 定时与计数技术 6.1   概  述

54

微计算机系统2. 建立最小时间精度MMRESULT timeBeginPeriod( UINT uPeriod //Minimum tim//Minimum timer resolution, in milliseconds, for the application or device er resolution, in milliseconds, for the application or device driver.driver. );MMRESULT timeEndPeriod( UINT uPeriod );和上面的 timeBeginPeriod是一对,其中 uPeriod 要完全一样, timeBeginPeriod是启动定时器的时候用, timeEndPeriod是结束定时器时用。

Page 55: 第 6 章 定时与计数技术 6.1   概  述

55

微计算机系统3. 启动和取消定时器MMRESULT timeSetEvent( UINTMMRESULT timeSetEvent( UINT uDelay uDelay, , //Event delay, in mi//Event delay, in milliseconds.lliseconds.

UINTUINT uResolution uResolution, , /// Resolution of the timer eve/ Resolution of the timer event, in milliseconds. nt, in milliseconds.

LPTIMECALLBACKLPTIMECALLBACK lpTimeProc lpTimeProc, , //Pointer to a callback //Pointer to a callback function that is called once upon expiration of a single evenfunction that is called once upon expiration of a single event or periodically upon expiration of periodic events.t or periodically upon expiration of periodic events.

DWORDDWORD dwUser dwUser, , // User-supplied callback data// User-supplied callback dataUINTUINT fuEvent fuEvent // Timer event type.// Timer event type. TIME_ONESHOTIME_ONESHO

TT// TIME_PERIODIC// TIME_PERIODIC

););MMRESULT timeKillEvent( UINT uTimerID );

Page 56: 第 6 章 定时与计数技术 6.1   概  述

56

微计算机系统获取定时器最小周期获取定时器最小周期

#define TARGET_RESOLUTION 1 // 1-millisecond target reso// 1-millisecond target resolution lution TIMECAPS tc; UINT wTimerRes;

if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) {

// Error; application can't continue.// Error; application can't continue. } wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);

timeBeginPeriod(wTimerRes);

Page 57: 第 6 章 定时与计数技术 6.1   概  述

57

微计算机系统设置回调函数设置回调函数

UINT SetTimerCallback(NPSEQ npSeq, UINT SetTimerCallback(NPSEQ npSeq, // sequencer data// sequencer data UINT msInterval) UINT msInterval) // event interval// event interval

{ npSeq->wTimerID = timeSetEvent( msInterval, { npSeq->wTimerID = timeSetEvent( msInterval, // delay// delay wTimerRes, wTimerRes, // resolution(global variable)// resolution(global variable) OneShotCallback, OneShotCallback, // callback function// callback function

(DWORD)npSeq, (DWORD)npSeq, // user data// user data TIME_ONESHOT ); TIME_ONESHOT ); // single timer event// single timer event

if(! npSeq->wTimerID) return ERR_TIMER; if(! npSeq->wTimerID) return ERR_TIMER; else return ERR_NOERROR; else return ERR_NOERROR;

} }

Page 58: 第 6 章 定时与计数技术 6.1   概  述

58

微计算机系统

void CALLBACK OneShotTimer(UINT wTimerID, UINT msg,

DWORD dwUser, DWORD dw1, DWORD dw2)

{ NPSEQ npSeq; // pointer to sequencer data// pointer to sequencer data npSeq = (NPSEQ)dwUser; npSeq->wTimerID = 0; // invalidate timer ID (no longe// invalidate timer ID (no longe

r in use)r in use) TimerRoutine(npSeq); // handle tasks// handle tasks

}

回调函数回调函数

Page 59: 第 6 章 定时与计数技术 6.1   概  述

59

微计算机系统

void DestroyTimer(NPSEQ npSeq) { if(npSeq->wTimerID) { // is timer event pending?// is timer event pending? timeKillEvent(npSeq->wTimerID); // cancel the event// cancel the event npSeq->wTimerID = 0; }

}

取消定时器取消定时器