| 
 
| 使用单片机普通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;
 }
 | 
 |