⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 《增强型8051单片机实用开发技术》例程代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 203   2                              if(flashbit==2)
 204   2                              {
 205   3                                      if(low1==0) low1=10;
 206   3                                      low1--;
 207   3                              }
 208   2                              if(flashbit==3)
 209   2                              {
 210   3                                      if(hi0==0) hi0=10;
 211   3                                      hi0--;
 212   3                              }
 213   2                              if(flashbit==4)
 214   2                              {
 215   3                                      if(hi1==0) hi1=10;
 216   3                                      hi1--;
 217   3                              }
 218   2                              if(flashbit==5)
 219   2                              {
 220   3                                      if(sec0==0) sec0=9;
 221   3                                      sec0--;
 222   3                              }
 223   2                              if(flashbit==6)
 224   2                              {       
 225   3                                      if(sec1==0) sec1=6;
 226   3                                      sec1--;
 227   3                              }
 228   2                              if(flashbit==7)
 229   2                              {
 230   3                                      if(minute0==0) minute0=10;
 231   3                                      minute0--;
 232   3                              }
 233   2                              if(flashbit==8)
 234   2                              {
 235   3                                      if(minute1==0) minute1=6;
 236   3                                      minute1--;
 237   3                              }
 238   2                              break;
 239   2                      case 3:
 240   2                              flashbit=0;
