第 5 章 MCS-51 的定时器 / 计数器

23
5 MCS-51 第第第第 / 第第第 5.1 第第第 / 第第第第第第 5.2 第第第 / 第第第第第第第第 5.3 第第第 / 第第第第第第 5.4 第第第 / 第第第第第第第第 5.5 第第第 / 第第第第第第 5.6 第第第 / 第第第第第第第第第第第第第 退退 退退

description

第 5 章 MCS-51 的定时器 / 计数器. 5.1 定时器 / 计数器的结构 5.2 定时器 / 计数器的工作原理 5.3 定时器 / 计数器的控制 5.4 定时器 / 计数器的工作方式 5.5 定时器 / 计数器的精度 5.6 定时器 / 计数器的程序设计及应用实例. 退出. 5.1 定时器 / 计数器的结构. 图 5-1 定时器 / 计数器结构图 特殊功能寄存器 TH0 、 TL0 、 TH1 、 TL1 、 TMOD 、 TCON. 5.2 定时器 / 计数器的工作原理. - PowerPoint PPT Presentation

Transcript of 第 5 章 MCS-51 的定时器 / 计数器

Page 1: 第 5 章   MCS-51 的定时器 / 计数器

第 5 章 MCS-51 的定时器 / 计数器

5.1 定时器 / 计数器的结构

5.2 定时器 / 计数器的工作原理

5.3 定时器 / 计数器的控制

5.4 定时器 / 计数器的工作方式

5.5 定时器 / 计数器的精度

5.6 定时器 / 计数器的程序设计及应用实例

退出退出

Page 2: 第 5 章   MCS-51 的定时器 / 计数器

5.1 定时器 /计数器的结构

图 5-1 定时器 / 计数器结构图特殊功能寄存器 TH0 、 TL0 、 TH1 、 TL1 、 TMOD 、 TCON

TH1 TL1 TH0 TL0

TCON TMOD

微处理器CPU

7 0 7 0 7 0 7 0

P3.5 P3.4

内部总线

Page 3: 第 5 章   MCS-51 的定时器 / 计数器

5.2 定时器 /计数器的工作原理 两个 16 位的定时 / 计数器 T0(TH0T

L0) 和 T1 (TH1TL1) ,基本工作原理是加 1 计数,即对指定的脉冲信号进行加 1 操作,直到出现溢出。

(1) 定时器,对机器周期加 1 计数,因此,计数周期固定为 12/

(2) 计数器,对单片机外部输入的脉冲信号加 1计数, T0(P3.4) , T1(P3.5)

OSCf

Page 4: 第 5 章   MCS-51 的定时器 / 计数器

5.3 定时器 / 计数器的控制

5.3.1 定时器 / 计数器方式控制寄存器 TMOD

TMOD 用于控制定时器 / 汁数器的工作模式及工作方式,其字节地址为 80H ,格式如下。其中,低 4 位用于决定 T0 的工作方式,高 4 位用于决定 T1 的工作方式。

Page 5: 第 5 章   MCS-51 的定时器 / 计数器

1 、 M1 和 M0 工作方式控制位

M0 和 M1 为工作方式控制位,确定 4种工作方式,如表 5-1 所示。

M1 M0

0

0

1

1

0

1

0

1

方式

0

1

2

3

功能说明

13位定时器/计数器

16位定时器/计数器

常数能够自动重新装入的8位定时器/计数器

仅适用于T0,分为两个8位的定时器/计数器,关闭T1

Page 6: 第 5 章   MCS-51 的定时器 / 计数器

22 、 、 定时器 / 计数器方式选择位 =0 ,定时方式,对机器周期进行计数; =1 ,计数方式,对外部信号进行计数,外部信号接至 T0 ( P3.4 )或 T1 ( P3.5 )引脚。

3 、 GATE 门控位 GATE=0 时,只要用软件使 TR0 (或 TR1 )置

1 就能启动定时器 T0 (或 T1 ); GATE=1 时,只有在 INT0 (或 INT1 )引脚为高电平的情况下,且由软件使 TR0 (或 TR1 )置 1 时,才能启动定时器 T0 (或 T1 )工作

C T/C T/C T/

Page 7: 第 5 章   MCS-51 的定时器 / 计数器

5.3.2 定时器 / 计数器的控制寄存器 TCON 控制寄存器 TCON 的位地址是 88H ,可以对它进行位寻址。其功能:

(1)(1) 启动 : 设定好了定时器 / 计数器的工作方式后,通过设置控制寄存器 TCON 中的相应位来启动。

(2) 停止:要使定时器 / 计数器停止运行,也通过设置 TCON 中的相应位来实现。

