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

📄 amr_cctr.lst

📁 此源码为商用的电力抄表系统的主机端源程序。通过电力载波模块
💻 LST
字号:
C51 COMPILER V8.01   AMR_CCTR                                                              12/22/2005 17:03:08 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE AMR_CCTR
OBJECT MODULE PLACED IN amr_cctr.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE amr_cctr.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND P
                    -REPRINT

line level    source

   1          /*=============================================================================*/
   2          // amr_cctr.c  - source file for lme2200 API
   3          // 
   4          // Copyright 2005, Leaguer MicroElectronics Co., Ltd
   5          // www.leaguerme.com
   6          /*=============================================================================*/
   7          
   8          #include <REG922.H>
   9          
  10          #include "sart.h"
  11          #include "plc.h"
  12          #include "string.h"
  13          #include "amr_cctr.h"
  14          #include "amr_config.h"
  15          #include "wr_flash.h"
  16          #include "pc_com.h"
  17          #include "timer.h"
  18          #define uint unsigned int
  19          #define uchar unsigned char
  20          
  21          
  22          extern idata uchar amr_frame[];  // AMR frame buffer
  23          extern idata uchar plc_frame[18];
  24          extern uchar code return_frame[] = {0xfe,0xfe,0xfe,0xfe,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x01,0x02,
             -0x43,0xc3,0xd9,0x16}; //18bybe;
  25          extern code uchar  METER_ADDR[6];
  26          extern bit  NO_METER;
  27          
  28          /*=============================================================================*/
  29          
  30          void amr_init()
  31          {
  32   1      test_meter();
  33   1      }
  34          
  35          /*=============================================================================*/
  36          
  37          // Check the checksum of the frame
  38          uchar amr_check_cs(uchar frame[],bit Q)
  39          {
  40   1         uchar i;
  41   1         uchar len;
  42   1         uchar cs = 0xd0; ///2 * 68
  43   1      
  44   1        if(Q) len = frame[1] + 2;  //*<---1* 
  45   1        else  len = frame[AMR_OS_L] + 8;  //*<---7*
  46   1        
  47   1      
  48   1         for(i = 0; i < len; i++)
  49   1                 cs += frame[i];
  50   1      
  51   1         return cs;//(cs == frame[i]); 
  52   1      }
  53          /*=============================================================================*/
C51 COMPILER V8.01   AMR_CCTR                                                              12/22/2005 17:03:08 PAGE 2   

  54          
  55          
  56          uchar amr_calcu_cs(uchar frame[], uint len,uchar i)
  57          {
  58   1       uchar cs;
  59   1       uchar j;
  60   1        cs = 0;
  61   1        for (j = i; j < len; j++)
  62   1          cs += frame[j];
  63   1      
  64   1        return cs;
  65   1      }
  66          
  67          /*=============================================================================*/
  68          /*                                                 数据发送到PC                                                                    */
  69          /*=============================================================================*/
  70          
  71          void amr_send_frame(uchar addr[6], uchar buf[])
  72          {
  73   1        idata uchar frame[23];
  74   1        uchar  i;
  75   1        uchar  En;
  76   1         
  77   1           En = buf[AMR_OS_L] +2;
  78   1          for (i = 0; i < En+1; i++)
  79   1              frame[i] = buf[6 + i];//从C开始存放
  80   1        // preamble
  81   1        for (i = 0; i < 4; i++)  amr_frame[i] = AMR_PREAMBLE; //放入0xFE
  82   1      
  83   1        // address
  84   1        amr_frame[4] = AMR_FRAMESYNC;         //0x68
  85   1        clr_wdt();
  86   1        for (i = 5; i < 11; i++)   amr_frame[i] = addr[i-5];     //6位地址
  87   1      
  88   1        amr_frame[11] = AMR_FRAMESYNC;
  89   1        
  90   1      // C, L and data including CS   
  91   1        for (i = 0; i < En+1; i++) amr_frame[12+i] = frame[i];
  92   1       
  93   1        amr_frame[13 + En] = 0x16;  //多补16h
  94   1        
  95   1        uart_sendblock(amr_frame, 14 + En); //串口送至表
  96   1        clr_wdt(); 
  97   1      }
  98          
  99          /*=============================================================================*/
 100          void test_meter()
 101          { 
 102   1        uchar chr = 0;
 103   1        uint i,cone; 
 104   1        for(i = 0; i < 18; i++)
 105   1         plc_frame[i] = return_frame[i];
 106   1      
 107   1        for(i = 0;i < 6;i ++)
 108   1         plc_frame[5+i]  =  METER_ADDR[i];
 109   1      
 110   1        plc_frame[16] =  0x00;
 111   1        plc_frame[16] = amr_calcu_cs(plc_frame, 16,4);   //校验和
 112   1      
 113   1        uart_sendblock(plc_frame, 18);
 114   1      
 115   1        while(1){// 
C51 COMPILER V8.01   AMR_CCTR                                                              12/22/2005 17:03:08 PAGE 3   

 116   2               if(uart_recved()) {  // AMR frame recved from meter
 117   3                        if (recv_amr_frame()) { 
 118   4                           for(i = 0; i < 14; i++)chr += amr_frame[i]; 
 119   4                        chr += 0xd0;
 120   4                               if( amr_frame[14] == chr){
 121   5                           NO_METER = 1;//有表                
 122   5                       }
 123   4                       }
 124   3                      } 
 125   2               if(cone++ > 25000)return;//已定好时间
 126   2        }
 127   1      
 128   1      }
 129          
 130          /*=============================================================================*/
 131          
 132          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
 133                                         软件修改说明在main.c,敬请留意
 134          
 135          !!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
 136                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 137          
 138          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
 139          
 140          
 141          
 142          
 143          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    485    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      22
   IDATA SIZE       =   ----      23
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -