一、定时器
定时器是51单片机内部的资源,其电路连接和运转均在单片机内部完成。
定时器的作用:
(1)用于计时系统,可实现软件计时,或程序每隔一固定时间完成一项操作
(2)替代长时间的delay,提高cpu运行效率和处理速度。
定时器的个数:T0,T1,T2.(要注意不同的单片机用的定时器不同)
二。定时器的工作原理
1)定时器框图
1,定时器再单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔一秒,就单元的数值就增加当技术单元的数值增加到“设定的提醒时间”,计数单元会向中断系统发出中断请求。使程序跳转到终端服务函数中。
2)定时器T0/T1的工作模式:
模式0:13位定时器/计数器;
模式1:13位定时器/计数器;
模式2:13位定时器/计数器;
模式3:13位定时器/计数器;
(一)计数单元
TH0高8位 和 TL0低8位:共存2的16次方-1的数据=65535
TF0:标志位:当TH0计时器溢出TCON置标志位。
(二)时钟
SYSCLK:系统时钟,即晶振周期,开发板上的晶振为12MHz
系统将12Mhz进行12分频,成1Mhz,成1微秒,
给0就是定时器的功能,给1就是计时器的功能。
三。定时器相关寄存器
寄存器TMOD
四、应用定时器
#include "reg51.h"
void timer0Init(void)
{
//TMOD |= (0x01<<0); //默认状态 TMOD 就是13位模式
TH0 = 7192>>5;
TL0 = 7192&0x1F;
IE |= 0x01<<7 | 0x01<<1;
TCON |= 0x01<<4; //开启定时器
}
void timer0Handler(void) interrupt 1
{
static int n = 0;//由于上面最多能计1ms,用一个别的变量,使其能计到自己的想要的计数
n++;
if (n == 1000)
// if (1)
{
P2 = ~P2;
n = 0;
}
TH0 = 7192>>5;
TL0 = 7192&0x1F;//重新赋初值,再次从头计数
}
void main(void)
{
timer0Init();
while(1)
{
}
}