(3) 标志: TCON 能标明溢出和中断情况。

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

D7 D6 D5 D4 D3 D2 D1 D0

Page 8: 第 5 章   MCS-51 的定时器 / 计数器

1. TR0: 定时器 T1 运行控制位。可由软件置 1 (或清零)来启动(或关闭)定时器 T0 ,使定时器 T0开始计数。。

2. TF0: 定时器 T0 溢出标志位。当定时器 T0 溢出时,由硬件自动使 TF1 置 1 ,并向 CPU 申请中断。 CPU 响应中断后,自动对 TF0 清零。 TF0 也可以用软件查询和清零。

3. TR1 : 定时器 T1 运行控制位。功能与 TR0 相同。4. TF0 : 定时器 T0 溢出标志位。功能与 TF0 相同。 IE1 :外部中断 1 请求标志位。 IT1 :外部中断 1 触发方式控制位。 IE0 :外部中断 0 请求标志位。 IT0 :外部中断 0 触发方式控制位。

Page 9: 第 5 章   MCS-51 的定时器 / 计数器

5.4 定时器 / 计数器的工作方式

5.4.1 工作方式 0 ( M1 M0:00 )

定时器 / 计数器工作在方式 0 时, 16 位计

数器只用了 13 位,即 THx 的高 8 位和 TLx 的

低 5 位,组成一个 13 位定时器 / 计数器。( x

=0 或 1 )

Page 10: 第 5 章   MCS-51 的定时器 / 计数器

图 5-2 定时器/计数器方式 0 结构框图

振荡器 12

C/T=0C/T=1

TL1(5位)

TH1(8位)

TF1

控制

中断

A1GATE

INT1脚

0~4 0~7

T1脚

&

≥1

TR1B

Page 11: 第 5 章   MCS-51 的定时器 / 计数器

5.4.2 工作方式 1 ( M1 M0:01 )

定时器 / 计数器工作在方式 0 时, 16 位计数器,即 THx 作为高 8 位, TLx 作为低 8位。

图 5-3 定时器/计数器方式 1 结构框图

振荡器 12

C/T=0C/T=1

TL1(8位)

TH1(8位)

TF1

控制

中断

A1GATE

INT1脚

0~7 0~7

T1脚

&

≥1

TR1B

Page 12: 第 5 章   MCS-51 的定时器 / 计数器

5.4.3 工作方式 2 ( M1 M0:10 ) 自动重装初值 8 位计数器。 TLx 作为 8 位计数器, THx 用作常数寄存器。 TLx 计数满产生溢出时,一方面置 1 溢出标志 TFx ;另一方面自动将 THx 中的内容送至 TLx ,使 8 位定时器 / 计数器从所装初值开始更新开始计数。

图 5-4 定时器/计数器方式 2 结构框图

振荡器 12

C/T=0C/T=1

TL1(8位)

TH1(8位)

TF1

控制

中断

1GATE

INT1

0~7

0 7

T1脚

&

≥1

TR1

重新装入

Page 13: 第 5 章   MCS-51 的定时器 / 计数器

5.4.4 工作方式 3 ( M1 M0:11 )将 16 位的计数器 T0 分为两个独立的 8 位计数器 TH0 和TL0 。定时器 T1 只能工作在方式 0 ~ 2 ,不需中断的场合。

图 5-5 定时器/计数器方式 3 结构框图

振荡器 12

C/T=0C/T=1

TL0(8位)

TF0

控制

中断

1GATE

INT0脚

T0脚

&

≥1

TR0

―fOSC112

TR1控制

TH0(8位)

TF1 中断―fOSC112

a

b

―fOSC1

12

Page 14: 第 5 章   MCS-51 的定时器 / 计数器

5.5 定时器 / 计数器的精度

定时 : 对机器周期(即 12/ fosc )计数。精度取决于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振 (MCS-51最高为 12MHz) 。 如: fosc=12MHz 时,机器周期 1 微秒,计数脉冲周期间隔为 1 微秒,误差为 1 微秒。 fosc=6MHz 时,机器周期 2 微秒,计数脉冲周期间隔为 2 微秒,误差为 2 微秒。 注:在使用中断情况下,如果有其它中断服务正在执行,延迟取决于其它中断服务程序执行的时间。

Page 15: 第 5 章   MCS-51 的定时器 / 计数器

计数:由于确认一次下跳变要花两个机器周期的时间,因此外部输入的计数脉冲的最高频率为振荡器频率的 1/24 。且高低电平至少保持一个机器周期 Tcy 。

Tcy: 一个机器周期

>TCY

>TCY

