初始化寄存器,然后读取一个寄存器(已初始化)的值,发现读出的数据在变化,请大神帮我看看程序!万分感谢!!
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);
}