您好,欢迎访问三七文档
我终于领悟为什么要校正了————校正的意思就是让我们得到的3字节的16进制数据在满量程的0.6附近,不要太大或太小,会有较大误差!#includereg52.h#defineucharunsignedchar#defineuintunsignedintucharflag,a;ucharx;uchary;ucharz;ucharcodeTAB[]=VoltageCurrentPower;sbitSDO=P0^1;sbitINT=P0^0;sbitSCLK=P0^5;sbitSDI=P0^3;sbitCS=P0^4;sbitRESET=P0^2;voiddelay(uchark){uchari,j;for(i=0;ik;i++)for(j=0;j100;j++);}voidinit_5463(){ucharn;RESET=1;delay(5);RESET=0;delay(5);RESET=1;SDI=0;SCLK=0;CS=0;delay(5);SDI=1;for(n=0;n32;n++){SCLK=1;delay(2);SCLK=0;delay(2);}SDI=0;delay(2);SCLK=1;delay(2);SCLK=0;}voidwrite_5463(ucharcom,uchardat1,uchardat2,uchardat3){ucharo,p,q,r;SCLK=0;for(o=0;o8;o++){SDI=(bit)(com&0x80);SCLK=0;delay(2);SCLK=1;delay(2);com=1;}for(p=0;p8;p++){SDI=(bit)(dat1&0x80);SCLK=0;delay(2);SCLK=1;delay(2);dat1=1;}for(q=0;q8;q++){SDI=(bit)(dat2&0x80);SCLK=0;delay(2);SCLK=1;delay(2);dat2=1;}for(r=0;r8;r++){SDI=(bit)(dat3&0x80);SCLK=0;delay(2);SCLK=1;delay(2);dat3=1;}}ucharread_5463(ucharcom1,ucharx,uchary,ucharz){uchars,t,u,v,f=0xfe,g=0xfe,h=0xfe;SCLK=0;for(s=0;s8;s++){SDI=(bit)(com1&0x80);SCLK=0;delay(2);SCLK=1;delay(2);com1=1;}for(t=0;t8;t++){SDI=(bit)(f&0x80);SCLK=0;delay(2);SCLK=1;delay(2);f=1;x=1;x|=(unsignedchar)SDO;}return(x);for(u=0;u8;u++){SDI=(bit)(g&0x80);SCLK=0;delay(2);SCLK=1;delay(2);g=1;y=1;y|=(unsignedchar)SDO;}return(y);for(v=0;v8;v++){SDI=(bit)(h&0x80);SCLK=0;delay(2);SCLK=1;delay(2);h=1;z=1;z|=(unsignedchar)SDO;}return(z);}voidcom_init(){TMOD=0x20;TH1=0xfd;TL1=0xfd;SM0=0;SM1=1;TR1=1;REN=1;EA=1;ES=1;}voidsend(ucharm,ucharb){ucharl;if(flag==1){ES=0;flag=0;for(l=0;lm;l++){SBUF=TAB[l];while(!TI);TI=0;}SBUF=b;while(!TI);TI=0;SBUF=a;while(!TI);TI=0;ES=1;}}voidmain(){while(1){com_init();init_5463();write_5463(0x5e,0x80,0x00,0x00);write_5463(0x40,0x00,0x00,0x01);write_5463(0x4a,0x00,0x0f,0xa0);write_5463(0x74,0x00,0x00,0x00);write_5463(0x64,0x80,0x00,0x01);read_5463(0xe8,x,y,z);read_5463(0x10,x,y,z);send(22,z);send(22,y);send(22,z);}}voidsrei()interrupt4{RI=0;P1=SBUF;a=SBUF;flag=1;}【1楼】pengtao积分:11派别:等级:------来自:CS5463电路图(原文件名:CS5463电路图.gif)2011-04-02,12:32:17资料邮件回复引用回复↑↑↓↓编辑删除广告投诉、提议置酷等【2楼】xl07CS5463是一个测量电压电流的芯片交流1310积分:7派别:等级:------来自:2011-04-02,12:40:00资料邮件回复引用回复↑↑↓↓编辑删除广告投诉、提议置酷等【3楼】heaven1983chenli积分:79派别:等级:------来自:请问电能如何计量??你的程序只完成了初步的读写,电力参数的读写,电能计量以及芯片的标定,这些还是比较复杂,需要花很多的时间去做2011-04-02,12:49:02资料邮件回复引用回复↑↑↓↓编辑删除广告投诉、提议置酷等【4楼】pengtao积分:11派别:等级:------来自:对的,还很初步,希望一起探讨,共同进步。2011-04-02,12:52:12资料邮件回复引用回复↑↑↓↓编辑删除广告投诉、提议置酷等【5楼】pengtao积分:11派别:等级:------来自:#includereg51.h#includeI2C.h#includestdio.h//#includec8051f040.h#includeintrins.h#includemath.h#includestruct.h#definezhilu0ucharcodeTAB0[]=Voltage:;ucharcodeTAB1[]=Current:;ucharcodeTAB2[]=Power:;/*sbitSDI0_5460=P0^2;//040输出,5460A输入sbitSCK0_5460=P0^1;//支路号0sbitSDO0_5460=P0^0;//040输入,5460A输出*/sbitSDI0_5460=P0^3;sbitSDO0_5460=P0^1;sbitSCK0_5460=P0^5;sbitCS_5460=P0^4;/***************************************全局变量定义**************************************/unsignedcharrec_data[3]={0};unsignedcharsend_data[3]={0};unsignedcharVOLT_AC_OFF_CONFIG[4];unsignedcharVOLT_RMS[4],I_RMS[4],I_RMS_OFFSET[4];unsignedcharU_RMS_GAIN[4],I_RMS_OFFSET_1[4];unsignedintflag1,time;//标志位flag,定时时间到标志timeunsignedintcount1;unsignedcharIIC_DATA;//24C16存储数据unsignedcharadd_II_count,add_UU_count,add_PW_count;unsignedintPW_INT[3];unsignedcharUU_COUNT;unsignedcharUU_REC_COUNT;unsignedintUU_RMS_SAVE;unsignedcharUU_MAX;unsignedcharUU_MIN;unsignedinti;unsignedintUU_RMS;unsignedintII_RMS;unsignedcharPEAK;//峰值系数unsignedcharstatus_data[3]={0};unsignedintstatus_high8;//unsignedcharU_real[3],I_real[3],PW_real[3];//unsignedcharzhilu;//支路号floatPW_float;//功率值真实数据(浮点数)floatII_float;//电流值真实数据floatUU_float;//电压值真实数据floatPEAK_float;//峰值系数真实数据unsignedcharbuf;unsignedchartt;bittime2;voidmain(){flag1=0;//定时变量time=0;//定时变量IIC_DATA=0;//存储器变量add_II_count=0;//存储电量的地址add_UU_count=0;add_PW_count=0;count1=0;//发送报文计数UU_COUNT=0;UU_REC_COUNT=0;status_high8=0;//***************初始化接收和发送数组*********************//for(i=0;i3;i++){rec_data[i]=0;send_data[i]=0;}CS_5460=0;cs5460a_init();//0支路初始化//*****************************定时器1***********************************//TMOD=0x21;//工作方式1,8位定时器自动重装载工作方式0,16位定时器TH1=0xFA;//波特率9600bit/sTL1=0xFA;TH0=0x3c;TL0=0xb0;SM0=0;//串口在工作方式1SM1=1;PCON=0x80;//SMOD=1TR0=1;TR1=1;//定时器0允许REN=1;//接收允许ET0=1;//允许定时器0中断EA=1;ES=1;//串口中断允许RI=0;//delay_ms(10);/***初始化完毕后,电流、电压有效值需要空读一次**Wait_DRDY_High(zhilu);cs5460_READ(zhilu,0x16);Clear_DRDY(zhilu);Wait_DRDY_High(zhilu);cs5460_READ(zhilu,0x18);Clear_DRDY(zhilu);*///jiaozhun();//CS5460A校准函数while(1){if(time2==1){time2=0;//Wait_DRDY_High();//等待电压转换完成//cs5460_READ(0x18);//上一周期电压有效值//00011000地址12//inode[zhilu].UU[0]=rec_data[0];//_delay_us(10);ES=0;SBUF=P0;while(!TI);TI=0;_delay_us(10);SBUF=inode[zhilu].UU[0];//SBUF=0x10;while(!TI);TI=0;_delay_us(10);SBUF=inode[zhilu].UU[1];//SBUF=0x10;while(!TI);TI=0;_delay_us(10);SBUF=inode[zhilu].UU[2];//SBUF=0x10;while(!TI);TI=0;_delay_us(10);_delay_us(100);SBUF=inode[zhilu].II[0];while(!TI);TI=0;_delay_us(10);SBUF=inode[zhilu].II[1];while(!TI);TI=0;_d
本文标题:cs5463程序
链接地址:https://www.777doc.com/doc-4576299 .html