单片机-第六章-定时器计数器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
振荡器 Tx
12分频
C/T=0
TLx THx (8位) (8位)
TFx
中断请求
C/T=1 控制 TRx
定时器的实质是一个加1计数器。
C/T =0 ,为定时器方式。
计数信号由片内振荡电路提供,振荡脉冲12分频送给计 数器,每个机器周期计数器值增1。
例如:如果晶振频率为12MHz,则最高计数频率为 0.5MHz
定时时间=(213-定时初值)×机器周期 最大定时时间:213×机器周期
C/T=1,计数方式。计数脉冲由P3.4引脚输入。 C/T=0时,定时方式。
图6-4 模式0的逻辑结构图
6.3.2 模式1的逻辑结构及应用
M1M0=01时,选择模式1。逻辑结构如图所示。 T0的结构:16位定时器/计数器。
TL0:存放计数初值的低8位。 TH0存放计数初值的高8位; 定时时间=(216-定时初值)×机器周期 最大定时时间:216×机器周期
11
表6-1 定时器/计数器的工作模式
工作模式 模式0 模式1
功能 13位定时器/计数器 16位定时器/计数器
模式2 模式3
8位自动重置定时器/计数器
定时器0:TL0为8位定时器/计数器, TH0为8位定时器。 定时器1:无此方式
2、T0、T1的控制寄存器TCON
D7 D6 D5 D4 D3 D2 D1 D0
定时器的分析过程。
工作方式选择
需要产生周期信号时,选择定时方式。定时时间到了对输 出端进行周期性的输出即可。
工作模式选择
根据定时时间长短选择工作模式。
首选模式2,可以省略重装初值操作。
定时时间计算:周期为1000µs的方波要求定时器的定 时时间为500µs,每次溢出时,将P1.0引脚的输出取反, 就可以在P1.0上产生所需要的方波。
while (1)
{
while(!TF0) ;//查询计数溢出
TF0=0;
P1_0=~P1_0;
}
}
汇编语言程序:
MAIN:
MOV
TMOD,#02H
;主程序
MOV
TL0,#06H
MOV
TH0,#06H
SETB
TR0
LOOP:
JNB
TF0,$ ;查询计数溢出
CLR
TF0
CPL
P1.0
SJMP LOOP
{
//中断服务程序
TL0=0x0c;
TH0=0xfe;
//定时器重赋初值
P1_0=~P1_0;
//P1.0取反,输出方波
}
汇编语言程序:
ORG
0000H
SJMP MAIN
ORG
000BH
LJMP TIME0
MAIN: MOV
模式1 MOV MOV SETB SETB SETB SJMP $
TMOD,#01H
重新装入
TH1 (8位)
思考:T0工作在模式3,T1怎么进行方式设置?
1、定时器/计数器工作模式的选择方法 (1)首先计算计数值N (2)确定工作模式
原则是尽可能地选择模式2 若 N ≤ 256选择模式2,否则选择模式1 (3)如果需要增加一个定时器/计数器
选择模式3。
2、定时器/计数器初值X的计算方法
TCON (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
定时器的控制寄存器 TF1、TF0:T1、T0的溢出标志位 计数溢出,TFx=1。 中断方式:自动清零; 查询方式:软件清零。
TR1、TR0:T1、T0启停控制位。 置1,启动定时器; 清0,关闭定时器。
IE1、IE0:外部中断1、0请求标志位
void main( )
{ TMOD=0x01;
//T0做定时器,模式1
TL0=0x0c;
TH0=0xfe;
//设置定时器的初值
ET0=1;
//允许T0中断
EA=1;
//允许CPU中断
TR0=1;
//启动定时器
while(1); //等待中断
}
void time0_int(void) interrupt 1
⑤引脚P3.5、P3.4、P1.0,输入计数脉冲。
⑥定时器T0、T1和T2是3个中断源,可以向CPU 发出中断请求。
⑦定时器/计数器T2增加了两个8位的寄存器:
RCAP2H和RCAP2L。
⑧特殊功能寄存器之间通过内部总线和控制逻辑电 路连接起来。
6.1.2 MCS-51单片机定时器的工作原理
定时器/计数器T0、T1、T2 的内部结构简图如下图所示。
ET0
;允许定时器0中断
SETB
EA
;允许CPU中断
SETB
TR0
;启动定时器0
SJMP
$
;等待中断
END
采用查询方式处理的程序:
C语言程序:
# include <reg52.h>
sbit P1_0=P1^0;
void main()
{
TMOD=0x02;
TL0=0x06;
TH0=0x06;
TR0=1;
结构:TL0、TH0分为两个独立的8位计数器 TL0: 8位定时器/计数器
使用T0所有的资源和控制位 TH0:8位定时器
使用T1所有的资源(中断向量、中断控制ET1、PT1)和控 制位(TR1、TF1)
图6-7 模式3下T0的逻辑结构图
2、T0模式3时T1的工作模式 T1可以模式0~模式2工作。 T1的结构如图6-9所示
C/T—定时或计数方式选择位 。 C/T=0时,为定时器 C/T=1时,为计数器 采样过程:CPU在每机器周期S5P2期间,输入信号进 行采样。若前一机器周期采样值为1,下一机器周期采样值 为0,则计数器增1,随后的机器周期S3P1期间,新的计数 值装入计数器。
M1、M0——工作模式选择位。
M1 M0 00 01 10
TL0,#0CH TH0,#0FEH ET0 EA TR0
;T0定时,
;置定时初值
;定时器T0开中断 ;CPU开中断 ;启动定时器T0 ;等待定时器溢出
TIME0:
;中断服务程序
MOV TL0,#0CH
MOV
TH0,#0FEH
;重装定时初值
CPL
P1.0
;P1.0取反
RETI
;中断返回
END
例 设单片机的振荡频率为12MHz,用定时器/计数器 0编程实现从P1.0输出周期为500μs的方波。
定时初值计算: 振荡频率为12MHz,则机器周期为1µs。 设定时初值为X, (65536-X)×1µs=500µs X=65036=0FE0CH
定时器的初值为:TH0=0FEH,TL0=0CH
C语言程序:
Fra Baidu bibliotek
#include <reg52.h> //包含特殊功能寄存器库
sbit
P1_0=P1^0; //进行位定义
第6章 MCS-51单片机定时器/计数器
6.1 MCS-51定时器/计数器的结构及原理 6.2 MCS-51定时器/计数器的的控制 6.3 MCS-51定时器/计数器的工作方式 6.4 定时器应用举例
6.1 定时器/计数器的结构及原理
主要内容 6.1.1 MCS-51单片机定时器的结构 6.1.2 MCS-51单片机定时器的工作原理
C/T =1 ,为计数方式。
计数信号由Tx引脚(P3.4、P3.5和P1.0)输 入,每输入一有效信号,相应的计数器中的内 容进行加1。
控制信号TRx=1时,定时器启动。
当定时器由全1加到全0时计满溢出,从0开始继 续计数,TFx=1 ,向CPU申请中断。
6.2 定时器/计数器的控制
1、T0、T1 工作模式寄存器TMOD 功能:确定定时器的工作模式。 其格式如图所示:
分析:方法同例6-1 定时时间:
方波周期为500μs,定时250μs。 模式选择:
定时器0可以选择模式0、1和2。模式2最大的定时时间 为256μs,满足250μs的定时要求,选择模式2。
(1)初值计算
(256-X)×1µs=250µs
X=6;
则TH0=TL0=6
(2)程序:
采用中断处理方式的程序 :
C语言程序 :
# include
<reg52.h> //包含特殊功能寄存器库
sbit P1_0=P1^0;
void
main( )
{ TMOD=0x02;
//选择工作模式
TL0=0x06;
TH0=0x06;
//为定时器赋初值
ET0=1;
//允许定时0中断
EA=1;
TR0=1; //启动定时器0
while(1); //等待中断
TMOD D7 D6 D5 D4
D3
D2 D1 D0
(89H) GATE C/T M1 M0 GATE C/T M1 M0
图6-3 定时器方式寄存器TMOD
GATE——外部门控制位。
GATE=1,使用外部控制门。 TRx=1, =1时,启动定时器。
P3.2(P3.3)
GATE=0,不使用外部门控制计数器
6.1.1 MCS-51单片机定时器的结构
MCS-51单片机定时器/计数器逻辑结构图:
MCS-51主要由如下构成:
① 三个16位的可编程定时器/计数器:定时器/计 数器0、1和2。
② 每个定时器有两部分构成:THx和TLx
③ 特殊功能寄存器T2MOD和T2CON ,主要对 T2进行控制。
④ 特殊功能寄存器TMOD和TCON ,主要对T0 和T1进行控制。
T2有4种工作方式∶自动重装、捕获和波特率发生器、可 编程时钟输出。
增加了两个引脚: T2(P1.0),T2EX(P1.1)。 1、定时器/计数器2的控制寄存器T2CON
可位寻址和字节寻址。 功能:选择T2的工作方式和工作模式。 允许位寻址和字节寻址。其格式如下:
T2CON D7 D6 D5 D4 D3 D2 D1 D0 (C8H) TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2
IT1、IT0:外部中断1、0触发方式选择位
注意: GATE=1 ,TRx与P3.2(P3.3) 的配合。
6.3 定时器T0、T1的工作模式
6.3.1 模式0的逻辑结构及应用
M1M0=00,选择模式0。逻辑结构如图6-5所示。 (以T0为例) T0的结构:13位定时器/计数器。
由TH0的8位、TL0的低5位构成(高3位未用) 工作过程:TL0溢出后向TH0进位,TH0溢出后将TF0置位,并向 CPU申请中断。
定时时间=(28 - 初值)×机器周期
最大定时时间=28 ×机器周期
优点:模式2能够进行自动重装载。模式0和1计数溢出后, 计数器为全0。循环定时或计数时,需要重新设置初值。
说明:在模式2能够满足计数或定时要求时,尽可能使用 模式2。
6.2.4 模式3的逻辑结构及应用
1、T0模式3的结构特点 M1 M0 =11,选择模式3。逻辑结构如图6-8和6-9所示:
由于TF1及中断矢量被TH0占用,所以T1仅用作波特率 发生器或其它不用中断的地方。
T1作波特率发生器,其计数溢出直接送至串行口。 设置好工作方式,串行口波特率发生器开始自动运行。
TMOD中T1的M1M0=11,T1停止工作。
振荡器 12分频 T1(P3.5)
C/T=0
C/T=1 (a)T1模式0
END
6.4 定时器/计数器T2
6.4.1 定时器/计数器T2的特殊寄存器
89C52中的T2是一个16位的、具有自动重装载和捕获能 力的定时器/计数器。
T2的结构:除TL2、TH2和控制寄存器T2CON及 T2MOD之外,还增加了捕获寄存器RCAP2L(低字节)和 RCAP2H(高字节)。
T2的计数脉冲源有两个:一个是内部机器周期,另一个是 由T2(P1.0)端输入的外部计数脉冲。
TL1 TH1 (5位) (8位)
串行口
振荡器 12分频 T1(P3.5)
C/T=0 C/T=1
TL1 TH1 (8位) (8位) 串行口
振荡器
(b)T1模式1
图6-9 模式3下,T1的逻辑结构图
12分频
C/T=0
TL1
振荡器 12分频 T1(P3.5)
C/T=0 C/T=1
TL1 (8位)
串行口
因为 X + N = 28或216
所以 X = 28或216-N
(1)对定时器
设定时时间为t N = t/机器周期
所以
X = 28或216- t/机器周期
(2)对计数器
X = 28或216- N
例 设单片机的振荡频率为12MHz,用定时器/计数器0的 模式1编程,在P1.0引脚产生一个周期为1000µs的方波,定 时器T0采用中断的处理方式。
}
void time0_int(void) interrupt 1
{
P1_0=~P1_0;
}
汇编语言程序:
ORG
0000H
LJMP MAIN
ORG
000BH
;中断处理程序
CPL
P1.0
RETI
ORG
0030H
;主程序
MAIN:
MOV
TMOD,#02H
MOV
TL0,#06H
MOV
TH0,#06H
SETB
6.3.3 模式2的逻辑结构及应用
M1 M0 =10时,选择模式2。逻辑结构如图6-7所示。 T0的结构: TL0:8位的定时器/计数器; TH0:8位预置寄存器,用于保存初值。 工作过程:当TL0计满溢出时,TF0置1,向CPU发出中断请 求;同时引起重装操作(TH0的计数初值送到TL0),进行新一 轮计数。