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