四川工程职业技术学院
单片机应用技术课程电子教案
Copyright ? Http://mcu.scetc.net
第 讲 15
定时器 /计数器基础
Copyright ? Http:// mcu.scetc.net 2 SiChuan Engineering Technical College-1959
本讲主要内容,
15-1.实现定时的方法
15-2.定时器 /计数器的结构和工作原理
15-3.定时器 /计数器的控制
15-4.定时器 /计数器的工作方式
15-5.定时器 /计数器应用
Copyright ? Http:// mcu.scetc.net 3 SiChuan Engineering Technical College-1959
15-1.实现定时的方法
? 软件定时
? 软件延时不占用硬件资源,但占用了 CPU时间,降低了 CPU的利用
率。例如延时程序。
? 采用时基电路定时
? 例如采用 555电路,外接必要的元器件(电阻和电容),即可构成硬
件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件
进行控制和修改,即不可编程,且定时时间容易漂移。
? 可编程定时器定时
? 最方便的办法是利用单片机内部的定时器 /计数器。结合了软件定时
精确和硬件定时电路独立的特点。
定时器 /计数器
如何使用呢?
Copyright ? Http:// mcu.scetc.net 4 SiChuan Engineering Technical College-1959
15-2.定时器 /计数器的结构和工作原理
? 定时器 /计数器的结构
定时器 /计数器的实质是加 1计数器( 16位),由高 8位和低 8位两个寄存
器组成。 TMOD是定时器 /计数器的工作方式寄存器,确定工作方式和功
能; TCON是控制寄存器,控制 T0,T1的启动和停止及设置溢出标志 。
G
A
T
E
C
/
T
M
1
M
0
G
A
T
E
C
/
T
M
1
M
0
T H 1 T L 1 T H 0 T L 0
T 1 方 式
T 0 方 式
T 1 引 脚
T 0 引 脚
机 器 周
期 脉 冲
内 部 总 线
T M O D
T C O N
外 部 中 断 相 关 位
T
F
1
T
R
1
T
F
0
T
R
0
T1计数器 T0计数器
控制单元
Copyright ? Http:// mcu.scetc.net 5 SiChuan Engineering Technical College-1959
15-2.定时器 /计数器的结构和工作原理
? 定时器 /计数器的工作原理
? 计数器输入的计数脉冲源
? 系统的时钟振荡器输出脉冲经 12分频后产生;
? T0或 T1引脚输入的外部脉冲源。
? 计数过程
? 每来一个脉冲计数器加 1,当加到 计数器为全 1(即 FFFFH) 时,再输入一个脉
冲就使计数器回零,且计数器的溢出使 TCON中 TF0或 TF1置 1,向 CPU发出中断
请求(定时器 /计数器中断允许时)。如果定时器 /计数器工作于定时模式,则表
示定时时间已到;如果工作于计数模式,则表示计数值已满。
Copyright ? Http:// mcu.scetc.net 6 SiChuan Engineering Technical College-1959
15-2.定时器 /计数器的结构和工作原理
? 定时应用
? 用作定时器:此时设置为定时器模式,加 1计数器是对内部机器周期
计数( 1个机器周期等于 12个振荡周期,即计数频率为晶振频率的
1/12)。计数值 N乘以机器周期 Tcy就是定时时间 t 。
? 计数运用
? 用作计数器:此时设置为计数器模式,外部事件计数脉冲由 T0或 T1
引脚输入到计数器。每来一个外部脉冲,计数器加 1。但单片机对外
部脉冲有基本要求:脉冲的高低电平持续时间都必须大于 1个机器周
期。 定时与计数都是利
用计数实现!!
Copyright ? Http:// mcu.scetc.net 7 SiChuan Engineering Technical College-1959
15-3.定时器 /计数器的控制
? 工作方式寄存器( TMOD)
? GATE:门控位。
? GATE= 0时,只要用软件使 TCON中的 TR0或 TR1为 1,就可以启动定时器 /计数
器工作;(即需要一个启动条件)
? GATE= 1时,要用软件使 TR0或 TR1为 1,同时外部中断引脚也为高电平时,才
能启动定时器 /计数器工作,即需要两个启动条件。
? C/T,定时 /计数模式选择位。
? C/T = 0为定时模式; C/T =1为计数模式。
? M1M0:工作方式设置位。
M0 M1 C/T GATE M0 M1 C/T GATE
D0 D1 D2 D3 D4 D5 D6 D7
定时器 T1 定时器 T0
Copyright ? Http:// mcu.scetc.net 8 SiChuan Engineering Technical College-1959
15-3.定时器 /计数器的控制
?计数器工作方式选择
M1 M0 工 作 方 式 功 能 说 明
0 0 方式 0 13位计数器
0 1 方式 1 16位计数器
1 0 方式 2 自动重装 8位计数器
1 1 方式 3 定时器 0:分成两个 8位 定时器 1:停止计数
建议不采用该工
作方式!
在精确定时采用
该工作方式!
Copyright ? Http:// mcu.scetc.net 9 SiChuan Engineering Technical College-1959
15-3.定时器 /计数器的控制
? 控制寄存器 TCON
TCON的低 4位用于控制外部中断,已在前面介绍。 TCON的高 4位用
于控制定时器 /计数器的启动和中断申请。其格式如下,
? TF1( TCON.7),T1溢出中断请求标志位。 T1计数溢出时由硬件自
动置 TF1为 1。 CPU响应中断后 TF1由硬件自动清 0。 TR1
( TCON.6),T1起 /停控制位。 1:启动 0:停止
? TF0( TCON.5),T0溢出中断请求标志位,其功能与 TF1类同。
? TR0( TCON.4),T0起 /停控制位。 1:启动 0:停止
Copyright ? Http:// mcu.scetc.net 10 SiChuan Engineering Technical College-1959
15-4.定时器 /计数器的工作方式
? 方式 0
方式 0为 13位计数,由 TL0的低 5位(高 3位未用)和 TH0的 8位组成
TL0的低 5位溢出时向 TH0进位,TH0溢出时,置位 TCON中的 TF0标志,
向 CPU发出中断请求。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
0
0
机 器 周 期
T H 0 T L 0
8 位 5 位
溢 出
T C O N
T M O D
D 0
D 7
D 7
D 0
申 请
中 断
1
13位计数器 计数 /定时选择 中断请求
该方式计算不方便,
建议不采用!
Copyright ? Http:// mcu.scetc.net 11 SiChuan Engineering Technical College-1959
TF1
TR1
TF0
TR0
GATE
C/ T
M1
M0
GATE
C/T
M1
M0
1
&
≥1
1
0
T0引脚
INT0引脚
1
0
机器周期
TH0 TL0
8位 8位
溢出
TCON TMOD
D0
D7
D7
D0 申请
中断
引脚
引脚
机器周期位 位
中断
15-4.定时器 /计数器的工作方式
? 方式 1
方式 1的计数位数是 16位,由 TL0(TL1)作为低 8位,TH0(TH1)作为高
8位,组成了 16位加 1计数器 。
16位计数器
Copyright ? Http:// mcu.scetc.net 12 SiChuan Engineering Technical College-1959
15-4.定时器 /计数器的工作方式
? 方式 2
方式 2为自动重装初值的 8位计数方式。
在方式 2下,当计数器计满 255( FFH)溢出时,CPU自动把 TH 的值装入
TL中,不需用户干预。因此特别适合于用作较精确的脉冲信号发生器。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
1
0
机 器 周 期
T H 0
T L 0
8 位
溢 出
T C O N
T M O D
D 0
D 7
D 7
D 0
申 请
中 断
8位计数器
TH1重装单元
Copyright ? Http:// mcu.scetc.net 13 SiChuan Engineering Technical College-1959
15-4.定时器 /计数器的工作方式
? 方式 3
方式 3只适用于定时器 /计数器 T0,定时器 T1方式 3时相当于 TR1=0,
停止计数。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
1
1
机 器 周 期
T H 0
T L 0
8 位
溢 出
T C O N
T M O D
D 0 D 7
D 0
申 请
中 断
机 器 周 期
8 位
申 请
中 断
溢 出
工作方式 3将 T0分成为两个独立的 8位计数器 TL0和 TH0 。
Copyright ? Http:// mcu.scetc.net 14 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
例 1:编写一段程序,让 51MCU的 P1.7输出 1ms的方波(用定时器 T1完成),
fosc=12MHz。
定时器初值计算 ( TCY=1us)此时定时时间采用 0.5ms
1、采用方式 0,N=8192-500/1=7692=1E0CH
数据格式为,1111000000001100B=0F00CH
所以( TH1) =0F0H,( TL1)=0CH
2、采用方式 1,N=65536-500/1=65036=0FE0C
所以( TH1) =0FEH,( TL1)=0CH
注意定时器的初
值计算方法!
Copyright ? Http:// mcu.scetc.net 15 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
程序流程,开 始
P1.7置 1
T1模式设置
T1初值设置 (0.5ms)
中断设置
开中断
循环等待中断
启动定时器 T1
中断入口
T1初值设置 (0.5ms)
中断返回
P1.7取反
主程序流程 中断服务子程序流程
Copyright ? Http:// mcu.scetc.net 16 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
ORG 0000H ;主程序
AJMP MAIN
ORG 001BH ;定时中断 1入口
AJMP SERT1
MAIN,SETB P1.7
MOV TMOD,#10H ;设 T1为方式 1
MOV TH1,#0FEH ;给 T1赋初值
MOV TL1,#0CH
SETB ET1 ;开定时器 T1中断
SETB EA
SETB TR1 ;启动定时器 T1
SJMP $
SERT1,MOV TH1,#0FEH ;定时器回赋初值
MOV TL1,#0CH
CPL P1.7
RETI
END
中断程序基本结构
定时器初始化、开中断
中断服务程序
Copyright ? Http:// mcu.scetc.net 17 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
例 2:编写一段程序,让 51MCU的 P1.7输出占空比为 70%,频率为 100HZ的
矩形波(用定时器完成),fosc=6MHz。
思路:此题中,高电平时间为 10ms× 70%=7ms,低电平为 3ms。对于这种高、
低电平时间不一致的波形,通常取出两个时间的相同单位时间作为定时器的
定时时间,对于不同的电平采用不同的定时次数。此例中,可用 1ms作为定
时器的定时时间。高电平段定时 7次,低电平段定时 3次,即可实现矩形波输
出。
定时器初值 =65536-1000/2=65036=FE0CH
Copyright ? Http:// mcu.scetc.net 18 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
程序流程,
主程序流程 中断服务子程序流程
开 始
P1.7置 1
T0模式设置
T0初值设置 (1ms)
中断设置
循环计数器 R0←7
循环等待中断
开中断
中断入口
P1.7取反
P1.7=1?
R0赋值为 7
中断返回
N
Y
R0赋值为 3
T0回赋初值 (1ms)
R0-1=0?
Y
N
Copyright ? Http:// mcu.scetc.net 19 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
? 程序清单,
ORG 0000H ;主程序
AJMP MAIN
ORG 000BH ;定时中断 T0入口
AJMP SERT0
MAIN,SETB P1.7
MOV TMOD,#01H ;设 T0为方式 1
MOV TH0,#0FEH ;给 T0赋初值
MOV TL0,#0CH
MOV R0,#7
SETB ET0 ;开定时器 T0中断
SETB EA
SETB TR0 ;启动定时器 T0
SJMP $
中断基本程序
结构
方式设定、初
值设定 1mS
开中断启动定
时器、等待中断
Copyright ? Http:// mcu.scetc.net 20 SiChuan Engineering Technical College-1959
15-5.定时器 /计数器应用
? 程序清单(续),
SERT1,MOV TH0,#0FEH ;定时器回赋初值
MOV TL0,#0CH
DJNZ R0,EXIT
CPL P1.7
JNB P1.7,DFZ
MOV R0,#7
SJMP EXIT
DFZ,MOV R0,#3
EXIT,RETI
END
判断 I/O状态、
更新初值