biaogai_duanliu.lst

来自「电能表源码」· LST 代码 · 共 268 行

LST
268
字号
C51 COMPILER V7.50   BIAOGAI_DUANLIU                                                       05/26/2008 08:17:35 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE BIAOGAI_DUANLIU
OBJECT MODULE PLACED IN biaogai_duanliu.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bottom\biaogai_duanliu.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDI
                    -R(E:\work\tiger D test\程序\var\) DEBUG OBJECTEXTEND PRINT(.\biaogai_duanliu.lst) OBJECT(biaogai_duanliu.obj)

line level    source

   1          /*************************************************************************************
   2          
   3                  文件类型:防窃电和启动潜动模块
   4                  文件作用:
   5                  修改权限:
   6                  文件相关:
   7                  
   8                  创 建 人:chenbo
   9                  创建日期:2007.11.21
  10                  当前版本:Ver1.0
  11          
  12          **************************************************************************************/
  13          #include "Tiger.h"
  14          #include "typemeter.h"
  15          
  16          
  17          /*
  18          //================================================
  19          //函数功能:初始化端钮盖、表盖停电期间报警模块
  20          //
  21          //================================================
  22          void ini_tindianBGDN(void)
  23          { unsigned char i;
  24            flag_BGsta。byte=0;
  25            flag_BGsta。byte=0;
  26            for(i=0;i<64;i++)
  27               {ram_BGDN[i]=IAP_FLASH_ByteRead(FL_lasteng+420+i);
  28               }
  29          }
  30          */
  31          
  32          //==================================================
  33          //函数功能:初始化防窃电和潜动模块
  34          //==================================================
  35          void int_kaiqi(void)
  36          { sta_biaogai=0;
  37   1        sta_checkbiaogai=0;
  38   1        sta_duanliu=0;
  39   1        sta_checkduanliu=0;
  40   1        
  41   1        time_biaogai=0;
  42   1        time_duanliu=0;
  43   1      
  44   1        type_kaiqi=0xff;
  45   1        type_kaiqievent=idle_qiedian;
  46   1      
  47   1        F_askerashistdata=0;
  48   1        flag_biaogai_duanliu=0;
  49   1      
  50   1      
  51   1        time_qiandong=0;
  52   1        flag_losetenvt_sec=0;
  53   1        flag_type=0;
  54   1      
C51 COMPILER V7.50   BIAOGAI_DUANLIU                                                       05/26/2008 08:17:35 PAGE 2   

  55   1      //  Disenable_BGkeyout                 //表盖,端钮盖检测IO口输出禁止
  56   1       // Disenable_DNkeyout
  57   1      
  58   1      //  Enable_BGkeyin                      //输入使能
  59   1       // Enable_DNkeyin
  60   1      
  61   1      }
  62          
  63          
  64          
  65          //=====================================================================
  66          //函数功能:恢复数据,并保存事件开始时间及事件总次数
  67          //
  68          //=====================================================================
  69          void recover_biaogaiduanliu_eng(void)
  70          { 
  71   1        unsigned char i;
  72   1        //===========================================================================开启事件数据恢复
  73   1        if(type_kaiqi==1)                                                             //端钮盖开启
  74   1            {if(copy_flash(FL_wrbuffer+420,FL_lasteng+420,30)==0)                     //拷贝出错
  75   2                    { if(Ferr_histdata==flash_ok)                                         //页没有损坏
  76   3                             copy_flash(FL_wrbuffer+420,FL_lasteng+420,30);                   //再存一次
  77   3                        }
  78   2            }
  79   1        else                                                                        //表盖开启
  80   1           { if(copy_flash(FL_wrbuffer+450,FL_lasteng+450,30)==0)                   //拷贝出错
  81   2                   {if(Ferr_histdata==flash_ok)                                          //页没有损坏
  82   3                          copy_flash(FL_wrbuffer+450,FL_lasteng+450,30);
  83   3                       }
  84   2               }
  85   1      //---------------------------------------------------------------------------结束
  86   1      
  87   1      //========================================================保存窃电事件的开始时间
  88   1        wr_buff[0]=RTCTIME.rYear;                //窃电开始时间
  89   1        wr_buff[1]=RTCTIME.rMonth;
  90   1        wr_buff[2]=RTCTIME.rDate;
  91   1        wr_buff[3]=RTCTIME.rHour;
  92   1        wr_buff[4]=RTCTIME.rMinute;
  93   1        data_addr.word[1]=FL_lasteng+420+type_kaiqi*30;
  94   1        Write_data(FLASH,5);                      //保存开始时间
  95   1      //--------------------------------------------------------------------结束
  96   1      
  97   1      
  98   1      //========================================================相应开启次数累加
  99   1        data_addr.word[1]=FL_wrbuffer+480;
 100   1        Read_data(FLASH,4);
 101   1        for(i=0;i<4;i++)
 102   1           { if(wr_buff[i]==0xff)
 103   2                      wr_buff[i]=0;
 104   2               }
 105   1        byte_x_bcd_addone(&wr_buff[2*type_qiedian],2);            //开启次数加1
 106   1        data_addr.word[1]=FL_lasteng+480;
 107   1        Write_data(FLASH,4);
 108   1      //----------------------------------------------------------结束
 109   1      
 110   1      }
 111          
 112          //======================================================================
 113          //函数功能:保存结束事件
 114          //
 115          //======================================================================
 116          void deel_endkaiqi(unsigned char type)
