C51单片机04(定时器)讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用定时/计数器的步骤
• 方式选择——TMOD • 初值设置——TH0、TL0( TH1、TL1 ) • 中断允许——EA、ET0( ET1 ) • 启动操作——TR0(TR1)
定时/计数器的方式寄存器TMOD
• 可以一次定义两个定时/计数器的工作方式
D7 D6 D5 D4 D3 D2 D1 D0
Biblioteka Baidu
{
TH0=0x3c; TL0=0xb0;
i++;
if(i==4)
{
LED0=!LED0;
i=0;
}
}
//方式1,16位定时/计数 // 0x3cb0 = 15536 计数初值,定时50ms
计数初值=256 - 200 / 2 =156 (0x9c)
TH0=0x9c; TL0=0x9c;
在P1.0端口输出周期为500μs的方波
//中断方式
#include<reg52.h>
sbit P1_0=P1^0;
void main()
{
TMOD=0x02;
//T0设置为方式2
TH0=0x06;
TL0=0x06;
LED0以200ms间隔闪烁(方法二)
#include<reg52.h>
sbit LED0=P0^0;
char i;
void main()
{
TMOD=0x01;
TH0=0x3c; TL0=0xb0;
EA=1;
ET0=1;
i=0;
TR0=1;
while(1);
}
void time0_int(void) interrupt 1
• 方式2为自动重置,将TH0的值再次装入 TL0 ,继续计数
• 每次检测到TF0==1,就使P1^0的状态改变 一次,从而产生了周期为500us的对称方波
思考
• 设单片机晶振频率为12MHz,对于前例, 如果要求T0输出的方波周期为200μs,计 数初值应该怎样设置?
机器周期=时钟周期*12 =12 / 晶振频率 =1μs
EA=1;
//中断允许总控
ET0=1;
//允许定时器T0中断
TR0=1;
//启动定时器
while(1);
//等待中断的发生
}
void time0_int(void) interrupt 1 //定时器T0对应interrupt 1
{
P1_0=!P1_0;
}
LED0以200ms间隔闪烁(方法一)
#include<reg52.h>
受外部中断请求信号的影响 • GATE=1 —— 外部中断请求高电平启动计
数 • GATE=0 —— 定时/计数器启动与外部中
断请求无关
一般情况下GATE=0
定时/计数器的控制寄存器TCON
用于控制定时/计数器的启动与溢出 • TF1——溢出标志 • TR1——启动位(=1:启动 =0:停止) • TF0——溢出标志 • TR0——启动位(=1:启动 =0:停止)
在P1.0端口输出周期为500μs的方波
//查询方式(晶振频率12MHz) 250μs
#include<reg52.h>
sbit P1_0=P1^0;
void main() {
TMOD=0x02;
250μs
//定时器T0设置为方式2
TH0=0x06;
//256-6=250,定时250μs
TL0=0x06; TR0=1;
GATE C / T M1 M0 GATE C / T M1 M0
定时器1
定时器0
M1 M0 工作方式
方式说明
00
0
13 位定时/计数器
01
1
16 位定时/计数器
10
2
8 位自动重置定时/计数器
11
3
两个8 位定时/计数器(仅T0有此方式)
定时/计数器的方式寄存器TMOD
• C/T=1 计数方式 • C/T=0 定时方式 • GATE —— 控制定时/计数器的启动是否
sbit LED0=P0^0;
char i;
void main()
{
TMOD=0x01;
TH0=0xd8; TL0=0xf0;
EA=1;
ET0=1;
i=0;
TR0=1;
while(1);
}
void time0_int(void) interrupt 1
{
TH0=0xd8; TL0=0xf0;
i++;
51系列单片机
第4讲 定时器/计数器
Atmel AT89C51
Atmel AT89C52
定时器/计数器的主要特性
• C51系列有2个定时/计数器(T0、T1) • C52系列有3个定时/计数器(T0、T1、T2) • 通过编程设置,每个定时器/计数器可以根
据系统时钟实现定时,也可以对外部信号 计数(T0/P3.4、T1/P3.5) • 每个定时器/计数器都有多种工作方式 • 每个定时器/计数器都会在预设定时计数时 间到时产生溢出,可以通过查询或中断方 式处理
//启动定时器T0
while(1)
{ if(TF0==1)
//如果检测到溢出,意味着定时时间到
{
TF0=0;
//取消溢出标志
P1_0=!P1_0; //输出高/低电平转换
}
}
}
说明
• 晶振频率12MHz,作为定时/计数器的基准 信号
• 定时/计数器进行12分频,定时工作频率 1MHz,定时工作周期1us
• TMOD=0x02(00000010B)
– T0工作于方式2(8位自动重置定时) – 定时器方式
D7 D6 D5 D4 D3 D2 D1 D0
GATE C / T M1 M0 GATE C / T M1 M0
定时器1
定时器0
• TL0=0x06 • TH0=0x06
说明
• 计数从6开始,每个工作周期(1us)加1,经 过250us之后产生溢出,TF0==1
if(i==20)
{
LED0=!LED0;
i=0;
}
}
//LED0接在P0^0端口
//方式1,16位定时/计数 // 0xd8f0 = 55536 计数初值,定时10ms //定时器T0允许中断 //启动定时器T0
//定时器T0对应的就是interrupt 1 //恢复计数初值,继续延时 //每计数一次,延时10ms //若满足200ms //LED0闪烁一次 //恢复初始状态
D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
外部中断控制
方式2——自动重置8位计数
• M1M0 = 10 • TL0——计数(最大定时256μs) • TH0——保存初值,便于自动重置
例: • TH0=0x06 • TL0=0x06 • TL0计数到256发生溢出,计数值为250 • 然后重新置入0x06,继续计数