第 6章 定时中断第 6章 定时器 /计数器
6.1 定时器 /计数器的结构
6.2 工作模式寄存器和控制寄存器
6.3 定时器 /计数器的四种工作模式
6.4 定时器 /计数器的应用举例第 6章 定时中断
6,1 定时器 /计数器的结构
6.1.1 定时方法概述
1,软件定时
2,硬件定时
3,可编程定时器定时--可编程定时器 /计数器
2个可编程定时器 /计数器,T0,T1
第 6章 定时中断
6.1.2 定时器 /计数器的结构和原理两个 16位的可编程定时器 /计数器,T0,T1。
定时器 /计数器的 核心是内部的 16位加法计数器,分别用 TH0,TL0和 TH1,TL1表示,在使用时先给加法计数器设定初值,然后加 1计数,直到溢出,计数的次数就是最大值减去初值 。
两个特殊功能寄存器,方式寄存器和控制寄存器 。
第 6章 定时中断第 6章 定时中断
6.1.3 两种工作方式定时器计数器的功能:定时和计数 。
1,计数功能计数:对外部事件进行计数 。
外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数 。 外部输入的脉冲在负跳变时有效,
进行计数器加 1( 加法计数 ) 。
计数输入端,T0( P3.4) 和 T1( P3.5) 。
第 6章 定时中断
1.计数功能定时器 /计数器在每个机器周期的 S5P2期间采样
T0/T1引脚,若采样结果表明上一周期为高电平,下一周期为低电平,则 TL*加 1。 新的计数值在检测到负跳变后的 S3P1期间置入加法计数器 。 由于需要两个机器周期才能识别高电平到低电平的跳变,所以外部计数脉冲的频率应小于 fosc/24,且高电平与低电平的持续时间均不得小于一个机器周期 。
第 6章 定时中断第 6章 定时中断
2,定时功能实现方法:通过计数器的计数实现 。
与计数功能的不同之处,计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每个机器周期计数器加 1。
一个机器周期 =12个振荡周期,
故,计数频率为振荡频率的 1/12。
若:单片机晶振= 6MHz,则计数频率为 0.5MHz,
2微秒计数器加 1.
第 6章 定时中断定时器工作方式的特点:
当定时器 设置了 某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用 CPU的操作时间,除非定时器计满溢出,才可能中断 CPU当前操作 。
因此,定时器 /计数器是一种可编程部件。
编程,在定时器 /计数器开始工作之前,CPU必须将一些命令
(称为控制字)写入定时器 /计数器,决定 T0,T1的工作方式。
第 6章 定时中断将控制字写入定时器 /计数器的过程叫定时器 /计数器的 初始化 。
初始化内容:
1) 规定 T0,T1的工作方式;
将工作方式控制字写入 TMOD
2)规定 T0,T1的工作状态;
将工作状态控制字写入 TCON
3)赋定时 /计数初值 。
第 6章 定时中断
6.2 工作模式寄存器和控制寄存器
1,定时器控制寄存器 ( TCON,88H)
位地址 8F 8E 8D 8C 8B 8A 89 88
位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
·TR0( TR1) —— 定时器 T0(T1)运行控制位当 TR0(TR1)= 1时,启动定时器开始工作 。
当 GATE= 0时,TR0(TR1)置 1,启动定时器开始工作 。
当 GATE=1时,且 INTi*为高电平时,TR0(TR1)置 1启动定时器工作;由软件清零关闭定时器 。
第 6章 定时中断
·TF0( TF1) —— 计数溢出标志位若 有溢出,TF0( TF1) = 1
无溢出,TF0( TF1) = 0
有溢出时,当转向中断服务时,再由硬件自动 清 0。
TF0( TF1) 的使用方式:
中断方式时,作中断请求标志位来使用,
查询方式时,作查询状态位来使用 。
TF0( TF1) 也可以用程序置位或清零,例如执行指令 SETB
TF1后 TF1= 1。 所以定时器 /计数器 1的中断请求还能用程序安排产生 。
第 6章 定时中断
2,定时器工作方式寄存器 ( TMOD,89H)
作用:设置两个定时器 /计数器工作方式 。
但 TMOD寄存器 不能位寻址,只能用字节传送指令设置其内容 。
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
T1 T0
M1,M0—— 工作方式选择位 。 可形成 4种编码,对应于四种工作方式 。
第 6章 定时中断
M1 M0 工作方式 功 能 描 述
0 0
0 1
1 0
1 1
方式 0
方式 1
方式 2
方式 3
13位计数器
16位计数器自动重装初值的 8位计数器定时器 0:分成两个 8位计数器定时器 1:停止计数第 6章 定时中断
· — — 定时方式或计数方式选择位
= 0 定时工作方式
= 1 计数工作方式
·GATE—— 门控位
GATE= 0 以运行控制位 TR0( TR1) 启动定时器
GATE= 1 以外中断请求信号 和 TR0(
TR1) 共同启动定时器复位时,TMOD= 0。
举例如下:
T/C
T/C
T/C
I N T 1 0I N T 或第 6章 定时中断设 定时器 1为定时工作方式,要求由软件启动定时器 1,
按方式 2工作。定时器 0为计数方式,要求由软件启动定时器 0,按方式 1工作。
MOV TMOD,#25H。
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE
0
C/T
0
M1
1
M0
0
GATE
0
C/T
1
M1
0
M0
1
第 6章 定时中断
6.3 定时器 /计数器的四种工作模式四种工作方式,即方式 0,方式 1,方式 2和方式 3。
其中,方式 0,1和 2下,T0和 T1的工作方式相同,
方式 3下,两个定时器的工作方式不同 。
6.3.1 方式 0
13位计数结构的工作方式 。
图 6-2是定时器 /计数器 0在工作方式 0下的逻辑结构 。
T1的结构和操作与 T0完全相同 。
第 6章 定时中断图 6-2 T0(或 T1)方式 0结构
TM OD 0
TM OD 1
TM OD 2
TM OD 3
M0
M1
C/T
GA TE
0
0
振荡器 ÷12
T0引 脚
INT O引脚
1
≥1
&
A
B
T H0
(8位 )
T L0
(5位 )
C/T =1
C/T =0
控制
K
TC ON
中断
TF0
TR0
TM OD
第 6章 定时中断当 GATE= 0时,
若 TR0=1,接通计数控制 K,启动 T0在原计数值上加 1计数,直至溢出 。
若 TR0= 0,则关断控制开关,停止计数 。
当 GATE= 1,且 TR0= 1时,
或门,与门全部打开,外信号电平 通过引脚直接开启或关断定时器计数 。
输入 1电平时,允许计数,否则停止计数 。
0INT
第 6章 定时中断由于定时器 /计数器以加 1方式计数,
当定时器 /计数器用于 计数工作 方式时,假定要求的计数长度为 N,则应装入定时器 /计数器的初值
X= 213- N。
在方式 0下,计数的长度范围为 1~ 8192。
第 6章 定时中断当工作于定时状态时,由于定时器 /计数器是计数内部的机器周期,每个机器周期包括 12个振荡周期,若晶振频率为
12MHz,则:
机器周期 Tp= 12/晶振频率= 12/(12× 106)= 1us
若需要的定时时间,Tc,
则需要的机器周期数 N= Tc/Tp。
则应装入定时器 /计数器的初值 X= 213- N。
若晶振频率为 12MHz,则当 X= 8191时,具有最小的定时时间为 1us;
当 X= 0时,具有最大的定时时间为 8192us。
第 6章 定时中断
6.3.2 方式 1
计数器由 TH 8位和 TL8位构成 。
当定时器 /计数器用于计数工作方式时,假定要求的计数长度为 N,则应装入定时器 /计数器的初 值 X= 216- N。
在方式 0下,计数的长度范围为 1~ 65536。
当工作于定时状态时,若需要的定时时间为 Tc,则需要的机器周期数 N= Tc/Tp( Tp=机器周期 ),则应装入定时器 /计数器的初值 X= 216- N。
若晶振频率为 12MHz,则当 X= 65535时,具有最小的定时时间为 1us;
当 N= 65536时,具有最大的定时时间为 65536us≈65ms。
第 6章 定时中断
M0
M1
C/T
GATE
中断
INTO引脚
1
T0引脚振荡器
0
1
≥1 B
&
C/T=1
A
÷12
C/T=0
TH0
(8位)
TL0
(8位)
控制
K
TR0
TF0
图 6-3 T0(或 T1)方式 1结构 ――16 位计数器第 6章 定时中断
6.3.3,方式 2
方式 2具有自动重新加载功能,即自动加载计数初值 。
在该工作方式下,把 16位计数器分为两部分,即以 TL作计数器,
以 TH作预置寄存器,初始化时把计数初值分别装入 TL和
TH中 。
当计数溢出时,由预置寄存器 TH以硬件方法 自动给计数器
TL重新加载,继续计数,循环重复 。
第 6章 定时中断当定时器 /计数器用于计数工作方式时,假定要求的计数长度为 N,则应装入定时器 /计数器的初值 X= 28- N。
在方式 0下,计数的长度范围为 1~ 256。
当工作于定时状态时,若需要的定时时间为 Tc,则需要的机器周期数 N= Tc/Tp,(Tp为机器周期 ),则应装入定时器 /
计数器的初值 X= 28- N。
若晶振频率为 12MHz,则当 X= 255时,具有最小的定时时间为 1us;当 X= 0时,具有最大的定时时间为 256us。
第 6章 定时中断图 6-4 T0(或 T1)方式 2结构 ――8 位计数器
GATE
C/T
M1
M0
中断
C/T= 1
INTO 引脚
T0引 脚
1
≥1
&
A
B
重新装入
TH1
(8位 )
控制
TR0
振荡器
0
1 ÷12
C/T= 0
TH0
(8位 )
TF0
第 6章 定时中断图 6-4 T0(或 T1)方式 2结构 ――8 位计数器第 6章 定时中断
6.3.4,方式 3
前三种工作方式下,T0和 T1的设置和使用是完全相同的 。 但是在工作方式 3下,二者的设置和使用却是不同的,因此要分开介绍 。
( 1) 在工作方式 3下,T0被拆成两个独立的 8位计数器 TL0和
TH0。 其中 TL0既可以作计数使用,又可以作定时使用。
T0的各控制位、引脚和中断源,即,GATE,TR0,TF0
和 T0( P3.4)引脚,( P3.2)引脚全归它使用。
功能和操作与方式 1完全相同,而且逻辑电路结构也很相似
,如图 6-5所示。
T/C 0INT
第 6章 定时中断图 6-5 T0工作方式 3逻辑结构
M0
M1
C/T
GA TE
0
0 振荡器 ÷12
T0引 脚
C/T =1
C/T =0
INT O引脚
≥1
1
A
&
B
控制控制
T L0
(8位 )
T H0
(8位 )
TR1
TF1
TF0
TR0
中断中断第 6章 定时中断而此时 TH0只可用作简单的定时器使用 。 而且由于 T0的控制位已被 TL0独占,因此只好借用定时器 /计数器 1的控制位
TR1和 TF1,即以计数溢出去置位 TF1,而定时的启动和停止则受 TR1的状态控制 。
由于 TL0既能作定时器使用也能作计数器使用,而 TH0
只能作定时器使用,却不能作计数器使用。因此,在工作方式 3下,定时器 /计数器 0可以构成两个定时器或一个定时器和一个计数器。
第 6章 定时中断
TH1
(8位)
TL1
(8或5位)
12分频 OSC
C/T=0
C/T=1
T1(P3.5)
串行口串行口
TH1
(8位)
TL1
(8位)
12分频
C/T=0
C/T=1
T1(P3.5)
OSC
重装入
( 2) 工作方式 3下的定时器 /计数器 1
如果 T0已工作在工作方式 3,则 T1只能工作在方式 0,1或方式 2下,因为它的运行控制位 TR1及计数溢出标志位 TF1已被 T0借用,如图 6-6所示 。
第 6章 定时中断
TH1
(8位)
TL1
(8或5位)
12分频 OSC
C/T=0
C/T=1
T1(P3.5)
串行口串行口
TH1
(8位)
TL1
(8位)
12分频
C/T=0
C/T=1
T1(P3.5)
OSC
重装入此时,T1通常是作为串行口的波特率发生器使用,以确定串行通信的速率 。 因为已经没有计数溢出标志位 TF1可供使用,因此只能把计数溢出直接送给串行口 。 若将 T1强行设置为模式 3,就会使 T1立即停止工作 。
第 6章 定时中断
6.4 定时器 /计数器的应用举例主要任务,编程 。
编程时应注意的问题:
1.能正确写入控制字 ( 即初始化定时器 /计数器 )
2.会进行定时 /计数初值的计算 。
第 6章 定时中断定时器 /计数器的初始化:
(1)主要是设置 4个特殊功能寄存器的值,TMOD、
TCON,TL0(TL1),TH0(TH1)。它们都只能字节寻址进行设置。
(2)设置定时器中断的开放、禁止和优先级,直接对 IE和 IP赋值。
SETB ET
SETB EA
CLR ET
(3) 启动定时器 /计数器工作,即写入 TCON,可字节寻址,也可位寻址。
第 6章 定时中断写入控制字的次序:
1,把 工作方式控制字写入 TMOD寄存器;
2,把 定时 /计数初值装入 TL0,TH0( 或 TL1,TH1)
3,置位 TR0( 或 TR1) 以启动计数
4,置位 ET0( 或 ET1) 允许定时器 /计数器中断 ( 如果需要 ) ;
5,置位 EA使 CPU开放中断 。
第 6章 定时中断定时器 /计数器初值的计算:
计数初值=最大计数值-需要计数的值最大计数值在不同工作方式下是不同的,
方式 0为,8192
方式 1为,65536
方式 2为,256
方式 3为,256
第 6章 定时中断例 1:设单片机晶振频率 fosc= 6MHz,使用定时器 1以方式 0
产生周期为 500us的等宽正方波脉冲,并由 P1.7输出 。 以查询方式完成 。
( 1) 计算计数初值实现正方波脉冲的方法,P1.0端以 250us为周期交替输出高低电平 。
则,定时时间应为 250us。
若晶振为 6MHz,则一个机器周期= 2us。
设待求的计数初值为 X,则:
( 213- X) × 2us= 250us
得,X= 8067= 11111100 00011B
TH1= FCH,TL1= 03H。
第 6章 定时中断
( 2) TMOD寄存器初始化
T1在方式 0下,M1M0= 00;
定时功能,应 使 = 0;
实现 T1的运行控制,则 GATE= 0。
所以,TMOD= 00H。
( 3) 由定时器控制寄存器 TCON中的 TR1位控制定时的启动和停止,则 TR1= 1,启动; TR1= 0,停止 。
T/C
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
0 0 0 0 0 0 0 0
第 6章 定时中断
( 4) 程序清单:
ORG 1000H
MOV TMOD,#00H ;设置 T1工作方式 0
MOV TH1,#0FCH ;设置计数初值
MOV TL1,#03H
MOV IE,#00H ;禁止中断
SETB TR1 ;启动 T1运行
SETB P1.7 ;高电平
LOOP,JB TF1,LOOP1 ;查询计数溢出
AJMP LOOP
第 6章 定时中断
LOOP1,MOV TH1,#0FCH ;重新设置计数初值
MOV TL1,#03H ;
CLR TF1 ;计数溢出标志位清零
CPL P1.7 ;输出取反
AJMP LOOP ;重复循环
END ;程序结束第 6章 定时中断例 2:设单片机晶振频率 fosc= 6MHz,使用 定时器 1以方式 1产生周期为 500us的等宽正方波脉冲,并由 P1.7输出 。 以中断方式完成 。
( 1) 计算计数初值设待求的计数初值为 X,则:
( 216- X) × 2us= 250us
得,X= 65411= FFA1H,
则,TH1= FFH,TL1= A1H。
( 2) TMOD寄存器初始化第 6章 定时中断位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
0 0 0 1 0 0 0 0
M1M0= 01,C/T = 0,GATE= 0
所以,TMOD= 10H
第 6章 定时中断
( 3) 程序清单:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP TIMER1
ORG 1000H
MAIN,MOV TMOD,#10H ;设置 T1工作方式 1
MOV TH1,#0FFH ;设置计数初值
MOV TL1,#A1H ;
SETB EA ;开中断第 6章 定时中断
SETB ET1 ;定时器 1允许中断
LOOP,SETB TR1 ;定时开始
HERE,SJMP $ ;等待中断
TIMER1,MOV TH1,#0FFH ; T1中断服务程序;重新设置计数初值
MOV TL1,#A1H ;
CPL P1.7
RETI
END ;程序结束第 6章 定时中断例 3:有一自动罐装药粒系统,每瓶罐装药粒 100片,每满一瓶,累加器 A加 1操作,若满 200瓶,向 P1.0输出 0,然后停止计数 。 要求用 定时器 1以工作方式 2计数 。 ( 查询方式 )
( 1) 计算计数初值设待求的计数初值为 X,则:
( 28- X) = 100
得,X= 156= 38H,
则,TH1= 38H,TL1= 38H。
( 2) TMOD寄存器初始化第 6章 定时中断
M1M0= 10,= 1,GATE= 0
因此,TMOD= 60H
( 3) 程序清单:
ORG 1000H
MOV TMOD,#60H ;设置 T1工作方式
MOV TH1,#38H ;设置计数初值
MOV TL1,#38H
T/C
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
0 1 1 0 0 0 0 0
第 6章 定时中断
MOV A,#00H
MOV IE,#00H ;禁止中断
SETB TR1 ;启动计数
CHECK,JBC TF1,LOOP ;查询计数溢出
AJMP CHECK
LOOP,INC A
CJNE A,#200,CHECK
CLR P1.0 ;清零 P1.0
CLR TR1 ;停止计数器 1的运行
END ;程序结束第 6章 定时中断例 4 设定时器 /计数器 T0工作于方式 3,TL0和 TH0作为两个独立的 8位定时 /计数器分别产生 250us和 500us的定时中断,使 P1.1
和 P1.2产生 500us和 1000us的方波 。 设晶振频率为 6MHz。
( 1) 计算计数初值
TL0的计数初值= 256- 250us/2us=131= 83H
TH0的计数初值= 256- 500us/2us=06H
因此,TL0= 83H,TH0= 06H。
( 2) TMOD寄存器初始化第 6章 定时中断
M1M0= 11,= 0,GATE= 0,
同时设 T1工作于方式 0
因此,TMOD= 03H
T/C
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 GATE C/T M1 M0 GATE C/T M1 M0
0 0 0 0 0 0 1 1
第 6章 定时中断
( 3) 程序清单:
ORG 0000H
AJMP MAIN
ORG 000BH ; T0
AJMP TIMER0
ORG 001BH ; T1
AJMP TIMER1
ORG 1000H
MAIN,MOV TMOD,#03H
MOV TL0,#83H
MOV TH0,#06H
第 6章 定时中断
SETB TR0 ;启动定时器运行
SETB TR1
SETB ET0 ;允许定时 /计数器中断
SETB ET1
SETB EA ;总中断允许
SJMP $ ;等待中断
TIMER0,MOV TL0,#83H
CPL P1.1
RETI
TIMER1,MOV TH0,#06H
CPL P1.2
RETI
END