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

📄 energadd.c

📁 电能表源码
💻 C
字号:
/*************************************************************************************

	文件类型:
	文件作用:能量计量
	修改权限:
	文件相关:
	
	创 建 人:chenbo
	创建日期:2007.06.04
	当前版本:Ver0.1
	
	版本信息:Ver0.1					

**************************************************************************************/
#include "tiger.h"
#include "defvar.h"
#include "typemeter.h"
#include "chipmac.h"

extern unsigned char R_Byte(unsigned int Addr);
extern unsigned long R_Buff(void);
extern void W_Byte(unsigned int Addr,unsigned char Wdata);

extern void wrnum_flash(unsigned char num,unsigned int addr);
extern unsigned long long_to_4bcd(unsigned long value);
extern void ready_wrflash(void);
extern void Init_Interrupt(void);

//===================================================
//函数功能:获取CF脉冲个数
//备注:
//===================================================
unsigned long read_encount(void)
{ unsigned long buffer_d;
  //W_Byte(0x28a1,0x01);
  R_Byte(0x1074);                  //active
  buffer_d=R_Buff();
  R_Byte(0x1071);                  //reactive
  buffer_d+=R_Buff();

 //W_Byte(0x28a1,0x00);
  return buffer_d;
}


//=====================================================
//函数功能:根据CF个数来累加能量
//备注
//======================================================
void energ_add(void)
{unsigned long temp_CF;
 unsigned char bufeng,bufdoteng;

 if(buffer_energ[0]>buffer_energ[1])                    //如果脉冲数有增加
    { temp_CF=(buffer_energ[0]-buffer_energ[1]);        //计算增加的脉冲数
	  sumCF=sumCF+temp_CF;                                   
      buffer_energ[1]=buffer_energ[0];                  //新数据保存
	  counttime_qiandong=0;
	}
 if(sumCF>=level_add)                                   //判断是否到0.01度
   { bufdoteng=Enegedata.byte[3];
     bufeng=sumCF/level_add;
     sumCF=sumCF%level_add;
	 energehex=energehex+bufeng;                        //电量累加
     Enegedata.lword=long_to_4bcd(energehex);            //BCD码转换
     //Enegedata.lword=Enegedata.lword+bufeng;
	 F_stordot=true;                                     //小数存贮标志
     F_display=true;                                     //显示刷新标志
     if(Enegedata.byte[3]<bufdoteng)
         F_storint=true;                                  //整数存贮标志
   }
}

//========================================================
//函数功能:保存电量
//
//=======================================================
void store_energ(void)
{ unsigned char i;
  if(F_stordot==1)                                        //存贮小数部分
    { F_stordot=0;
	  wr_buffer[0]=Enegedata.byte[3];
      if(couren_addrdot==twoadd_blkeng_dot+511)           //计算存贮地址
         couren_addrdot=oneadd_blkeng_dot;
      else
         couren_addrdot=couren_addrdot+1;
	  //Fet_Dog();
      ready_wrflash();
      wrnum_flash(1,couren_addrdot);                         //存贮电量小数部分
	  Init_Interrupt();
	  if(couren_addrdot==twoadd_blkeng_dot)                  //页擦除标志位
         F_askeras3=1;
      else if(couren_addrdot==oneadd_blkeng_dot)
         F_askeras4=1;
    }
	
  if(F_storint==1)                                         // 存贮整数部分
    {F_storint=0;
	 for(i=0;i<3;i++)
         wr_buffer[i]=Enegedata.byte[i];
     if(couren_addrint==oneaddr_blkeng_A)
        { couren_addrint=twoaddr_blkeng_A;
          F_askeras1=1;
        }
     else
        { couren_addrint=oneaddr_blkeng_A;
          F_askeras2=1;
        }

     ready_wrflash();
     for(i=0;i<3;i++)
        wrnum_flash(3,couren_addrint+100*i);                //存电量整数部分
     Init_Interrupt();
    }

}

//=====================================================
//函数功能:对能量进行计量
//备注:1秒中刷新一次
//======================================================
void energcountmode(void)
{
  if((F_askeras1==false)&&(F_askeras2==false)&&(F_askeras3==false)&&(F_askeras4==false))
     {if((F_energeadd==true)&&(F_clreng==0))                                                  //开始能量刷新标志
	      { F_energeadd=false;
		    buffer_energ[0]=read_encount();                                    //读取脉冲数
			energ_add();                                                       //电量累加
			store_energ();                                                     //保存电量
		  }
 	 }
}           

⌨️ 快捷键说明

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