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

📄 3201demo.lst

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