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

📄 db_ade7758_oreg.c

📁 ADE7758,三相电能表读写程序和初始化程序
💻 C
字号:
/*file name :DB_ADE7758_OREG.C*/

/*Function  :Read ADE7758 register and Write ADE7758 register */
#include<AM80C52.H>
#include "DB_ADE7758_OREG.H"

 sbit DB_CS_A=0x90;
 sbit DB_CS_B=0x91;
 sbit DB_CS_C=0x92;

 sbit Dout=0x97;
 sbit Din =0x96;
 sbit Sclk=0x95;

#define DB_X5045_CS0     P1=P1&0x0f8
#define DB_ADE7758_CS1   P1=P1|0x01;P1=P1&0x0f9
#define DB_LED_CS2       P1=P1|0x02;P1=P1&0x0fa
#define DB_LED_CS3       P1=P1|0x03;P1=P1&0x0fb
#define DB_DS1302_CS4    P1=P1|0x04;P1=P1&0x0fc
#define DB_Uselct_CS     P1=P1|0x07

unsigned char ADE7758_ReadData(void)
  {
     unsigned char ReadData;
     unsigned int i;
     ReadData=0x0;
     Dout = 1;
     for(i=0;i<8;i++)
     {
       ReadData=ReadData<<1;
       Sclk=0;
       YS();
       Sclk=1;
       YS();
       if(Dout)
       {
        ReadData=ReadData | 0x01;
       }
       else
       {
        ReadData=ReadData & 0xfe;
       }
       YS();
     }
     Sclk=0;
     return ReadData;

  }

void ADE7758_WriteDatain(unsigned char Datain)
  {
     unsigned char i;
     unsigned char Temp_Data;
     Temp_Data=Datain;
     Sclk=0;
     i=0;

    for(i=0;i<8;i++)
       {

         Sclk = 1;
         YS();
          if((Temp_Data & 0x80)==0x80)
         {
           Din = 1;
         }
         else
         {
           Din = 0;
         }
         Sclk = 0;
         YS();
         Temp_Data=Temp_Data<<1;
       }

  }



 void ADE7758_InitA()
  {
     /*写相应寄存器*/
     /*写12位是先写入高4位,再写入低8位*/

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(0x80);
     DB_Uselct_CS;

     /*使能输出脉冲*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(OPMODE_W8);
     ADE7758_WriteDatain(0x00);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(GAIN_W8);
     ADE7758_WriteDatain(0x00);
     DB_Uselct_CS;

     /*设置VARCF为无功功率输出脉冲*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(WAVMODE_W8);
     ADE7758_WriteDatain(0x00);
     DB_Uselct_CS;

     /*设置有功增益*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(AWG_W12);
     ADE7758_WriteDatain(ref[133]);
     ADE7758_WriteDatain(ref[132]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(BWG_W12);
     ADE7758_WriteDatain(ref[135]);
     ADE7758_WriteDatain(ref[134]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(CWG_W12);
     ADE7758_WriteDatain(ref[137]);
     ADE7758_WriteDatain(ref[136]);
     DB_Uselct_CS;

     /*设置无功增益为默认1*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(AVARG_W12);
     ADE7758_WriteDatain(ref[139]);
     ADE7758_WriteDatain(ref[138]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(BVARG_W12);
     ADE7758_WriteDatain(ref[141]);
     ADE7758_WriteDatain(ref[140]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(CVARG_W12);
     ADE7758_WriteDatain(ref[143]);
     ADE7758_WriteDatain(ref[142]);
     DB_Uselct_CS;

     /*设置输出脉冲累计的是单相还是三相*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(COMPMODE_W8);
     ADE7758_WriteDatain(0xbC);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(LCYCMODE_W8);
     ADE7758_WriteDatain(0x3f);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(LINECYC_W16);
     ADE7758_WriteDatain(0x0f);
     ADE7758_WriteDatain(0xff);
     DB_Uselct_CS;


     DB_ADE7758_CS1;
     ADE7758_WriteDatain(WDIV_W8);
     ADE7758_WriteDatain(0x32);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(VARDIV_W8);
     ADE7758_WriteDatain(0x32);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(VADIV_W8);
     ADE7758_WriteDatain(0x32);
     DB_Uselct_CS;


     /*设置有功输出脉冲分频系数*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(APCFNUM_W16);
     ADE7758_WriteDatain(0x00);
     ADE7758_WriteDatain(0x00);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(APCFDEN_W12);
     ADE7758_WriteDatain(ref[57]);
     ADE7758_WriteDatain(ref[56]);
     DB_Uselct_CS;

     /*设置无功输出脉冲分频系数*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(VARCFNUM_W16);
     ADE7758_WriteDatain(0x00);
     ADE7758_WriteDatain(0x00);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(VARCFDEN_W12);
     ADE7758_WriteDatain(ref[59]);
     ADE7758_WriteDatain(ref[58]);
     DB_Uselct_CS;

     /*相位补偿*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(APHCAL_W7);
     ADE7758_WriteDatain(ref[144]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(BPHCAL_W7);
     ADE7758_WriteDatain(ref[146]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(CPHCAL_W7);
     ADE7758_WriteDatain(ref[148]);
     DB_Uselct_CS;

     /*电压补偿*/
     /*DB_ADE7758_CS1;
     ADE7758_WriteDatain(AVRMSOS_W12);
     ADE7758_WriteDatain(ref[13]);
     ADE7758_WriteDatain(ref[12]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(BVRMSOS_W12);
     ADE7758_WriteDatain(ref[15]);
     ADE7758_WriteDatain(ref[14]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(CVRMSOS_W12);
     ADE7758_WriteDatain(ref[17]);
     ADE7758_WriteDatain(ref[16]);
     DB_Uselct_CS; */

      /*电流增益*/
     DB_ADE7758_CS1;
     ADE7758_WriteDatain(AIGAIN_W12);
     ADE7758_WriteDatain(ref[19]);
     ADE7758_WriteDatain(ref[18]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(BIGAIN_W12);
     ADE7758_WriteDatain(ref[21]);
     ADE7758_WriteDatain(ref[20]);
     DB_Uselct_CS;

     DB_ADE7758_CS1;
     ADE7758_WriteDatain(CIGAIN_W12);
     ADE7758_WriteDatain(ref[23]);
     ADE7758_WriteDatain(ref[22]);
     DB_Uselct_CS;
 }

void YS()
{
 unsigned char  i;
 for(i=0;i<0xff;i++);
}




⌨️ 快捷键说明

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