Page 16: 第 5 章   MCS-51 的定时器 / 计数器

另外,在读取运行中的定时器/计数器时,需要加以注意,否则读取的计数值有可能出错。原因是不可能在同一时刻同时读取 THx 和 TLx 的内容。

一种解决读错问题的方法是:先读 (THx) ,后读 (TLx) ,再读 (THx) ,若两次读得的 (THx) 相同,则可确定读得的内容是正确的。

如下面的程序,读得的 (TH0) 和 (TL0) 分别放置在 R1和 R0 内。

RDTIME: MOV A , TH0 ;读 (TH0) MOV R0 , TL0 ;读 (TL0) CJNE A , TH0 , RDTIME ;比较两次读得的 (TH0) MOV R1 , A RET

Page 17: 第 5 章   MCS-51 的定时器 / 计数器

5.6 定时器 / 计数器的程序设计及应用

使用定时器 / 计数器时必须计算计数初值。假设 T 为定时时间,计数器位数为 n ,系统时钟频率为 fosc ,计数初值为 x ,则它

们满足下列关系式: T

122

osc

f

xn

212

fn oscx T 即

Page 18: 第 5 章   MCS-51 的定时器 / 计数器

【例 5-1 】利用定时器 T0 产生 1ms 定时。由 P1.0 输出占空比为 1:1 的周期为 2ms 的方波信号。

(设时钟频率为 6MHZ )。 1. 确定计数初值 由于时钟频率为 6MHZ ,所以,机器周期为 :

12/fosc=2µs

t= ( 221313-T0 初值) 机器周期当 t=1ms 时,( 221313-T0 初值) 21010-6-6=1 1010-3-3

解得: T0 初值 =7692=1111000001100B

高 8 位 11110000B=0F0H赋给 TH0 , 低 5 位 01100B=0CH赋给 TL0 。

Page 19: 第 5 章   MCS-51 的定时器 / 计数器

2.设计程序

MOV TMOD , #00H ;设定 T0 的工作方式

SETB TR0 ; 启动 T0 工作

LOOP: MOV TH0 , #0F0H ; 给定时器 T0 送初值

MOV TL0 , #0CH LOOP1: JNB TF0 , $ ; $ 为当前指令指针地址 CLR TF0

CPL P1.0 SJMP LOOP

Page 20: 第 5 章   MCS-51 的定时器 / 计数器

【例 5-2 】 用定时器 T0 产生 25HZ 的方波。由 P1.0输出此方波(设时钟频率为 12MHZ )。

25HZ 的方波周期为 40ms ,可用定时器产生 20ms的定时,每隔 20ms改变一次 P1.0 的电平,即可得 25HZ 的方波。 1. 确定计数初值 由于时钟频率为 12MHZ ,所以,机器周期为 :12/fosc=1µs t= ( 21616-T0 初值) 机器周期当 t=20ms 时,( 221616-T0 初值) 11010-6-6=20 1010-3-3

解得: T0 初值 =45536=0B1E0H 高 8 位 0B1H赋给 TH0 , 低 8 位 0E0H赋给 TL0 。

Page 21: 第 5 章   MCS-51 的定时器 / 计数器

2. 设计程序

MOV TMOD, #01H ;设定 T0 的工作方式1

SETB TR0 ; 启动 T0 工作LOOP: MOV TH0, #0B1H ;给定时器 T0 送初值 MOV TL0 , #0E0H LOOP1: JNB TF0, $ ; $ 为当前指令指针

地址 CLR TF0 CPL P1.0 SJMP LOOP

Page 22: 第 5 章   MCS-51 的定时器 / 计数器

【例 5-3 】 用定时器 T1 产生 500us 的定时。由 P1.0输出周期为 1ms 的方波 ( 设时钟频率为 6MHZ) 。

1ms 的方波,可用定时器产生 500us 的定时,每隔500us改变一次 P1.0 的电平。

1. 确定计数初值 由于时钟频率为 6MHZ ,所以,机器周期为 :12/

fosc=2µs t= ( 288-T1 初值) 机器周期当 t= 500us 时,( 288-T1 初值) 210-6-6=500 10-6-6

解得: T1 初值 =06H 06H赋给 TL1 , 06H 同时赋给 TH1 。

Page 23: 第 5 章   MCS-51 的定时器 / 计数器

2. 设计程序

MOV TMOD , #20H ;设定 T1 的工作方式 2 MOV TH1, #06H ; 给定时器 T1 送初值

MOV TL1, #06H SETB TR1 ; 启动 T1 工作LOOP: JNB TF1 , $ ; $ 为当前指令指针地址

CLR TF1 CPL P1.0 SJMP LOOP