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

📄 3201.lst

📁 基于PL3201芯片的单相复费率载波通信多功能电表应用程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -