plc51x.lst

来自「PLC源代码」· LST 代码 · 共 664 行 · 第 1/4 页

LST
664
字号
 476          void mov_to_old(void)
 477          { unsigned char i;
 478   1        for (i=0; i<_X_BYTE; i++) { rX1[i].BYTE = rX[i].BYTE; }
 479   1        for (i=0; i<_Y_BYTE; i++) { rY1[i].BYTE = rY[i].BYTE; }
 480   1        for (i=0; i<_M_BYTE; i++) { rM1[i].BYTE = rM[i].BYTE; }
 481   1        for (i=0; i<_S_BYTE; i++) { rS1[i].BYTE = rS[i].BYTE; }
 482   1        for (i=0; i<_T_BYTE; i++) { rT1[i].BYTE = rT[i].BYTE; }
 483   1        for (i=0; i<_C_BYTE; i++) { rC1[i].BYTE = rC[i].BYTE; }
 484   1        for (i=0; i<_M8xxx_BYTE; i++) { rM8xxx1[i].BYTE = rM8xxx[i].BYTE; }
 485   1        for (i=0; i<_T_num; i++ )
 486   1          { if (_T[i][0] >= _T[i][1])
 487   2                      { rT[((&_T[i][0]-&_T[0][0])/2)/8].BYTE |= 1<<(((&_T[i][0]-&_T[0][0])/2)%8); 
 488   3                      } 
 489   2                else { rT[((&_T[i][0]-&_T[0][0])/2)/8].BYTE &= ~(1 << (((&_T[i][0]-&_T[0][0])/2)%8));
C51 COMPILER V8.16   PLC51X                                                                10/10/2009 14:43:40 PAGE 9   

 490   3                         }  
 491   2          }
 492   1        PS1_BIT = PS_BIT;
 493   1      }
 494          
 495          //-------------------------------------------------------------------------------------//
 496          //  延迟 函数  delay_ms(unsigned int time)                                             //
 497          //-------------------------------------------------------------------------------------//
 498          
 499          void delay_ms(unsigned int time)
 500          {
 501   1              volatile unsigned int i;
 502   1              volatile unsigned char j;
 503   1              for (i=0; i<time; i++)
 504   1                {     for(j=0;j<0xfe;j++);
 505   2                      for(j=0;j<0xfe;j++);
 506   2                }
 507   1      }
 508          
 509          //-------------------------------------------------------------------------------------//
 510          //   串口初始化 函数  UartInit();                                                      //
 511          //-------------------------------------------------------------------------------------//
 512          
 513          void UartInit(void)
 514          {
 515   1              SCON  = 0x50;
 516   1              //PCON |= 0x80;
 517   1              //AUXR2|= 0x40;
 518   1              //Timer1Init();
 519   1              TR1=0;                          //停止定时器
 520   1      //      TCON=0x00;                      //定时器控制寄存器 注意:TCON只需操作一次
 521   1              TMOD |= 0x20;           //定时器1
 522   1              TL1 = -(SYSCLK/12/32/baud);//0xfa;      // -(SYSCLK/12/32/baud);        //注意波特率加倍位
 523   1              TH1 = TL1;
 524   1              TR1=1;                          //启动定时器1
 525   1      //      ET1=1;                          //打开定时器1中断
 526   1              UartReceiveCounter=0;
 527   1              UartRxTimerStartFlag=0;
 528   1      }
 529          
 530          //-------------------------------------------------------------------------------------//
 531          //   PLC 入口 函数  main_PLC();                                                        //
 532          //-------------------------------------------------------------------------------------//
 533          
 534          void main_PLC (void)
 535          {
 536   1        CODE_p = (unsigned char code *)CODE_START;
 537   1        Pi = 0x01;
 538   1        do{
 539   2            orderL = *CODE_p;
 540   2                CODE_p++;
 541   2            orderH = *CODE_p;
 542   2                CODE_p++;
 543   2            ppp = order & 0xfff;
 544   2            (*key_list[orderH >> 4])();
 545   2          } while((CODE_p < CODE_END) && (CODE_p != CODE_START));
 546   1      }
 547          
 548          //-------------------------------------------------------------------------------------//
 549          //  主程序入口 主函数                                                                  //
 550          //-------------------------------------------------------------------------------------//
 551          
