电子元器件论坛
直播中

叹久

10年用户 895经验值
擅长:可编程逻辑 光电显示 接口/总线/驱动
私信 关注

ADE7754初始化寄存器,读取一个寄存器的值,发现读出的数据在变化是怎么回事?

初始化寄存器,然后读取一个寄存器(已初始化)的值,发现读出的数据在变化,请大神帮我看看程序!万分感谢!!
void init_ADE7754(void)                           //ADE7754初始化
{
   write_Data_8(0x0a, 0x04);   //OPMODE CF的输出不使能
   write_Data_8(0x0b, 0x10);   //mmode,相的选择,A:0x10;B:0x25;C:0x4a/0x70 ABC都选
   write_Data_8(0x0c, 0x08);      //Wavmode 第五位为0,累加有功电能
   write_Data_8(0x0d, 0x2d);   //Watmode 电能计算公式,A:0x24;B:0x12;C:0x09;ABC:0x3f
   write_Data_8(0x18,0x04);       //GAIN(绝对值求和)
   write_Data_16(0x0f, 0x0400);   //IRQEN 中断使能
   write_Data_16(0x13, 0x0004);   //LINCYC 累积周期4
   //write_Data_16(0x26, 0x0000);   //CF的输出频率
   write_Data_16(0x3d, 0x01f7);   //减小相间的耦合
}
void write_Data_8( char addr,int8 data)             //ADE7754写数据(8位)
{
   int8 i=16;
   int16 add=0;
   int16 buf1=0;
   add=0x80|addr;           //地址
   buf1=(add<<8)|data;
   IO0SET=CS_SPI;     
   IO0CLR=CS_SPI;      //通讯模式
   IO0SET=CLK_SPI;
   while(i)                      //发送地址和数据
   {
   IO0CLR=CLK_SPI;
   if(buf1 (1<<(i-1)))
   IO0SET=DIN_SPI;
   else
   IO0CLR=DIN_SPI;
   IO0SET=CLK_SPI;
   i--;
   }
   IO0CLR=CLK_SPI;
   IO0SET=CS_SPI;
}
int8 read_Data_8(char addr)         //读数据(8位)
{
   int8 data=0;
   int8 i=8;int8 j=8;
   IO0CLR=CLK_SPI;
   IO0CLR=CS_SPI;           
   IO0SET=CLK_SPI;               //write 要读的寄存器地址
   while(i)
   {
   IO0CLR=CLK_SPI;
   if(addr (1<<(i-1)))
   IO0SET=DIN_SPI;
   else
   IO0CLR=DIN_SPI;
   IO0SET=CLK_SPI;
   i--;
   }
   IO0CLR=CLK_SPI;
   delay_5us();              //延时5us
   while(j)                      // 读数据
   {
   IO0SET=CLK_SPI;
   if(IO0PIN DOUT_SPI)
   data|=1<<(i-1);
   IO0CLR=CLK_SPI;
   i--;
   }
   IO0SET=CS_SPI;
   return(data);
}

                                                               

更多回帖

发帖
×
20
完善资料,
赚取积分