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

📄 energadd.lst

📁 电能表源码
💻 LST
字号:
C51 COMPILER V7.06   ENERGADD                                                              11/24/2008 09:37:03 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE ENERGADD
OBJECT MODULE PLACED IN energadd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bottom\energadd.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDIR(C:\DO
                    -CUMENTS AND SETTINGS\ADMINISTRATOR.LENOVO-80B42371\桌面\VANGO\程序\var\) DEBUG OBJECTEXTEND PRINT(.\energadd.lst) OBJECT
                    -(energadd.obj)

stmt level    source

   1          /*************************************************************************************
   2          
   3                  文件类型:
   4                  文件作用:能量计量
   5                  修改权限:
   6                  文件相关:
   7                  
   8                  创 建 人:chenbo
   9                  创建日期:2007.06.04
  10                  当前版本:Ver0.1
  11                  
  12                  版本信息:Ver0.1                                        
  13          
  14          **************************************************************************************/
  15          
  16          #include "Tiger.h"
*** WARNING C318 IN LINE 16 OF bottom\energadd.c: can't open file 'Tiger.h'
  17          #include "typemeter.h"
*** WARNING C318 IN LINE 17 OF bottom\energadd.c: can't open file 'typemeter.h'
  18          
  19          extern void byte_x_bcd_addone(unsigned char *point,unsigned char num);
  20          
  21          //=====================================================
  22          //函数功能:初始化能量累加模块
  23          //=====================================================
  24          void int_energeadd(void)
  25          { buffer_energ[0]=0;
*** ERROR C202 IN LINE 25 OF BOTTOM\ENERGADD.C: 'buffer_energ': undefined identifier
  26   1        buffer_energ[1]=0;
*** ERROR C202 IN LINE 26 OF BOTTOM\ENERGADD.C: 'buffer_energ': undefined identifier
  27   1        F_energeadd=0;
*** ERROR C202 IN LINE 27 OF BOTTOM\ENERGADD.C: 'F_energeadd': undefined identifier
  28   1      }
  29          
  30          //===========================================
  31          //函数功能:3备份电量整数部分到EEPROM中
  32          //
  33          //===========================================
  34          
  35          void stor_engthr(unsigned int stor_id)
  36          { unsigned char i,num,datanum;
  37   1        num=addr_from_coreID(1,stor_id); 
  38   1        for(i=0;i<num;i++)
  39   1           { if((*ID_coretalbpoint[i]).stortype==EEPROM)
  40   2                    {  data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;
  41   3                           datanum=(*ID_coretalbpoint[i]).datalong;
  42   3                           Write_data(EEPROM,datanum);
  43   3                }
  44   2               }
  45   1      }
  46          
  47          //=================================================
  48          //函数功能:在电量累加前对电量整数部分进行检测
