没错了,就是这样,不过要把if(TMR0==255)改成if(TMR0>250)会更好,因为如果程序复杂点的话,跳到判断那一句的时候,TMR0可能已经从255变成0了,而造成漏检.
/*---------------------------------
模拟定时器,在主程序中循环扫描
每50ms处理事件一次
---------------------------------*/
void SimulateTimer(void)
{
if (TMR0 > 250)
{ //为防止TMR0归0时漏检,在它归0之前的(256-250)*256=1.536ms内检测都有效
TMR0 = 65;
..... //需要定时执行的程序
.....
}
}
/*------------------------------------
//主程序
------------------------------------*/
main()
{
init(); //器件初始化
TMR0 = 65; //预设值,使TMR0在50ms左右归零一次
OPTION = 0b00000111; //分频器切换给定时器使用,分频比256
while(1)
{
SimulateTimer(); //模拟定时器中断,在主程序中不断扫描
.... //可以是其它的程序,或者全部放在SimulateTimer中按时间执行
}
|