Easy51RTOS的原理 //Easy51RTOS操作系统头文件 #include "os_cfg.h" #include "functns.h" //常用一些功能函数 unsigned char TempBuffer[6]; //显示温度字符串 unsigned char str2[12]={' ',' ',' ',0,0,0,0,0,0,0xdf,0x43,0}; //任务0:测温度送显 void task0(void) { temp=ReadTemperature(); IntToStr(temp,TempBuffer); str2[3]=TempBuffer[0]; str2[4]=TempBuffer[1]; str2[5]=TempBuffer[2]; str2[6]=TempBuffer[3]; str2[7]=TempBuffer[4]; str2[8]=TempBuffer[5]; GotoXY(0,1); Print(str2); delay_nms(300); } //任务1:键盘扫描,LCD显示 void task1(void) { if(CHANGE==0) //判断change温度键是否按下 { set_temp=key_set(); //设定需要更改的温度值 if(set_temptemp) { dianlu(); //若大于,则打开电炉(这里用LED模拟一下) } } } //任务2 void task2() { } //任务3 void task3() { } //任务4 void task4(void) { } //任务5 void task5(void) { } //任务6 void task6() { } //任务7 void task7() { } //main主函数 void main(void) { OS_InitTimer0(); EA=1; LCD_Init(); LCD_w_data(1,1,Temp_Str); LCD_w_data(2,1,Key_Str); while(1) { if (OS_Delay[0]==0){task0();OS_Delay[0]=100;} //温度测量,每秒1次 if (OS_Delay[1]==0){task1();OS_Delay[1]=10;} //键盘扫描,键值存储 if (OS_Delay[2]==0){task2();OS_Delay[2]=100;} //读出存储的键值,LCD显示 if (OS_Delay[3]==0){task3();OS_Delay[3]=50;} if (OS_Delay[4]==0){task4();OS_Delay[4]=100;} if (OS_Delay[5]==0){task5();OS_Delay[5]=60;} if (OS_Delay[6]==0){task6();OS_Delay[6]=70;} if (OS_Delay[7]==0){task7();OS_Delay[7]=80;} Delay(50); //Taskturn; } } //定时中断服务 void OS_Timer0(void) interrupt 1 using 2 { uchar i; //CRY_OSC,TIME_PER_SEC在easycfg.h中配置 TH0 = 255-CRY_OSC/TIME_PER_SEC/12/256; TL0 = 255-CRY_OSC/TIME_PER_SEC/12%256; //每节拍对任务延时变量减1 ,减至 0 后,任务就绪。 for(i=0;i