unsigned char counter10ms, counter20ms;
bit flag10ms, flag20ms;
void timer1_isr() interrupt 3
{
TL1 = (65536-11059200/12/1000)&0xff;
TH1 = (65536-11059200/12/1000)>>8;
flag1ms = 1;
if(++counter10ms >= 10){
counter10ms = 0;
flag10ms = 1;
}
if(++counter20ms >= 10){
counter20ms = 0;
flag20ms = 1;
}
}
int main()
{
...
while(1)
{
if(flag10ms == 1){
flag10ms = 0;
a();
}
if(flag20ms == 1){
flag20ms = 0;
b();
}
}
}
不用延时,改为时间触发。每10ms,每20ms运行一次。利用状态机把长时间任务变成多次短任务。
|