只教新手,高人不用看呵呵。 假设某个cpu只有1个定时器,你要用它来实现定时2毫秒,100毫秒,100秒等n种定时时间,怎么处理呢? 有个同事为了这个问题搞了1天还没搞懂,请看程序:
#define TIME0H 0xec//0xec77定时2毫秒, #define TIME0L 0x77
//其他全局变量不写出
//定时器0中断,如何配置定时器自己看书 void time0(void) interrupt 1//进入为2毫秒一次 { TH0=TIME0H; TL0=TIME0L;
//==================== //100毫秒一次定时 //==================== ++time_20ms;//计数50次,2毫秒x50=100毫秒 if(time_20ms>49) { time_20ms=0; f_chackbut=1; //检查项目1 }
//==================== //100秒一次定时 //==================== ++time_100s1; if(time_100s1>249)//计数250次 { time_100s1=0; ++time_100s2;//计数200次,2毫秒x200x250=100秒 if(time_100s2>199) { time_100s2=0; f_chacklight=1; //检查项目2 } }
}
在定时器中断里面,利用数值累加就能弄得任何需要定时的时间。处理出标志位和状态等,在主循环检查这些变量即可完成你的任务。就像你的表,秒针只能1次跳一下,但是你数60下你就可以知道这是1分钟。 |