各软定时器都使用同一个timer0作为时基,各计数器的判断和改写都放在中断里完成,然后管理相应的标志位,在工作循环里按这些标志操作。例如: //中断处理 #int_timer0 void get_time() { set_timer0(get_timer0()+13); //刷新timer0初值 count++; if(count>=20) //timer0每溢出20次 { count=0; get_in(); //扫描一次IO sec++; show++; take++; if(sec>=1000) { sec=0; sec_tick=1; //秒节拍标志 } if(show>=200) { show=0; show_tick=1; //动画节拍标志 } if(take>=1000) { take=0; take_tick=1; //其他时间标志 } } }
工作循环中需要开始定时的时候: show=0; show_tick=0; 然后等待show_tick==1即可。
|