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

📄 main.lst

📁 矿工定位系统,包括单片机原理图,PCB,KEILC51原代码,带瓦斯检测功能,成熟产品正在使用中
💻 LST
📖 第 1 页 / 共 2 页
字号:
 308   1        TH0=0Xac;
 309   1        TL0=0X95;
 310   1        TR0=1;   
 311   1      }
 312          //**********************************************************
 313          void Send_ok(unsigned char key)
 314          { 
 315   1         unsigned char i;
 316   1          ES=0;
 317   1          TX_EN=1; 
 318   1              Delay1msa(10);
 319   1              for(i=0;i<3;i++)
 320   1              {
 321   2            SBUF = 0x88;                              // 发送数据
 322   2            while(0==TI);                     // 等待发送完毕
 323   2            TI = 0;                           // 清除发送标志
 324   2                SBUF = 0xff;                          // 发送数据
 325   2            while(0==TI);                     // 等待发送完毕
 326   2            TI = 0;                           // 清除发送标志
 327   2      
 328   2                SBUF = key;                           // 发送数据
 329   2            while(0==TI);                     // 等待发送完毕
 330   2            TI = 0;                           // 清除发送标志
 331   2                SBUF = key;                           // 发送数据
 332   2            while(0==TI);                     // 等待发送完毕
 333   2            TI = 0;                           // 清除发送标志
 334   2         }
 335   1         if(key_tem==0x02)
 336   1         {
 337   2           wring_send_times--;
 338   2               if(wring_send_times==0)
 339   2               {
 340   3              key_tem=0x01;
 341   3               }
 342   2         }
 343   1         else
 344   1         {
 345   2          key_tem=0x01;
 346   2         }
 347   1              TX_EN=0; 
 348   1              Delay1msa(4);
 349   1          ES=1;
 350   1        
 351   1      }
 352          
 353          /******************************************************************
 354          * 名称:UART_SendByte
 355          * 功能:向串口发送字节数据。
 356          * 入口参数:dat   待发送的数据
 357          * 出口参数:无
 358          ******************************************************************
 359          void  UART_SendByte(uint8 dat)
C51 COMPILER V7.05   MAIN                                                                  09/09/2004 17:04:02 PAGE 7   

 360          {  SBUF = dat;                          // 发送数据
 361             while(0==TI);                        // 等待发送完毕
 362             TI = 0;                              // 清除发送标志
 363          }
 364          
 365          
 366          /******************************************************************
 367          * 名称:UART_SendCode
 368          * 功能:读取FLASH中的数据,并发送到串口。
 369          * 入口参数:addr          读取的起始地址
 370          *          no     读取的数据个数
 371          * 出口参数:无
 372          ******************************************************************
 373          void  UART_SendCode(uint16 addr, uint16 no)
 374          {  uint8 code *readp;
 375          
 376             readp = addr;
 377             for(; no>0; no--)
 378             {  UART_SendByte(*readp++);          // 读取数据并发送
 379             }
 380          }
 381          
 382          */
 383          void flash_led(unsigned char j )
 384          {  
 385   1         char i;
 386   1         for(i=0;i<j;i++)
 387   1         {
 388   2              LED=0;
 389   2              Delay1ms(50);
 390   2                  LED=1;
 391   2                      Delay1ms(50);
 392   2         }
 393   1       LED=1;   
 394   1      }
 395          //******************************************************************
 396          //**********************************************************
 397          void Setok(void)
 398          { 
 399   1        
 400   1          ES=0;
 401   1          SBUF ='O';                          // 发送数据
 402   1          while(0==TI);                       // 等待发送完毕
 403   1          TI = 0;                             // 清除发送标志
 404   1          SBUF = 'K';                         // 发送数据
 405   1          while(0==TI);                       // 等待发送完毕
 406   1          TI = 0;                             // 清除发送标志
 407   1          ES=1;
 408   1      }
 409          //**************************************************************
 410          void main(void)
 411          {
 412   1        unsigned  char Link_ok=0,j,CS_state=0;
 413   1      
 414   1        ports_init();
 415   1       if(ISP) 
 416   1        {
 417   2         user_uart_init();//用户串口初始化
 418   2          watchdog_init();//初始化看门狗
 419   2        
 420   2         }
 421   1       else
C51 COMPILER V7.05   MAIN                                                                  09/09/2004 17:04:02 PAGE 8   

 422   1        {
 423   2         uart_init();  //进入ISP模式
 424   2         FLASH_WriteByte(0xc04, 0);
 425   2        }
 426   1        osc_init();
 427   1        rtc_init();
 428   1        EA=1;
 429   1        ES=1;
 430   1        CS=0;
 431   1        TX_EN=1; //接收状态
 432   1        PWR =1;
 433   1       //rtc_start();
 434   1       LED=0;
 435   1       Delay100ms(2);
 436   1       LED=1;
 437   1        if((FLASH_ReadByte(0XC05)==0x55)&(FLASH_ReadByte(0XC06)==0xaa))//初始化模块的ID
 438   1        {
 439   2          EA=0;
 440   2          ADDR=FLASH_ReadByte(0XC04); 
 441   2          EA=1;
 442   2            //FLASH_WriteByte(0xc04, 0); 
 443   2        }
 444   1         
 445   1        else
 446   1         {
 447   2          ADDR=0;
 448   2              EA=0;
 449   2          FLASH_WriteByte(0xc04, 0);
 450   2          FLASH_WriteByte(0xc05, 0x55);
 451   2              FLASH_WriteByte(0xc06, 0xAA);
 452   2          EA=1;
 453   2         }
 454   1      while(1)
 455   1      {
 456   2          ES=0;
 457   2          SBUF ='O';                          // 发送数据
 458   2          while(0==TI);                       // 等待发送完毕
 459   2          TI = 0;                             // 清除发送标志
 460   2          SBUF = 'K';                         // 发送数据
 461   2          while(0==TI);                       // 等待发送完毕
 462   2          TI = 0;                             // 清除发送标志
 463   2          ES=1;
 464   2      }
 465   1      //ADDR=0;
 466   1      while(1)
 467   1       { 
 468   2        
 469   2         if(ISP)
 470   2         {
 471   3            watchdog_start();
 472   3           
 473   3                if(!KEY){wring_send_times=3; key_tem=0x02; LED=0; Delay100ms(2); LED=!LED;LED=0; Delay100ms(2); LED=!LE
             -D;}//有键按下
 474   3                 watchdog_feed();
 475   3            if(rxok)
 476   3                {
 477   4                  rxok=0;
 478   4                      Send_ok(key_tem);
 479   4                  flash_led(4);
 480   4                      i=0;
 481   4                  LED=1;
 482   4                      Link_ok=1;
C51 COMPILER V7.05   MAIN                                                                  09/09/2004 17:04:02 PAGE 9   

 483   4              watchdog_feed();
 484   4               }
 485   3               if(set_ok)//设置模块的ID
 486   3               {
 487   4              watchdog_feed();
 488   4                      set_ok=0;
 489   4                      Send_ok(key_tem);
 490   4      
 491   4                      watchdog_feed();
 492   4                      EA=0;
 493   4                  FLASH_WriteByte(0xc04,RX_addr);   //存入新ID
 494   4                  EA=1;
 495   4                      ADDR=RX_addr;
 496   4                  LED=0;
 497   4              flash_led(4);
 498   4                      i=0;
 499   4                  LED=1;
 500   4                      Link_ok=1;
 501   4              watchdog_feed();
 502   4               }
 503   3          rtc_start();
 504   3        switch(CS_state)
 505   3        {
 506   4         case 0:
 507   4         CS=0;
 508   4         if(T_flag)
 509   4              {    
 510   5             watchdog_feed();
 511   5            rtc_stop();  
 512   5            T_flag=0;
 513   5                i++;
 514   5                if(i>3)
 515   5                {
 516   6                  i=0;
 517   6              watchdog_feed();
 518   6                  if(Link_ok)
 519   6                  {
 520   7                     Link_ok=0;
 521   7                 watchdog_feed();
 522   7                 
 523   7                  }
 524   6                 else
 525   6                  {
 526   7                     LED=0;
 527   7                 Delay1ms(50);
 528   7                     LED=1;
 529   7                     j++;
 530   7                 watchdog_feed();
 531   7                 CS_state=1;
 532   7                         if(j>10)
 533   7                        {
 534   8                          j=0;
 535   8                          DIVM =0x00;
 536   8                  watchdog_feed();
 537   8                      power_mode(POWER_TOTALPOWERDOWN);//休眠
 538   8                        }
 539   7                  }
 540   6               }
 541   5              }
 542   4          break;
 543   4         case 1:
 544   4           CS=1;
C51 COMPILER V7.05   MAIN                                                                  09/09/2004 17:04:02 PAGE 10  

 545   4         if(T_flag)
 546   4              {    
 547   5             watchdog_feed();
 548   5            rtc_stop();  
 549   5            T_flag=0;
 550   5                i++;
 551   5                if(i>3)
 552   5                {
 553   6                 i=0;
 554   6             watchdog_feed();
 555   6                 if(Link_ok)
 556   6                 {
 557   7                  Link_ok=0;
 558   7              watchdog_feed();
 559   7                 
 560   7                 }
 561   6                 else
 562   6                 {
 563   7                  LED=0;
 564   7              Delay1ms(50);
 565   7                  LED=1;
 566   7                  j++;
 567   7              watchdog_feed();
 568   7              CS_state=0;
 569   7                      if(j>10)
 570   7                      {
 571   8                       j=0;
 572   8                       DIVM =0x00;
 573   8               watchdog_feed();
 574   8                   power_mode(POWER_TOTALPOWERDOWN);//休眠
 575   8                      }
 576   7                 }
 577   6               }
 578   5              }
 579   4          break;
 580   4         default:
 581   4          CS_state=0;
 582   4          break;
 583   4         }//end swtich
 584   3       
 585   3      
 586   3         }
 587   2         else
 588   2         {
 589   3          LED=!LED;
 590   3          Delay100ms(10);
 591   3      
 592   3              
 593   3              
 594   3               if(set_ok)//设置模块的ID
 595   3               {
 596   4                  
 597   4              watchdog_feed();
 598   4                      set_ok=0;
 599   4                  EA=0;
 600   4                  FLASH_WriteByte(0xc04,RX_addr);   //存入新ID
 601   4                  EA=1;
 602   4                      ADDR=RX_addr;
 603   4                  LED=0;
 604   4              flash_led(4);
 605   4                      i=0;
 606   4                  LED=1;
C51 COMPILER V7.05   MAIN                                                                  09/09/2004 17:04:02 PAGE 11  

 607   4                      Link_ok=1;
 608   4              watchdog_feed();
 609   4                      Setok();
 610   4               }
 611   3         }
 612   2       }
 613   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    768    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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