C51 COMPILER V8.16   PLC51X                                                                10/10/2009 14:43:40 PAGE 10  

 552          void main(void)
 553          { unsigned char reset_i=1;
 554   1        unsigned int i;
 555   1        unsigned char PLCType=0x01;
 556   1        unsigned char PLCTypeArray[PLCTypeArrayLen]="FX1N PLC";       //      PLC类型标识;最长19个字节
 557   1        unsigned char code ArrFirstused[]="First used!\0";
 558   1        unsigned char code ArrPass[]="PASS!\0";
 559   1        reset_IO();
 560   1        reset_RAM();
 561   1        reset_interrupt();
 562   1        UartInit();
 563   1        EA = 1;
 564   1        PLCType=IAPFlashReadMode(PLCTypeAddr);                //      上电,核实 PLC 硬件版本号
 565   1        if(PLCType!=0)                                                                //      第一次使用. IAP -- "FX1N PLC\r\n".
 566   1              { ErasurePLC(ErasureALL);                                       //      全部擦除        初始PLC程序为空
 567   2                IAPFlashProgremMode(PLCTypeAddr,0);           //      更新硬件版本号标识符标志
 568   2                for(i=0;i<PLCTypeArrayLen;i++)                        //      更新硬件版本号
 569   2                      { IAPFlashProgremMode(PLCTypeAddr+1+i,PLCTypeArray[i]);
 570   3                      }
 571   2                for(i=0;i<46;i++)                                             //      写入PLC初始化代码                       查询地址0x8000. 0x802e.
 572   2                      { IAPFlashProgremMode(0x8000+i,OrderSend3[i]);
 573   3                        IAPFlashProgremMode(0x802e+i,OrderSend4[i]);
 574   3                      }
 575   2                UartSendString(ArrFirstused);
 576   2              }
 577   1        else UartSendString(ArrPass);
 578   1        for(i=0;i<PLCTypeArrayLen;i++)
 579   1              { PLCTypeArray[i]=IAPFlashReadMode(PLCTypeAddr+1+i);
 580   2              }
 581   1        UartSendByte(PLCTypeArray,PLCTypeArrayLen);
 582   1        UartSendString("\r\n");
 583   1        Value=0;
 584   1        while (((P1 & 0x03) == 0) && (RUN == 0)) 
 585   1          { FX1NProcessing();                                         //      PLC下载通信处理
 586   2                      if ((P1 & 0x03) != 0)    
 587   2                        { delay_ms(20);
 588   3                              if ((P1 & 0x03) != 0)
 589   3                            { RUN = 1;
 590   4                                  IFMT  = 0;        // 
 591   4                                  ISPCR = 0x20;         // SWBS  = 0; 选择AP空间, SWRST = 1; 软复位
 592   4                                      while (1) { ; }
 593   4                                }
 594   3                        }
 595   2          }
 596   1        CODE_scan();
 597   1        while (1)
 598   1          { input_IO();
 599   2                if (CODE_ERROR == 0)
 600   2              { main_PLC();
 601   3                      }
 602   2                else 
 603   2                  { if (Pulse_Sec != 0)
 604   3                          { P1 &= 0xfc;            // PLC 程序出错报警,X0,X1灯闪烁。
 605   4                              }
 606   3                        else
 607   3                          { P1 |= 0x03;
 608   4                              }
 609   3                      }
 610   2            _T100mS();
 611   2                _T1Set();
 612   2            mov_to_old();
 613   2                if (reset_i != 0) 
C51 COMPILER V8.16   PLC51X                                                                10/10/2009 14:43:40 PAGE 11  

 614   2              { reset_i--; reset_M8xxx(); 
 615   3                      }
 616   2          }
 617   1      }
 618          
 619          //-------- main  END ----------//
 620          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2565    ----
   CONSTANT SIZE    =     63    ----
   XDATA SIZE       =    411      16
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     56    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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