C51 COMPILER V8.18   MAIN                                                                  11/30/2009 13:35:23 PAGE 5   

 241   2                              dispressure=0;
 242   2                              break;
 243   2              }
 244   1              HIlimit=hi0+hi1*10;
 245   1              LOWlimit=low0+low1*10;
 246   1              sec=minute1*600+minute0*60+sec1*10+sec0;
 247   1      }
 248          /////////////////////////////////////////////////////////////////////
 249          void Task1(void *ppdata) reentrant   //AD转换+串口显示任务
 250          {
 251   1              unsigned char xdata adcl,adch;
 252   1      
 253   1              ppdata=ppdata;  //防止警告
 254   1              ET0=1;                  //开时钟节拍中断--根据杨屹文章更改
 255   1              BITG=0;
 256   1              SEGG=0;
 257   1              PrintChar('H');
 258   1              PrintChar('E');
 259   1              PrintChar('L');
 260   1              PrintChar('L');
 261   1              PrintChar('O');
 262   1              PrintChar('\r');
 263   1              PrintChar('\n');
 264   1      
 265   1      for(;;)
 266   1        {
 267   2                      adcr=Get_data();                                                 //AD转换
 268   2                      adcl=(adcr%10)|0x30;
 269   2                      adch=(adcr/10)|0x30;
 270   2                      PrintChar(adch);                                                 //发送AD转换结果
 271   2                      PrintChar(adcl);
 272   2                      PrintChar('\r');
 273   2                      PrintChar('\n');
 274   2                      flash=~flash;
 275   2                      OSTimeDly(OS_TICKS_PER_SEC/4);  
 276   2        }    
 277   1      }
 278          
 279          void Task2(void *ppdata) reentrant       //时钟任务
 280          {
 281   1              ppdata=ppdata;
 282   1      
 283   1              for(;;)
 284   1              { 
 285   2                      sec++;
 286   2                      if(sec>5999) sec=0;
 287   2                      PrintChar('O');
 288   2                      PrintChar('K');
 289   2                      PrintChar('\r');
 290   2                      PrintChar('\n');
 291   2                      OSTimeDlyHMSM(0,0,0,999);
 292   2              }    
 293   1      }
 294          
 295          void Task3(void *ppdata) reentrant       //报警任务
 296          {
 297   1              ppdata=ppdata;
 298   1      
 299   1              for(;;)
 300   1              {       
 301   2                      if(adcr>HIlimit)                                                                 //上限报警
 302   2                      {
C51 COMPILER V8.18   MAIN                                                                  11/30/2009 13:35:23 PAGE 6   

 303   3                              CMOD=0x0c;
 304   3                              PCA_PWM1=0x00;
 305   3                              CCAP1H=0x10;
 306   3                              OSTimeDly(OS_TICKS_PER_SEC/4);
 307   3                              PCA_PWM1=0x03;
 308   3                              POSITIVE=0;
 309   3                              ALARM=0;
 310   3                              OSTimeDly(OS_TICKS_PER_SEC/2);
 311   3                      } 
 312   2                      else if(adcr<LOWlimit)                                                  //下限报警
 313   2                      {
 314   3                              CMOD=0x00;
 315   3                              PCA_PWM1=0x00;
 316   3                              CCAP1H=0x40;
 317   3                              OSTimeDly(OS_TICKS_PER_SEC/2);
 318   3                              PCA_PWM1=0x03;
 319   3                              NEGATIVE =0;
 320   3      ALARM=0;
 321   3                              OSTimeDly(OS_TICKS_PER_SEC);
 322   3                      }
 323   2                      else 
 324   2      {
 325   3      POSITIVE=1;
 326   3      NEGATIVE =1;
 327   3      ALARM=1;
 328   3      OSTimeDlyHMSM(0,0,5,0);
 329   3      }
 330   2              }    
 331   1      }
 332          
 333          void Task4(void *ppdata) reentrant       //数码管显示任务
 334          {
 335   1              unsigned char xdata disbuf[8]={0,0,0x31,0x63,0,0,0,0};
 336   1      
 337   1              ppdata=ppdata;
 338   1      
 339   1              for(;;)
 340   1              {       
 341   2                      sec0=(sec%60)%10;
 342   2                      sec1=(sec%60)/10;
 343   2                      minute0=(sec/60)%10;
 344   2                      minute1=(sec/60)/10;
 345   2                      disbuf[4]=LED[sec0];                                                    //显示时间
 346   2                      disbuf[5]=LED[sec1];
 347   2                      disbuf[6]=LED[minute0];
 348   2                      disbuf[7]=LED[minute1];                                  
 349   2                      if(dispressure==0)                                                              //当前压力
 350   2                      {
 351   3                        disbuf[0]=LED[adcr%10];
 352   3                              disbuf[1]=LED[adcr/10];
 353   3                              disbuf[2]=0x31;
 354   3                              disbuf[3]=0x63;
 355   3                      }
 356   2                      else                                                                                    //显示报警上下限
 357   2                      {
 358   3                              disbuf[0]=LED[LOWlimit%10];
 359   3                              disbuf[1]=LED[LOWlimit/10];
 360   3                              disbuf[2]=LED[HIlimit%10];
 361   3                              disbuf[3]=LED[HIlimit/10];
 362   3                      }
 363   2                      
 364   2                      displayLED(disbuf,flashbit);                                    //闪烁控制
C51 COMPILER V8.18   MAIN                                                                  11/30/2009 13:35:23 PAGE 7   

 365   2        }    
 366   1      }
 367          
 368          void Task5(void *ppdata) reentrant       //按键任务
 369          {
 370   1              ppdata=ppdata;
 371   1      
 372   1              for(;;)
 373   1        {     
 374   2                      getkey();                               //获取按键
 375   2                      if(key_num!=0xff)       //确保每按一次按键执行一次按键处理程序
 376   2                      {
 377   3                               keyhandle();           //处理按键
 378   3                               key_num=0xff;
 379   3                      }
 380   2                      OSTimeDly(10);
 381   2        }    
 382   1      } 
 383          
 384          void main(void)
 385          {                                                                                                                                       
 386   1              OSInit();                                                                       //操作系统初始化
 387   1              InitHardware();                                                         //硬件初始化
 388   1      
 389   1              //FirstSem=OSSemCreate(0);                                      //定义一个信号量
 390   1              //FirstMbox=OSMboxCreate((void*)0);                     //定义一个邮箱
 391   1      
 392   1              OSTaskCreate(Task1,(void*)0,&Task1Stk[0],0);//创建5个任务
 393   1              OSTaskCreate(Task2,(void*)0,&Task2Stk[0],1);
 394   1              OSTaskCreate(Task3,(void*)0,&Task3Stk[0],3);
 395   1              OSTaskCreate(Task4,(void*)0,&Task4Stk[0],4);
 396   1              OSTaskCreate(Task5,(void*)0,&Task5Stk[0],2);
 397   1      
 398   1              OSStart();                                                                       //启动操作系统
 399   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2450    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =    343    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -