第 6章 定时器 /计数器
6.1 定时器控制、状态寄存器
6.2 定时器工作方式
6.3 计算时间常数
6.4 定时器应用
MCS-51 计数 /定时器的实质实质是计数器,脉冲每一次下降沿,计数寄存器数值将加 1.
计数的脉冲如果来源于单片机内部的 晶振 由于其周期极为准确,这时称为 定时器 。
计数的脉冲如果来源于单片机 外部的引脚,由于其周期一般不大准确,这时称为 计数器 。
+1计数器 溢出 中断脉冲控制开关
8031 有 2个可独立控制的 16位定时器 /计数器,T0,T1
6.1定时器控制、状态寄存器
1)TMOD定时器方式寄存器( 89H)
1)功能选择位 C/T:
=0,定时功能,计数内部机器周期脉冲;
=1,计数功能,计数引脚 T0(T1)输入的负脉冲。
2)方式选择位 M1,M0:
4种工作方式:
3)门控方式选择位 GATE
计数器启动方式的选择确定定时器工作方式指令:
MOV TMOD,#方式字例:设 T0用方式 2非门控定时,T1用方式 1门控计数。
MOV TMOD,#0D2H ; 1101 0010 B
G A T E C / T M1 M0 G A T E C / T M1 M0
T1 T0
M1 M0 方式 功能描述
0 0 0 13 位
0 1 1 16 位
1 0 2 8 位自动重装
1 1 3 T0 为两个 8 位
6.2 定时器工作方式由方式选择位 M1,M0设定
1.方式 0
13位定时 /计数器。 THx 8位和 TLx低 5位组成 13位加 1计数器,
此种方式与 MCS- 48系列兼容,如果不是为了兼容的目的,一般不用方式 0.
方式 0的全部功能,方式 1都可以代替。
下面讲解方式 1
2,方式 1
16位定时 /计数器 。 THx8位和 TLx8位组成 16位加 1计数器最大计数脉冲个数,1~ 65536(216)
最长定时时间 (晶振 12MHz T=1?s),1?s ~ 65536× T= 65.54ms
非门控方式,当 GATE= 0,
控制权由 TRx 决定
TRx= 1 计数开始
TRx = 0 计数停止门控方式,当 GATE= 1,TRx= 1
控制权由 INTx 决定
INTx= 1 计数开始
INTx = 0 计数停止启动计数方式:
3,方式 2
自动恢复初值 8位定时 /计数器。 TLx为 8位加 1计数器,
THx为 8位初值暂存器。
用于需要重复定时和计数的场合。
最大计数值,256 (28)
最大定时时间 (晶振 12MHz时 T=1?s),256?s
4.方式 3
T0分成 2个 8位定时器,TL0定时 /计数器和 TH0定时器
TL0占用 T0控制位,C/T,TR0,GATE;
TH0占用 T1控制位,TR1。
T1不能使用方式 3工作
6.3 计算时间常数 X(计算初值 )
计数功能,X= 2n -计数值 n,8/13/16
定时功能,X= 2n - t/T t:定时时间( s)
T:机器周期 = 12/晶振频率如:晶振为 12MHz时,T= 12/12 MHz= 12÷ ( 12× 10-6)(秒)= 1× 10-6= 1us
4.4 MCS-51定时器的应用定时器初始化编程:使用定时器工作之前,先写入控制寄存器,
确定好定时器工作方式初始化编程格式:
MOV TMOD,# 方式字 ;选择方式
MOV THx,#XH ;装入 Tx时间常数
MOV TLx,#XL
SETB EA ;开 Tx中断
SETB ETx
SETB TRx ;启动 Tx定时器例:由 P1.0输出方波信号,周期为 2ms,设
fosc=12MHz。
2ms
解:每隔 1ms改变一次 P1.0的输出状态。用 T0非门控方式 1定时。
计算时间常数,X = 216 - t/T = 216 –(1/1000)/10-6 = 65536-1000 = 64536 = FC18H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP PT0INT
ORG 0100H
MAIN,MOV TMOD,#01H
MOV TL0,#18H
MOV TH0,#0FCH
SETB EA
SETB ET0
SETB TR0
HERE,SJMP HERE
PT0INT,MOV TL0,#18H
MOV TH0,#0FCH
CPL P1.0
RETI
例 P1.7驱动 LED亮 1秒灭 1秒地闪烁,设时钟频率为 6MHz。
长定时方法:增加一个软件计数器或一个硬件计数器。
硬件方式,T0定时,T1计数 T0的定时跳变信号 P1.0的负跳变次数,计满 5个跳变为 1秒。
START,MOV TMOD,#61H
MOV TL1,#0FBH
MOV TH1,#0FBH
CLR P1.0
SETB TR1
LOOP1,CPL P1.7
LOOP2,MOV TL0,#3CH
MOV TH0,#0B0H
SETB TR0
LOOP3,JBC TF0,LOOP4
SJMP LOOP3
LOOP4,CPL P1.0
JBC TF1,LOOP1
SJMP LOOP2
例 定时器外部引脚 T0(T1)用作外部中断信号输入端。
外部负脉冲引起中断请求,选计数方式,时间常数为 FFH。
例:门控方式测量正脉冲宽度解,INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数 。
设脉宽小于 65.5ms
等待查询 INT0,正脉冲过后,读出 TH1TL1。
START,MOV TMOD,#90H
MOV TL1,#0H
MOV TH1,#0H
WAIT1,JB P3.3,WAIT1
SETB TR1
WAIT2,JNB P3.3,WAIT2
WAIT3,JB P3.3,WAIT3
CLR TR1
MOV R2,TL1
MOV R3,TH1
…
TR1=1 T1启动 TR1=0
T1停止
INT1
设脉宽大于 65.5ms,中断方式记录 TH1TL1溢出中断次数。
SETB TR1
SETB ET1 ;开 T1中断
SETB EA
WAIT2,JNB P3.3,WAIT2;等待正脉冲到来
WAIT3,JB P3.3,WAIT3;等待正脉冲结束
CLR TR1 ;关闭 T1
MOV IE,#00 ;关闭中断
MOV R2,TL1 ;读出 T1
MOV R3,TH1
LCALL PPS ;计算脉宽
HERE,SJMP HERE ;其他任务
PRIC,INC R4 ;记录溢出次数
RETI
PPS,… ;计算脉宽子程序计算脉宽的子程序的计算式如下:
脉宽 t = ( R4 × 216 + R3 R2 ) × T ( T为机器周期)
6.1 定时器控制、状态寄存器
6.2 定时器工作方式
6.3 计算时间常数
6.4 定时器应用
MCS-51 计数 /定时器的实质实质是计数器,脉冲每一次下降沿,计数寄存器数值将加 1.
计数的脉冲如果来源于单片机内部的 晶振 由于其周期极为准确,这时称为 定时器 。
计数的脉冲如果来源于单片机 外部的引脚,由于其周期一般不大准确,这时称为 计数器 。
+1计数器 溢出 中断脉冲控制开关
8031 有 2个可独立控制的 16位定时器 /计数器,T0,T1
6.1定时器控制、状态寄存器
1)TMOD定时器方式寄存器( 89H)
1)功能选择位 C/T:
=0,定时功能,计数内部机器周期脉冲;
=1,计数功能,计数引脚 T0(T1)输入的负脉冲。
2)方式选择位 M1,M0:
4种工作方式:
3)门控方式选择位 GATE
计数器启动方式的选择确定定时器工作方式指令:
MOV TMOD,#方式字例:设 T0用方式 2非门控定时,T1用方式 1门控计数。
MOV TMOD,#0D2H ; 1101 0010 B
G A T E C / T M1 M0 G A T E C / T M1 M0
T1 T0
M1 M0 方式 功能描述
0 0 0 13 位
0 1 1 16 位
1 0 2 8 位自动重装
1 1 3 T0 为两个 8 位
6.2 定时器工作方式由方式选择位 M1,M0设定
1.方式 0
13位定时 /计数器。 THx 8位和 TLx低 5位组成 13位加 1计数器,
此种方式与 MCS- 48系列兼容,如果不是为了兼容的目的,一般不用方式 0.
方式 0的全部功能,方式 1都可以代替。
下面讲解方式 1
2,方式 1
16位定时 /计数器 。 THx8位和 TLx8位组成 16位加 1计数器最大计数脉冲个数,1~ 65536(216)
最长定时时间 (晶振 12MHz T=1?s),1?s ~ 65536× T= 65.54ms
非门控方式,当 GATE= 0,
控制权由 TRx 决定
TRx= 1 计数开始
TRx = 0 计数停止门控方式,当 GATE= 1,TRx= 1
控制权由 INTx 决定
INTx= 1 计数开始
INTx = 0 计数停止启动计数方式:
3,方式 2
自动恢复初值 8位定时 /计数器。 TLx为 8位加 1计数器,
THx为 8位初值暂存器。
用于需要重复定时和计数的场合。
最大计数值,256 (28)
最大定时时间 (晶振 12MHz时 T=1?s),256?s
4.方式 3
T0分成 2个 8位定时器,TL0定时 /计数器和 TH0定时器
TL0占用 T0控制位,C/T,TR0,GATE;
TH0占用 T1控制位,TR1。
T1不能使用方式 3工作
6.3 计算时间常数 X(计算初值 )
计数功能,X= 2n -计数值 n,8/13/16
定时功能,X= 2n - t/T t:定时时间( s)
T:机器周期 = 12/晶振频率如:晶振为 12MHz时,T= 12/12 MHz= 12÷ ( 12× 10-6)(秒)= 1× 10-6= 1us
4.4 MCS-51定时器的应用定时器初始化编程:使用定时器工作之前,先写入控制寄存器,
确定好定时器工作方式初始化编程格式:
MOV TMOD,# 方式字 ;选择方式
MOV THx,#XH ;装入 Tx时间常数
MOV TLx,#XL
SETB EA ;开 Tx中断
SETB ETx
SETB TRx ;启动 Tx定时器例:由 P1.0输出方波信号,周期为 2ms,设
fosc=12MHz。
2ms
解:每隔 1ms改变一次 P1.0的输出状态。用 T0非门控方式 1定时。
计算时间常数,X = 216 - t/T = 216 –(1/1000)/10-6 = 65536-1000 = 64536 = FC18H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP PT0INT
ORG 0100H
MAIN,MOV TMOD,#01H
MOV TL0,#18H
MOV TH0,#0FCH
SETB EA
SETB ET0
SETB TR0
HERE,SJMP HERE
PT0INT,MOV TL0,#18H
MOV TH0,#0FCH
CPL P1.0
RETI
例 P1.7驱动 LED亮 1秒灭 1秒地闪烁,设时钟频率为 6MHz。
长定时方法:增加一个软件计数器或一个硬件计数器。
硬件方式,T0定时,T1计数 T0的定时跳变信号 P1.0的负跳变次数,计满 5个跳变为 1秒。
START,MOV TMOD,#61H
MOV TL1,#0FBH
MOV TH1,#0FBH
CLR P1.0
SETB TR1
LOOP1,CPL P1.7
LOOP2,MOV TL0,#3CH
MOV TH0,#0B0H
SETB TR0
LOOP3,JBC TF0,LOOP4
SJMP LOOP3
LOOP4,CPL P1.0
JBC TF1,LOOP1
SJMP LOOP2
例 定时器外部引脚 T0(T1)用作外部中断信号输入端。
外部负脉冲引起中断请求,选计数方式,时间常数为 FFH。
例:门控方式测量正脉冲宽度解,INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数 。
设脉宽小于 65.5ms
等待查询 INT0,正脉冲过后,读出 TH1TL1。
START,MOV TMOD,#90H
MOV TL1,#0H
MOV TH1,#0H
WAIT1,JB P3.3,WAIT1
SETB TR1
WAIT2,JNB P3.3,WAIT2
WAIT3,JB P3.3,WAIT3
CLR TR1
MOV R2,TL1
MOV R3,TH1
…
TR1=1 T1启动 TR1=0
T1停止
INT1
设脉宽大于 65.5ms,中断方式记录 TH1TL1溢出中断次数。
SETB TR1
SETB ET1 ;开 T1中断
SETB EA
WAIT2,JNB P3.3,WAIT2;等待正脉冲到来
WAIT3,JB P3.3,WAIT3;等待正脉冲结束
CLR TR1 ;关闭 T1
MOV IE,#00 ;关闭中断
MOV R2,TL1 ;读出 T1
MOV R3,TH1
LCALL PPS ;计算脉宽
HERE,SJMP HERE ;其他任务
PRIC,INC R4 ;记录溢出次数
RETI
PPS,… ;计算脉宽子程序计算脉宽的子程序的计算式如下:
脉宽 t = ( R4 × 216 + R3 R2 ) × T ( T为机器周期)