//相关的头文件已包含<br /><br />bit sys_TIME;//定时器0 1MS中断标志位<br /><br />#define n_real_task 1<br />#define n_task 3<br />typedef void (*fct_ptsk)(void);<br /><br />unchar D_taskNOWR;<br />unchar D_taskNOW;<br />unchar C_taskCON[n_task]; <br /><br />extern void TSK_0(void);<br />extern void TSK_1(void);<br />extern void TSK_2(void);<br /><br />code const fct_ptsk CT_taskADD[]=<br />{ <br /> TSK_0,<br /> TSK_1,<br /> TSK_2, <br /> };<br /><br />void main(void)<br />{<br /> unchar i,tmp;<br /> EA=0;<br /> WDT_INIT();<br /> PORT_INIT();<br /> USART_INIT(); <br /> <br /> <br /> ET0=1;<br /> TR0=1;<br /> ES=1; <br /> IP0=0X10;<br /> IP0H=0X10; <br /> EA=1; <br /><br /> <br /> D_taskNOWR=0xff; <br /> D_taskNOW=n_real_task-1; <br /> <br /> while(1)<br /> {<br /> OS_LOOP:<br /> WDT_RST();<br /> <br /> if(sys_TIME)//1ms中断<br /> {<br /> sys_TIME=0;<br /> i=0;<br /> while(i<n_task)<br /> {<br /> if(C_taskCON>0)<br /> C_taskCON--;<br /> i++;<br /> }<br /> }<br /> <br /> OS_T:<br /> D_taskNOWR++;<br /> if(D_taskNOWR==n_real_task)//Y<br /> {<br /> D_taskNOWR=0xff;<br /> D_taskNOW++;<br /> if(D_taskNOW==n_task)<br /> {<br /> D_taskNOWR=0xff;<br /> D_taskNOW=n_real_task-1;<br /> }<br /> else<br /> {<br /> tmp=D_taskNOW;<br /> goto OS_R;<br /> }<br /> goto OS_LOOP;<br /> }<br /> else<br /> tmp=D_taskNOWR;<br /><br /> OS_R:<br /> if(C_taskCON[tmp]>0)<br /> goto OS_T;<br /> else<br /> (*CT_taskADD[tmp])();<br /><br /> }<br /> <br /> }<br /><br />void TSK_0(void)<br />{<br /><br /> C_taskCON[0]=1;<br /> C_taskCON[2]=100;<br />}<br />void TSK_1(void)<br />{<br /> C_taskCON[1]=2;<br />}<br />void TSK_2(void)<br />{<br /> C_taskCON[2]=1;<br />} |
|