1.设置1ms定时器中断,设置变量在定时器中断函数中++/–,以此计数,while(1)中对改变量进行值判断就能得到指定时间。
2.跑裸机都可参考此框架的非阻塞式延时。
3.注意MCU的工作频率和机器周期。
unsigned int Cnt1 = 0;
unsigned int Cnt1 = 0;
void main()
{
while(1)
{
if(Cnt1) //1ms执行一次
{
Cnt1 = 0;
task_1ms(); //在此任务函数中,可以继续计时
}
if(Cnt2 >= 10) //确定时间,10ms执行一次
{
Cnt2 = 0;
task_10ms();
}
}
}
void timer0() interrupt 1
{
TL0 = 0x1C; //与计算值会有一定偏差,需做补偿
TH0 = 0xFC; //定时器重赋值
Cnt1 = 1; //1ms定时器
Cnt2++; //不定
}
|