程序的多任務(wù)和資源復(fù)用舉例
/*---------------------------------------------------------------------------*/
/*任務(wù)一*/
/**********************************************
一個(gè)部分輸出1HZ的方波,2S后停止。
**********************************************/
void Task1_MainLoop()
{
switch(mTask1Id){
case 0: if(fKey1){
fKey1=0; /*接收該鍵值*/
mTask1_1HzReg=500/2; /*1hz時(shí)間寄存器,500ms,以2MS為單位*/
mTask1_2SReg=2000/2; /*2S時(shí)間寄存器,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時(shí)間寄存器,500ms,以2MS為單位*/
}
mTask1_2SReg--;
if(mTask1_2SReg==0){
oTask1=1; /*2S時(shí)間到*/
mTask1Id=0;
}
}
break;
}
}
/*---------------------------------------------------------------------------*/
/*任務(wù)二*/
/**********************************************
一個(gè)一直輸出1.2hz的方波,直到按鍵再次按
**********************************************/
void Task2_MainLoop()
{
switch(mTask2Id){
case 0: if(fKey2){
fKey2=0; /*接收該鍵值*/
mTask2_1p2HzReg=416/2; /*1hz時(shí)間寄存器,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時(shí)間寄存器,832/2ms,以2MS為單位*/
}
}
}
break;
}
}
/*---------------------------------------------------------------------------*/
/*主程序*/
void main(){
Timer0_Init();
EA=1;
while(1){
Timer0_MainLoop();
Key_MainLoop();
Task1_MainLoop();
Task2_MainLoop();
}
}
評(píng)論