楼主,STC官方例子就有定时器0~4的用法。举个例子:
#define MAIN_Fosc 24000000UL //定义主时钟
//========================================================================
// 函数: u8 Timer0_Config(u32 time)
// 描述: timer0初始化函数.
// 参数: time: 时间us.
// 返回: 0: 初始化正确, 1: 重装值过大, 初始化错误.
// 版本: V1.0, 2018-3-5
//========================================================================
u8 Timer0_Config(u32 time) //time值是时间(单位us)
{
TR0 = 0; //停止计数
TMOD &= 0xf0;
time = (u32)(((float)MAIN_Fosc * (float)time)/1000000UL); //重装的是时间(us), 计算所需要的系统时钟数.
if(time >= (65536UL * 12)) return 1; //值过大, 返回错误
if(time < 65536UL) AUXR |= 0x80; //1T mode
else
{
AUXR &= ~0x80; //12T mode
time = time / 12;
}
time = 65536UL - time;
TH0 = (u8)(time >> 8);
TL0 = (u8)(time);
ET0 = 1; //允许中断
// PT0 = 1; //高优先级中断
TMOD = (TMOD & ~0x03) | 0; //工作模式, 0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断
TR0 = 1; //开始运行
return 0;
}
初始化调用:
Timer0_Config(10000); //定时时间 us
//========================================================================
// 函数: void timer0_ISR (void) interrupt TIMER0_VECTOR
// 描述: timer0中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2016-5-12
//========================================================================
void timer0_ISR (void) interrupt TIMER0_VECTOR
{
P32 = ~P32;
}
|