C51 COMPILER V7.06   ENERGADD                                                              11/24/2008 09:37:03 PAGE 2   

  49          //
  50          //==================================================
  51          void check_engint(unsigned int chk_id)
  52          { unsigned char i,j,k,num,value,datanum;
  53   1        Word32 recover_buff;
  54   1        uint32 recoverdata[3];
  55   1        value=0;
  56   1        k=0;
  57   1        num=addr_from_coreID(1,chk_id);
  58   1        for(i=0;i<num;i++)
  59   1           { if((*ID_coretalbpoint[i]).stortype==EEPROM)
  60   2                    {  data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;
  61   3                           datanum=(*ID_coretalbpoint[i]).datalong;
  62   3                           Read_data(EEPROM,datanum);
  63   3                               wr_buff[datanum]=0;
  64   3                               recover_buff.lword=0;
  65   3                               for(j=0;j<datanum-1;j++)                            //校验和判断
  66   3                                   { wr_buff[datanum]+=wr_buff[j];
  67   4                         recover_buff.byte[j]=wr_buff[j];              //保存读出来的数据
  68   4                                       }
  69   3                   recoverdata[k++]=recover_buff.lword;
  70   3                               if(wr_buff[datanum]==(wr_buff[datanum-1]-0x33))     //如果校验和正确
  71   3                                  { if(check_X_bcd((datanum-1),wr_buff)==1)        //BCD嘛校验
  72   4                                           { value=1;                                  //检测到合法数据,放在wr_buff中
  73   5                                                 break;
  74   5                                               }
  75   4                                      }
  76   3                        }
  77   2               }
  78   1        if(value==0)                                                    //EEPROM中恢复数据错误
  79   1           {  if(one_from_three(recoverdata)==1)                        //三中取二成功
  80   2                     { recover_buff.lword=recoverdata[0];
  81   3                           if(check_X_bcd(4,recover_buff.byte)==1)               //BCD码校验正确
  82   3                                  { for(j=0;j<datanum-1;j++)
  83   4                                            { wr_buff[j]=recover_buff.byte[j];           //恢复合法数据
  84   5                                                  value=1;
  85   5                                                } 
  86   4                                      }
  87   3                         }
  88   2                 if(value==0)                                                //如果没有恢复合法数据,从零开始计量
  89   2                 { for(j=0;j<datanum-1;j++)
  90   3                              wr_buff[j]=0;
  91   3                     }
  92   2               }
  93   1      
  94   1       for(i=0;i<num;i++)
  95   1           { if((*ID_coretalbpoint[i]).stortype==RAM)
  96   2                     { data_addr.word[1]=(*ID_coretalbpoint[i]).dataaddr;
  97   3                           datanum=(*ID_coretalbpoint[i]).datalong-1;
  98   3                           Write_data(RAM,datanum);
  99   3                         }
 100   2           }
 101   1      }
 102          
 103          //====================================================
 104          //函数功能:电量累加
 105          //
 106          //====================================================
 107          void add_energe(unsigned int ID_code,unsigned char *point_cf,unsigned int chshu)
 108          { unsigned char  buff_check,i,num;
 109   1        unsigned int temp_addr;
 110   1        chshu=chshu/100; 
C51 COMPILER V7.06   ENERGADD                                                              11/24/2008 09:37:03 PAGE 3   

 111   1        if(*point_cf>=chshu)                              //能量累加
 112   1           { num=(*point_cf)/chshu;
 113   2                 *point_cf=(*point_cf)%chshu;
 114   2             check_engint(ID_code);                          //累加前对电量整数部分进行监测
 115   2             addr_baseonIDandtype(RAM,ID_code);
 116   2                 temp_addr=(*ID_coretalbpoint[0]).dataaddr;
 117   2             buff_check=ram[temp_addr+2];// +2
 118   2                 byte_x_bcd_addX(&ram[temp_addr],4,num);            // 能量累加
 119   2      
 120   2      //       stor_doteng(temp_addr);                          //保存电量小数部分
 121   2      //         tt=ram[temp_addr+3];
 122   2      
 123   2             if(ram[temp_addr+2]!=buff_check)                   //保存整数部分
 124   2                   {  wr_buff[3]=0;
 125   3                          for(i=0;i<3;i++)
 126   3                                  { wr_buff[i]=ram[temp_addr+i];
 127   4                                        wr_buff[3]+=wr_buff[i];
 128   4                                      }
 129   3                         stor_engthr(ID_code);
 130   3                       }
 131   2               }
 132   1      }
 133          
 134          //======================================================
 135          //函数功能:电量累加模块,完成对总电量、费率电量、失压失流电量的累加
 136          //
 137          //======================================================
 138          void energ_addmode(void)
 139          { unsigned int temp_int;
 140   1        if(F_energeadd==1)
 141   1           { F_energeadd=0;
 142   2             //--------------------------获取脉冲常数
 143   2                 addr_baseonIDandtype(RAM,ID_CHANGSHU);                          //获取脉冲常数指针
 144   2                 data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
 145   2             Read_data((*ID_coretalbpoint[0]).stortype,(*ID_coretalbpoint[0]).datalong);
 146   2             temp_int=value_hex_from_2bcd(&wr_buff[1]);
 147   2                 if((temp_int>12800)||(temp_int<400))                         //脉冲常数是否异常
 148   2                       temp_int=400;                                          //按默认参数计算
 149   2             //============================正向有功
 150   2             add_energe(ID_POSENGSUM,&sumCF_Z,temp_int);                     //正向有功总能量累加
 151   2           }
 152   1      }          

C51 COMPILATION COMPLETE.  2 WARNING(S),  3 ERROR(S)

⌨️ 快捷键说明

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