功率测量芯片CS5460A的读写程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

unsigned char Read_Cs5460_Byte();
void Write_Cs5460_Byte(unsigned char temp)
{
unsigned char i;
Cs5460_clk=0;
for (i=0;i<8;i++)
//循环8次 写入数据
{
Cs5460_clk=0;
Cs5460_sdi=(temp&0x80)>>7; //每次传输高字节
temp<<=1;
//左移一位
Cs5460_clk=1;
}
Cs5460_clk=0;
}
void Write_Cs5460(unsigned char *buff,unsigned char n)
{
unsigned char i;
Cs5460_cs=1;
_delay(10);
Cs5460_clk=0;
buff[0]=0x4A;
buff[1]=0x00;
buff[2]=0x01;
buff[3]=0x90;
//每秒计算10次,N=400
Write_Cs5460(buff,4);//写CYCLE COUNT寄存器
buff[0]=0x44; buff[1]=0x40;//增益1 buff[2]=0x00; buff[3]=0x00; Write_Cs5460(buff,4);//写电流增益寄存器
_delay(10);
Cs5460_cs=0;
_delay(10);
for(i=0;i<n;i++)
{Write_Cs5460_Byte(*(buff+i));}
Cs5460_clk=0;
Cs5460_sdi=0;
Cs5460_cs=1;
}
unsigned char Read_Cs5460_Byte()
buff[0]=0x78; buff[1]=0x00; buff[2]=0x00; buff[3]=0x00; Write_Cs5460(buff,4);//写控制寄存器
buff[0]=0x4c; buff[1]=0x00; buff[2]=0x34; buff[3]=0x9c; Write_Cs5460(buff,4);//写EOUT脉冲输出寄存器ຫໍສະໝຸດ Cs5460_sdi=0;
Cs5460_cs=1;
}
void Init_Cs5460() { unsigned char buff[4]; Cs5460_RET=0;//复位 _delay(30000);//30ms Cs5460_RET=1; buff[0]=0xff;//SYNC1 buff[1]=0xff;//SYNC1 buff[2]=0xff;//SYNC1 buff[3]=0xfe;//SYNC0 Write_Cs5460(buff,4);//写同步
第3页
CS5460.c buff[0]=0x48; buff[1]=0x40;//增益1 buff[2]=0x00; buff[3]=0x00; Write_Cs5460(buff,4);//写电压增益寄存器 Read_Cs5460(0x1e,buff);//读状态寄存器 buff[3]=buff[2]; buff[2]=buff[1]; buff[1]=buff[0]; buff[0]=0x5e; Write_Cs5460(buff,4);//写状态寄存器 buff[0]=0xe8; Write_Cs5460(buff,1);//启动Cs5460,执行连续周期计算 } void main() { Init_Cs5460(); while(1) {
_delay(10);
Cs5460_cs=0;
_delay(10);
Write_Cs5460_Byte(address);
Cs5460_sdi=1;
for(i=0;i<3;i++)
{*(buff+i)=Read_Cs5460_Byte();}
//
tmp[k]=*(buff+1);
Cs5460_clk=0;
第4页
CS5460.c
#include "system.h"
unsigned char buff[4],Irms,Vrms;//功率暂存器
void Write_Cs5460_Byte(unsigned char temp);
void Write_Cs5460(unsigned char *buff,unsigned char n);
}
return(tmp);
}
void Read_Cs5460( unsigned char address,unsigned char *buff
)
{
unsigned char i;
//
static unsigned char tmp[4],k=0;
Cs5460_cs=1;
_delay(10);
Cs5460_clk=0;
buff[0]=0x40;//写配置寄存器 第2页
CS5460.c buff[1]=0x01;//GI=1 电流通道增益=10 buff[2]=0x18;//中断形式:00-高电平 08-低电平 10-下降沿 18上升沿 buff[3]=0x01;//DCLK=MCLK/1 Write_Cs5460(buff,4);
//Read_Cs5460(0x12,buff);//读取上次功率值 //Read_Cs5460(0x14,buff);//读取上次能量值 //Read_Cs5460(0x0e,buff);//读取上次电流值 //Read_Cs5460(0x10,buff);//读取上次电压值 Read_Cs5460(0x18,buff);//读取上次电压有效值 Vrms=buff[0]; Read_Cs5460(0x16,buff);//读取上次电流有效值 Irms=buff[0]; } }
buff[0]=0x5e; buff[1]=0xff; buff[2]=0xff; buff[3]=0xff; Write_Cs5460(buff,4);//清状态寄存器
buff[0]=0x74; buff[1]=0xff; buff[2]=0xff; buff[3]=0xff; Write_Cs5460(buff,4);//写屏蔽中断寄存器
{
unsigned char i,tmp=0;
for (i=0;i<8;i++)
//循环8次 写入数据
{
Cs5460_clk=0;
_delay(2);
第1页
CS5460.c
Cs5460_clk=1;
if(Cs5460_sdo) tmp|=0x80>>i;
//每次传输
高字节
// if(Cs5460_sdo) tmp|=0x01;tmp<<1;
相关文档
最新文档