程序的多任务和资源复用举例
/*---------------------------------------------------------------------------*/
/*任务一*/
/**********************************************
一个部分输出1HZ的方波,2S后停止。
**********************************************/
void Task1_MainLoop()
{
switch(mTask1Id){
case 0: if(fKey1){
fKey1=0; /*接收该键值*/
mTask1_1HzReg=500/2; /*1hz时间寄存器,500ms,以2MS为单位*/
mTask1_2SReg=2000/2; /*2S时间寄存器,500ms,以2MS为单位*/
oTask1=0;
mTask1Id=1;
}
break;
case 1: if(fSYS_2ms){
mTask1_1HzReg--;
if(mTask1_1HzReg==0){
oTask1=~oTask1;
mTask1_1HzReg=500/2; /*1hz时间寄存器,500ms,以2MS为单位*/
}
mTask1_2SReg--;
if(mTask1_2SReg==0){
oTask1=1; /*2S时间到*/
mTask1Id=0;
}
}
break;
}
}
/*---------------------------------------------------------------------------*/
/*任务二*/
/**********************************************
一个一直输出1.2hz的方波,直到按键再次按
**********************************************/
void Task2_MainLoop()
{
switch(mTask2Id){
case 0: if(fKey2){
fKey2=0; /*接收该键值*/
mTask2_1p2HzReg=416/2; /*1hz时间寄存器,832/2ms,以2MS为单位*/
oTask2=0;
mTask2Id=1;
}
break;
case 1: if(fKey2){
fKey2=0;
oTask2=1;
mTask2Id=0;
}
else {
if(fSYS_2ms){
mTask2_1p2HzReg--;
if(mTask2_1p2HzReg==0){
oTask2=~oTask1;
mTask2_1p2HzReg=416/2; /*1hz时间寄存器,832/2ms,以2MS为单位*/
}
}
}
break;
}
}
/*---------------------------------------------------------------------------*/
/*主程序*/
void main(){
Timer0_Init();
EA=1;
while(1){
Timer0_MainLoop();
Key_MainLoop();
Task1_MainLoop();
Task2_MainLoop();
}
}
评论