使用单片机普通IO口对ade7758进行读写操作,可以读出寄存器中的数据,但不能写入。
在每次写操作之后,延时,再次读取数据,发现寄存器根本没有改变仍然是原来的值。
懂这个芯片的高手们希望得到你们的指导,谢谢了
/*=======================================
ade7758数据读取函数 参数一 目标寄存器地址
参数二 读取数据宽度
=======================================*/
unsigned long Read_Ade7758(unsigned char byte,unsigned char num)
{
unsigned char i;
unsigned long ade_data;
ade_data=0;
ADE_CS=0;
ADE_SCLK=0;
byte&=0x7f; //首位为0 读出
for (i=0;i<4;i++) ;
for (i=0;i<8;i++)
{
_nop_();
ADE_SCLK=1;
_nop_();
if (byte&0x80)
ADE_DIN=1;
else
ADE_DIN=0;
_nop_();
_nop_();
ADE_SCLK=0;
byte<<=1;
_nop_();
}
for (i=0;i<8;i++)
{} //延时
ade_data=0;
for (i=0;i<num;i++)
{
ADE_SCLK=1;
_nop_();
_nop_();
ade_data<<=1;
if (ADE_DOUT)
ade_data++;
ADE_SCLK=0;
_nop_();
_nop_();
_nop_();
}
for (i=0;i<5;i++)
{}
ADE_CS=1;
_nop_();
return ade_data;
}
/*=====================================
ade7758寄存器数据写入
参数一 目标寄存器地址
参数二 目标寄存器宽度
参数三 要写入的数据
=====================================*/
void Write_Ade7758(unsigned char byte,unsigned char num,unsigned char wdata)
{
unsigned char i;
ADE_CS=0;
ADE_SCLK=0;
byte|=0x80;
for (i=0;i<5;i++) ;
for (i=0;i<8;i++)
{
_nop_();
ADE_SCLK=1;
_nop_();
if (byte&0x80)
ADE_DIN=1;
else
ADE_DIN=0;
_nop_();
_nop_();
ADE_SCLK=0;
byte<<=1;
_nop_();
}
for (i=0;i<5;i++)
{} //延时
for (i=0;i<num;i++)
{
_nop_();
ADE_SCLK=1;
_nop_();
if (wdata&0x80) //八位数据的高位获取
ADE_DIN=1;
else
ADE_DIN=0;
_nop_();
_nop_();
ADE_SCLK=0;
wdata<<=1;
_nop_();
_nop_();
_nop_();
_nop_();
}
for (i=0;i<5;i++)
{}
ADE_CS=1;
_nop_();
return;
} |