📄 3201.lst
字号:
509 3 break;
510 3
511 3 case 4: //
512 3 COM_recv_buf[COM_recv_pointer]=SBUF;
513 3 COM_recv_pointer++;
514 3 COM_State=5;
515 3 break;
516 3
517 3 case 5:
518 3 COM_recv_buf[COM_recv_pointer]=SBUF;
519 3 COM_recv_pointer++;
520 3 if ( COM_recv_pointer>=COM_recv_len )
521 3 {
522 4 PLC_total_len=COM_recv_len;
523 4 COM_State=6; //接收完成态
524 4 RS_RLED=1; // 串口接收指示灯灭lxw2006-3-14 15:44
525 4 for ( COM_recv_pointer=0; COM_recv_pointer < PLC_total_len ; COM_recv_pointer++ )
526 4 R_T_buf_bak[ COM_recv_pointer ] = COM_recv_buf[ COM_recv_pointer ];
527 4 //备份串口的接收数据
528 4 }
529 3 break;
530 3 default:
531 3 COM_State=0;
532 3 COM_recv_pointer=0;
533 3 break;
534 3 }
535 2 }
536 1 }
537 /**************************************************************************************
538 *
539 * FUNCTION: LED_flash3
540 *
541 * DESCRIPTION: 开机指示指示灯闪烁三次表示复费率
542 *
543 * PARAMETERS: none
544 *
545 * RETURNED: none
546 *
547 *************************************************************************************/
548 void LED_flash3 ( )
549 {
550 1 uchar data i;
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 10
551 1 uchar data j;
552 1 uchar data k;
553 1 uchar data h;
554 1
555 1
556 1 for ( h=0;h<3;h++ )
557 1 {
558 2 FUNC_LED = 0;
559 2 RS_RLED = 0; // 串口接收指示灯D2
560 2 PLC_TLED = 0; // 载波发送指示灯D3
561 2 PLC_RLED = 0; // 载波接收指示灯D4
562 2 RS_TLED = 0; // 串口发送指示灯D5
563 2 FUNC_LED = 0; // 载波通讯方式,亮:3200模式;灭:3105模式D6
564 2
565 2 for ( k=0;k<4;k++ )
566 2 {
567 3 for ( j=0;j<250;j++ )
568 3 {
569 4 WDT_RST=0xa1; // 清看门狗
570 4 for ( i=0;i<0xff;i++ );
571 4 }
572 3 }
573 2
574 2
575 2 FUNC_LED = 1;
576 2 RS_RLED = 1; // 串口接收指示灯D2
577 2 PLC_TLED = 1; // 载波发送指示灯D3
578 2 PLC_RLED = 1; // 载波接收指示灯D4
579 2 RS_TLED = 1; // 串口发送指示灯D5
580 2 FUNC_LED = 1; // 载波通讯方式,亮:3200模式;灭:3105模式D6
581 2
582 2 for ( k=0;k<4;k++ )
583 2 {
584 3 for ( j=0;j<250;j++ )
585 3 {
586 4 WDT_RST=0xa1; // 清看门狗
587 4 for ( i=0;i<0xff;i++ );
588 4 }
589 3 }
590 2 }
591 1 }
592 /**************************************************************************************
593 *
594 * FUNCTION: PLC_rset
595 *
596 * DESCRIPTION: redundancy check PLC set when no sending and receiving
597 *
598 * PARAMETERS: none
599 *
600 * RETURNED: none
601 *
602 *************************************************************************************/
603 void PLC_rset()
604 {
605 1 uchar s1;
606 1 PSK_OUT=1;
607 1 if( function_now == 0 ) // 3200 check every 6 sec
608 1 {
609 2 FUNC_LED=0; // MEAN 3200 FUNCTION
610 2 SSC_ADR=0x03;
611 2 s1=SSC_DAT;
612 2 if ( ( s1&0xf0 )!=0xc0 )
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 11
613 2 set_PLC_3200 ();
614 2 }
615 1 else if ( function_now == 0xff ) //3105
616 1 {
617 2 FUNC_LED=1; // MEAN 3105 FUNCTION
618 2 SSC_ADR=0x03;
619 2 s1=SSC_DAT;
620 2 if ( ( s1&0xf0 )!=0xe0 )
621 2 set_PLC_3105 ();
622 2 }
623 1 }
624 /////////////////////////////////////
625 // 主程序
626 /////////////////////////////////////
627 void main ( void )
628 {
629 1 uchar data i;
630 1 uchar data j;
631 1
632 1 for ( i=0; i<5; i++ ) //wait for the stabilization of power
633 1 {
634 2 for ( j=0; j<0xff; j++ );
635 2 }
636 1
637 1 for ( i=0; i<5; i++ )
638 1 {
639 2 for ( j=0; j<0xff; j++ );
640 2 }
641 1
642 1 LED_flash3(); //上电时所有led(除电源灯)闪亮3下
643 1
644 1 for ( i=0; i<250;i++ ) //clear the buf of com 、PLC and their bak
645 1 {
646 2 COM_recv_buf[i] =0x00;
647 2 PLC_recv_buf[i] =0x00;
648 2 R_T_buf_bak[i] =0x00;
649 2 }
650 1
651 1 /***clear the state of com and the PLC **/
652 1 COM_State=0;
653 1 COM_recv_pointer=0;
654 1 PLC_Rxd_OK=0;
655 1 PLC_sending=0;
656 1 PLC_Rxd_state=0;
657 1 PLC_timer=0;
658 1 PLC_Rxd_timer=0x00;
659 1 PLC_Rxd_flag =0; // lxw2006-3-2
660 1
661 1 /***turn off the led***************/
662 1
663 1 FUNC_LED = 1;
664 1 RS_RLED = 1; // 串口接收指示灯D2
665 1 PLC_TLED = 1; // 载波发送指示灯D3
666 1 PLC_RLED = 1; // 载波接收指示灯D4
667 1 RS_TLED = 1; // 串口发送指示灯D5
668 1 FUNC_LED = 1; // 载波通讯方式,亮:3200模式;灭:3105模式D6
669 1
670 1 function_now=0xff; // defaut function 3105
671 1
672 1 initsys (); // init settings
673 1 txdbyte ( 'S' );
674 1 txdbyte ( 't' );
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 12
675 1 txdbyte ( 'a' );
676 1 txdbyte ( 'r' );
677 1 txdbyte ( 't' );
678 1 while ( 1 ) //主循环
679 1 {
680 2 WDI=0x9a; // 清看门狗
681 2
682 2 if(!(PLC_Rxd_timer||PLC_sending)) // no sending and receiving
683 2 {
684 3 PLC_rset();
685 3 }
686 2
687 2 Txd_p31=1; Rxd_p30=1; // REDUNDANCY
688 2
689 2 initsys_ref(); // REDUNDANCY
690 2
691 2 if ( PLC_Rxd_OK ) // 载波接收完毕
692 2 PLC_prog (); // 载波接收处理
693 2
694 2 if (RI) // 有串口下发命令
695 2 COM_Re_prog (); // 串口接收处理函数
696 2
697 2 if ( COM_State == 6 ) // com receive data ok
698 2 { // 设置载波发送起始数据
699 3 COM_State=7;
700 3 COM_recv_pointer=0;
701 3
702 3 /*position the 09 af*/
703 3 while ( R_T_buf_bak[COM_recv_pointer] == 0xff )
704 3 COM_recv_pointer++;
705 3
706 3 PLC_total_len=PLC_total_len-COM_recv_pointer; // LENTH OF PLC SEND
707 3
708 3 for ( i=0;i<PLC_total_len;i++ )
709 3 R_T_buf_bak[i]=R_T_buf_bak[i+COM_recv_pointer];
710 3
711 3 PLC_send_pointer=3; //
712 3 PLC_data=R_T_buf_bak[2]; // 送发送首字节
713 3 PLC_sending=1; // 置正在发送标志
714 3 SSC_ADR=0x03;
715 3 SSC_DAT= ( SSC_DAT|0x01 ); //设置3201为发送状态
716 3 SSC_BUF= PLC_data; //向载波发送缓冲区发送第一个字节。
717 3
718 3 PLC_TLED=0; // 发送指示灯亮
719 3 PLC_timer=30; // 载波发送过程延时控制1.5秒
720 3 }
721 2
722 2 if ( COM_State == 8) // com receive data ok
723 2 { // 设置载波发送起始数据
724 3 COM_State=7;
725 3 PLC_total_len=R_T_buf_bak[0]+1;
726 3 PLC_send_pointer=1; //
727 3 PLC_data=R_T_buf_bak[0]; // 送发送首字节
728 3 PLC_sending=1; // 置正在发送标志
729 3 SSC_ADR=0x03;
730 3 SSC_DAT= ( SSC_DAT|0x01 ); //设置3201为发送状态
731 3 SSC_BUF= PLC_data; //向载波发送缓冲区发送第一个字节。
732 3
733 3 PLC_TLED=0; // 发送指示灯亮
734 3 PLC_timer=30; // 载波发送过程延时控制1.5秒
735 3 }
736 2
C51 COMPILER V7.06 3201 05/10/2007 10:43:22 PAGE 13
737 2 if ( COM_State == 7 ) // 判断载波是否发送完; 发送完将 COM_State=0;
738 2 {
739 3 if ( PLC_sending == 0 )
740 3 COM_State=0;
741 3 /* CLEAR THE FLAGE OF SENDING WHEN PLC SEND TIMER IS 0 */
742 3 if ( PLC_timer == 0 ) // PLC sending finish
743 3 {
744 4 SSC_ADR=0x03;
745 4 SSC_DAT= (SSC_DAT&0xFE); // 设置3201为REC状态REDUNDANCY
746 4 PLC_sending=0;
747 4 PLC_TLED=1;
748 4 COM_State=0;
749 4 }
750 3 }
751 2 }
752 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1313 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 750 ----
PDATA SIZE = ---- ----
DATA SIZE = 15 ----
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 + -