C51 COMPILER V7.50   BIAOGAI_DUANLIU                                                       05/26/2008 08:17:35 PAGE 3   

 117          {
 118   1        wr_buff[0]=RTCTIME.rYear;                //窃电结束时间
 119   1        wr_buff[1]=RTCTIME.rMonth;
 120   1        wr_buff[2]=RTCTIME.rDate;
 121   1        wr_buff[3]=RTCTIME.rHour;
 122   1        wr_buff[4]=RTCTIME.rMinute;
 123   1        data_addr.word[1]=FL_lasteng+420+type*30+5;
 124   1        Write_data(FLASH,5);                      //保存结束时间
 125   1      }
 126          
 127          
 128          //==========================================================================
 129          //函数功能:判端钮盖状态
 130          //
 131          //==========================================================================
 132          void pan_duanliu(void)
 133          { /*
 134   1        Enable_DNkeyin
 135   1        if(Sta_DNkeyinput==OPEN_DN)
 136   1           {  sta_checkduanliu=start_qiedian;           //端钮盖开启
 137   1               }
 138   1        else
 139   1           { if(sta_duanliu!=idle_qiedian) 
 140   1                    { sta_checkduanliu=end_qiedian;
 141   1                        }
 142   1                 else
 143   1                    { sta_checkduanliu=idle_qiedian;
 144   1                        }
 145   1               }
 146   1               */
 147   1      }
 148          
 149          //==========================================================================
 150          //函数功能:判表盖状态
 151          //
 152          //==========================================================================
 153          void pan_biaogai(void)
 154          {/* Enable_BGkeyin
 155   1        if(Sta_BGkeyinput==OPEN_BG)
 156   1           {  sta_checkbiaogai=start_qiedian;           //表盖开启
 157   1               }
 158   1        else
 159   1           { if(sta_biaogai!=idle_qiedian) 
 160   1                    { sta_checkbiaogai=end_qiedian;
 161   1                        }
 162   1                 else
 163   1                    { sta_checkbiaogai=idle_qiedian;
 164   1                        }
 165   1               }
 166   1               */
 167   1      }
 168          //==========================================================================
 169          //函数功能:表盖、端钮盖防开启模块
 170          //备注:两个事件不能同事检测,必须等到一个事件检测完毕,再渐次另外事件
 171          //==========================================================================
 172          void biaogai_duanliu_mode(void)
 173          { //unsigned char tempdata;
 174   1        if(flag_biaogai_duanliu==1)
 175   1            { if(type_kaiqi==0xff)                        //如果无窃电事件需要处理
 176   2                 { if(busy_buffflash==0)                  //如果缓存flash空闲
 177   3                    { if(flag_type>2)
 178   4                          { flag_type=0;                   //一轮事件判断结束
C51 COMPILER V7.50   BIAOGAI_DUANLIU                                                       05/26/2008 08:17:35 PAGE 4   

 179   5                            flag_losetenvt_sec=0;
 180   5                          }
 181   4                      else
 182   4                          flag_type++;
 183   4                      switch(flag_type) 
 184   4                         { case 0:                                                 //表盖开启
 185   5                                                pan_biaogai();
 186   5                                type_shijian=pan_lostshijian(&sta_biaogai,&sta_checkbiaogai,&time_biaogai,5);
 187   5                                                        break;
 188   5                           case 1:                                                 //端钮盖开启
 189   5                             
 190   5                                                        break;
 191   5                                           default:
 192   5                                                    flag_type=0;
 193   5                                                    break;
 194   5                         }  
 195   4                   
 196   4                      if(type_shijian!=idle_qiedian)                             //窃电事件开始
 197   4                                           type_qiedian=flag_type;                               //表示窃电事件处理开始
 198   4                                }
 199   3      
 200   3                         }
 201   2              if(type_qiedian!=0xff)                                             //如果有窃电事件进行处理  
 202   2                    { if(type_shijian==start_qiedian)                                //如果事件开始状态还没处理
 203   3                                  {  busy_buffflash=1;                                       //置位buff忙标志位
 204   4                                     if(copy_flash(FL_lasteng,FL_wrbuffer,512)==1)           //如果保存数据到缓存成功
 205   4                             { F_askerashistdata=1;                              //事件页擦除
 206   5                                               type_shijian=ok_copybuff;                         //状态切换到准备保存数据
 207   5                             }
 208   4                         else                                                    //如果拷贝失败
 209   4                             { if(Ferr_buff==flash_err)                          //如果本来该页已经错误
 210   5                                                  { F_askerashistdata=1;                         //事件页擦除
 211   6                                                    type_shijian=ok_copybuff;                    //状态切换到准备保存数据
 212   6                                                          }
 213   5                                                   else
 214   5                                                    F_askerasbuffer=1;                            //存数据失败,对缓存进行擦除
 215   5                             } 
 216   4                                  }
 217   3                         else if((type_shijian==ok_copybuff)&&(F_askerashistdata==0))     //如果缓存数据完毕且页擦除完毕
 218   3                                  { recover_biaogaiduanliu_eng();                             //恢复数据并保存开始事件
 219   4                                    type_qiedian=0xff;                                        //处理结束,继续处理下一事件
 220   4                                    F_askerasbuffer=1;                                        //擦buffer页
 221   4                                  }
 222   3                         else if(type_shijian==end_qiedian)                           //事件结束
 223   3                                  { deel_endkaiqi(type_qiedian);                          //处理结束事件
 224   4                                    type_qiedian=0xff;                                    //处理结束,继续处理下一事件
 225   4                                  }
 226   3                   } 
 227   2      
 228   2          }
 229   1      }                                                                                                         
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    562    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V7.50   BIAOGAI_DUANLIU                                                       05/26/2008 08:17:35 PAGE 5   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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