⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataprotask.c

📁 cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表
💻 C
字号:
/**********************************************
公司名称:
文 件 名:CS5460A.c
版 本 号:
程序设计:
说    明:
完成日期:
修改日期:
功能摘要:	
***********************************************/
#define  _DealData
#include "includes.h"

uint8	fAdRunning_A;			//AD是否运行良好
uint8	fAdRunning_B;			//AD是否运行良好

uint8	V_sign_A;
uint8   I_sign_A;
uint8	V_sign_B;
uint8   I_sign_B;

uint16   Detect_A1 =0 ;	 //测试时用。A状态寄存器的最高位是1
uint16   Detect_A0 =0;	 //A状态寄存器的最高位是0
uint16   Detect_B1 =0;	 //B状态寄存器的最高位是1
uint16   Detect_B0 =0;	 //B状态寄存器的最高位是0
uint16   Detect_T0 =0;	 //不用加载校验值
uint16   Detect_T1 =0;	 //加载校验值


uint32  Ps;						//三相总功率
uint8   Ps_Neg = 0;                  //功率为负标志
WAIT_TIME_STRUCT	ReadAD = {0,_1S};

void  DealDataMainLoop (void);
void  Date_cs5460(void);

//---------------------------

/*void  DealDataMainLoop (void)
{
   uint8   AD_Buf[4];

 if(ReadAD.fGetTime) 
   {
      ReadAD.fGetTime = 0;
      ReadAD.WaitTime = _1S;
      if (Rest5460A_Time != 0x00) 
	     {
    		Rest5460A_Time--;                 //屏蔽前两次AD转换
    		fAdRunning_A = 1;
    	 } 
	  else 
	    {
			CS_AD_A = 0;			 
		    Rd5460A(AD_Buf,0x1e);			 
		    CS_AD_A = 1;
		    if ((AD_Buf[0] & 0x80) == 0x80) 
			 { 
				  CS_AD_B = 0;			 	
		          Rd5460A(AD_Buf,0x1e);			 
		          CS_AD_B = 1;
		          if ((AD_Buf[0] & 0x80) == 0x80) 
				   {
					   fAdRunning_A = 1;
					   Date_cs5460() ;
				   }
			  }	  
	     }
    }						
} 
//==================================================
void  Date_cs5460(void)
{
   uint16  temp1 = 0;
   uint16  temp2 = 0;
   uint8   AD_Buf[4];
														  
   Sync_5460A();
   Clear5460A();

            
   CS_AD_A = 0;			 
   Rd5460A(AD_Buf,0x14);
   CS_AD_A = 1;
   temp1 = AD_Buf[0] << 8;
   temp1 += AD_Buf[1];
            
   CS_AD_B = 0;			 	
   Rd5460A(AD_Buf,0x14);			 
   CS_AD_B = 1;
   temp2 = AD_Buf[0] << 8;
   temp2 += AD_Buf[1];

//--------------------------------------------
   CS_AD_A = 0;			 
   Rd5460A(AD_Buf,0x10);
   CS_AD_A = 1;
   V_sign_A = AD_Buf[0];
   V_sign_A >>=7;
   CS_AD_A = 0;			 
   Rd5460A(AD_Buf,0x0e);
   CS_AD_A = 1;
   I_sign_A = AD_Buf[0];
   I_sign_A >>=7;

   CS_AD_B = 0;			 
   Rd5460A(AD_Buf,0x10);
   CS_AD_B = 1;
   V_sign_B = AD_Buf[0];
   V_sign_B >>=7;
   CS_AD_B = 0;			 
   Rd5460A(AD_Buf,0x0e);
   CS_AD_B = 1;
   I_sign_B = AD_Buf[0];
   I_sign_B >>=7; 
				  
//--------------------------------------------
							   
   temp1 += temp2;	
   Ps_Neg = 0;
   if (temp1 > 0x8000)
   {
       temp1  = 0 - temp1;	             // 功率为负
       Ps_Neg = 1;
    }
    AD_Buf[0] = temp1 >> 8;
    AD_Buf[1] = (uint8)temp1;
	temp2 = DealRms(AD_Buf,0x6f20);		  
	Ps =(uint32)temp2* PtVal * CtVal;  //计算一次值功率


}  
//=================================================================	*/

void  DealDataMainLoop (void)
{
	uint8   AD_Buf[4];
	uint16	temp1 = 0;
	uint16  temp2 = 0;
	static uint8 Step = 0;
		
	 if (ReadAD.fGetTime) {      
      switch (Step) {
	  	case 0:
		if (Rest5460A_Time == 0x00) 
		 {
		        CS_AD_A = 0;			 
		        Rd5460A(AD_Buf,0x1e);
				CS_AD_A = 1;
			 
                //fAdRunning_A = 0;		  
                if((AD_Buf[0] & 0x80) == 0x80) 
                   { fAdRunning_A = 1;Detect_A1++;}
				else
				    {Detect_A0++;}
		        CS_AD_B = 0;			 	
		        Rd5460A(AD_Buf,0x1e);			 
		        CS_AD_B = 1;

                if ((AD_Buf[0] & 0x80) && fAdRunning_A) 
                   {  Step++;  
				       Detect_B1++;
					}
                else
                  {
					Detect_B0++;
                    fAdRunning_A = 0;
		        	Clear5460A();
			        ReadAD.fGetTime = 0;
      		        ReadAD.WaitTime = _1S;
		             }
		  } else {
		  	Rest5460A_Time--;     //屏蔽前两次AD转换
    	  	fAdRunning_A = 1;
			Clear5460A();
			ReadAD.fGetTime = 0;
      		ReadAD.WaitTime = _1S;	  	
		 }
		 break;

		case 1:
		  Sync_5460A();                 /*同步命令*/
		  Clear5460A();

		  CS_AD_A = 0;			
          Rd5460A(AD_Buf,0x14);       //读A相功率值		
          CS_AD_A = 1;		  
		  temp1 = AD_Buf[0] << 8;
		  temp1 += AD_Buf[1]; 
		  
		  CS_AD_B = 0;			
          Rd5460A(AD_Buf,0x14);       
          CS_AD_B = 1;		  
		  temp2 = AD_Buf[0] << 8;
		  temp2 += AD_Buf[1];

		  temp1 += temp2; 
		  
		  Ps_Neg = 0;
		  if (temp1 > 0x8000){
			 	temp1 = 0 - temp1;	        //功率为负
				Ps_Neg = 1;				
		  }		   		   
		  AD_Buf[0] = temp1 >> 8;
		  AD_Buf[1] = (uint8)temp1;
		  temp2 = DealRms(AD_Buf,0x6F20);		  
		  Ps = (uint32)temp2 * PtVal * CtVal;   //计算一次值功率	
		  Step = 0;
		  ReadAD.fGetTime = 0;
      	  ReadAD.WaitTime = _1S;        	
		break;

		default:
		break;
	  }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -