?? plc51x.lst
字號:
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 // 延遲 函數(shù) 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 // 串口初始化 函數(shù) 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 入口 函數(shù) 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 // 主程序入口 主函數(shù) //
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個字節(jié)
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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -