完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
初始化寄存器,然后读取一个寄存器(已初始化)的值,发现读出的数据在变化,请大神帮我看看程序!万分感谢!!
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); } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 06:53 , Processed in 0.474112 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1186