7.1定时器
1.定时器介绍:
51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
2. 定时器作用:
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的Delay,提高CPU的运行效率和处理速度
定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
定时器相关寄存器
1.配置定时器工作模式寄存器(TMOD)
(1)配置定时器0,不用定时器1,该定时器使用的是模式1,所以M1=0,M0=1
(2)当C/T=0时,多路开关连接到系统时钟的分频输出,T0对时钟周期计数,T0工作在定时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。所以C/T=0
(3)当GATE=0(TMOD.3)时,如TRO=1,则定时器计数。所以GATE=0
综上1.高四位不变,低四位清零 2.高四位不变,低四位为0001
2.配置定时器控制寄存器(TCON)
3.定时器初始化直接生成
第一句已配置,不需要,直接删除
此外还缺少中断配置,加上ET0=1(允许中断);EA=1;PT0=0(低优先级);即可
4.定时器0的中断信号
5.Timer0.c的完整代码
#include <REGX52.H>
/**
* @brief 定时器0初始化,1毫秒@12.000MHz
* @param 无
* @retval 无
*/
void Timer0Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1; //允许中断
EA=1;
PT0=0; //低优先级
}
/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;//静态变量,不清零
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
}
}
*/
定时器中断函数模板不容易模块化,会引用一些主函数的变量,一般放在主函数中