1、认识到定时器是计数器和定时器的统称,本质都是加法器,对计数脉冲进行计数
(1)TMOD寄存器对T0、T1进行控制,T0_C/T为0则T0是定时器,为1则是计数器;T1_C/T为0则T1为定时器,为1则为计数器
(2)AUXR寄存器对T2进行控制,T2_C/T为0则T2是定时器,为1则是计数器;
(3)T4T3M寄存器对T3、T4进行控制,T3_C/T为0则T3是定时器,为1则是计数器;T4_C/T为0则T4是定时器,为1则是计数器;
2、针对脉冲,定时器存在分频(每个时钟得到一个脉冲)与十二分频(十二个时钟得到一个脉冲)两种模式。
不分频,所需时间短,精度高;系统默认为十二分频
3、对于工作模式,即计数后是否自动重载与计数bit位
针对T0、T1,此配置由TMOD寄存器的T0_M1/T0_M0与T1_M1/T1_M0参数控制。
系统默认为16位自动重载,即00,系统所进行时间更长,且会自动触发时钟脉冲后为TH0、TL0赋值
4、考虑定时器的中断
TF0置0,TR0置1使中断正常运行
对总中断允许控制位置1,对定时器对应中断允许位置1,使能定时器中断
此配置后,定时器可进行工作
5、定时器参数配置
SYSclk为系统时钟频率,当前设置为24Mhz(中断频率设置越低越好)
TM0PS为定时器0时钟预分频寄存器,默认值为0
T为分频状态,默认为12
当前定时时间为1毫秒,即0.001s
根据上述公式可得出TH0,TL0的配置,TH0为十六进制高八位,TL0为十六进制低八位
定时器配置代码
void Timer0_Init(void) //1毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
6、功能实现
调用定时器要参考中断号
当前使用T0定时器,对应使用中断号1
void Timer0_Isr(void) interrupt 1
{
}
功能函数加入函数内,即可实现每隔1毫秒的操作,不受外界因素影响
注:TH0,TL0相关数据配置可借助STC-ISP进行配置(最新版)
同时,定时器相关操作必要时需要对比芯片手册进行调配
以上
页:
1
[2]