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++; //不定
- }
|