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

📄 getleak.c

📁 我用ARM写的一些东西
💻 C
字号:
#include "config.h"
/********************************************************************/
//					获取漏率子函数	
/********************************************************************/	
#define  SamNum 120

uint32 PaiXuTmp;


void PaiXu(void)
{
	uint8 i,j;
	for (i=0;i<SamNum;i++)
	{
		for(j=0;j<(SamNum-i-1);j++)
		{
			if (LkValueDyn[j]>LkValueDyn[j+1])
			{
				PaiXuTmp=LkValueDyn[j+1];
				LkValueDyn[j+1]=LkValueDyn[j];
				LkValueDyn[j]=PaiXuTmp;
			}
		}
	}
}

void GetLeak()
{
	uint32 i;
	uint8  Exp;
	
	float TmpLeakBase;

	/*DisTm0;
	DisTm1;
	DisUart0;
	DisUart1;
	DisI2C0;*/
	
	//Hc595Dat=Hc595Dat&0xbf;
	//MSPI_SendData(Hc595Dat);
	
	//ad_ch_scal(0,0);
	//j=0;
	//if ((IO0PIN &  AD_READY)==0)
	{
		//if (AmpDly1==0)
		
		{
			Cs7705(0);
			LeakValueRd1=ad_result();
			Cs7705(1);
			//LeakValueRd=LeakValueRd>>2;
		}	
		//LeakValueRd=LeakValueRd1;
		//ad_ch_scal(0,0);
	}
	
	if(FPGAEn==1)
	{
		LeakValueRd=LeakValueRd1;
	}
	else
	{
		LeakValueRd=LeakValueRd1*128;
	}
	
	
	
	if ((StartLkDec!=0)||(SysStd==StandBy))
	{
		switch(StartLkDec)
		{
			case 1:
				if ((AmpDly1==0)&&(VDly3==0)) //LEAKVALUERD2 FLOAT
				switch(AmpRate)
				{
					case 1:
						if (SysStd==StandBy)
							LeakValueRd2=(LeakValueRd)/4000*33*33*33*2940;
						else
							LeakValueRd2=(LeakValueRd)*33*33*33*2940;
					break;
					case 2:
						if (SysStd==StandBy)
							LeakValueRd2=(LeakValueRd)/4000*33*33*2940;
						else
							LeakValueRd2=(LeakValueRd)*33*33*2940;	
					break;
					case 3:
						if (SysStd==StandBy)
							LeakValueRd2=(LeakValueRd)/4000*33*2940;
						else
							LeakValueRd2=(LeakValueRd)*33*2940;	
					break;
					case 4:
						if (SysStd==StandBy)
							LeakValueRd2=(LeakValueRd)/4000*2940;
						else
							LeakValueRd2=(LeakValueRd)*2940;	
					break;			
					default:
					break;												
				}
				if ((LeakValueRd/128)>50000)
				{	
					if (AmpDly1==0)
					{	
						if((AmpRate>1)&&(AmpSelect==0))
						{
							AmpRate=AmpRate-1;
							AmpChgDly&=0xfe;
							//DelayNS(200);
						}	
						else
							;//信号上限益出
					}		
				}
				
				else if ((LeakValueRd/128)<1000)
				{
					if( (AmpDly1==0))
					{
						if ((AmpRate<4)&&(AmpSelect==0))
						{
							AmpRate=AmpRate+1;
							AmpChgDly&=0xfe;
							//DelayNS(200);
						}	
						else
						{
							if ((DecPort>2)||(DecPort==0))
								OverPort=2;//信号逸出	
						}	
					}	
				}

				if ((AmpChgDly&0x01)==0)
				{
					AmpChgDly|=0x01;
					AmpDly1=60;
				}
				//if (AmpDly1==0)
					SetAmp(AmpRate);					
			break;
			case 2:
				if ((AmpDly1==0)&&(VDly5==0))
				switch(AmpRate)
				{
					case 1:
						LeakValueRd2=LeakValueRd*33*33*33*50;
					break;
					case 2:
						LeakValueRd2=LeakValueRd*33*33*50;
					break;
					case 3:
						LeakValueRd2=LeakValueRd*33*50;
					break;
					case 4:
						LeakValueRd2=LeakValueRd*50;
					break;	
					default:
					break;														
				}			
				if ((LeakValueRd/128)>50000)
				{	
					if (AmpDly1==0)
					{
						if((AmpRate>1)&&(AmpSelect==0))
						{
							AmpRate=AmpRate-1;
							AmpChgDly&=0xFe;
							//DelayNS(200);
						}	
						else
						{
							OverPort=1;//信号上限益出
							Overed=1;
						}	
					}	
				}
				
				else if ((LeakValueRd/128)<1000)//else if ((LeakValueRd/128)<1000)
				{
					if (AmpDly1==0)
					{					
						if ((AmpRate<4)&&(AmpSelect==0))
						{
							AmpRate=AmpRate+1;
							AmpChgDly&=0xfe;
							//DelayNS(200);
						}	
							
						else
						{
							if ((DecPort>2)||(DecPort==0))
								OverPort=3;//信号逸出	
						}		
					}	
				}
				
				if ((AmpChgDly&0x01)==0)
				{
					AmpChgDly|=0x01;
					AmpDly1=60;
				}
				//if (AmpDly1==0)
					SetAmp(AmpRate);
				
			break;
			case 3:
			
				if ((AmpDly1==0)&&(VDly6==0))
				switch(AmpRate)
				{
					case 1:
						LeakValueRd2=LeakValueRd*33*33*33;
					break;
					case 2:
						LeakValueRd2=LeakValueRd*33*33;
					break;
					case 3:
						LeakValueRd2=LeakValueRd*33;
					break;
					case 4:
						LeakValueRd2=LeakValueRd;
					break;
					default:
					
					break;															
				}			
				if ((LeakValueRd/128)>50000)
				{	
					if (AmpDly1==0)
					{
						if((AmpRate>1)&&(AmpSelect==0))
						{
							AmpRate=AmpRate-1;
							AmpChgDly&=0xfe;
							//DelayNS(200);
						}	
						else
						{
							OverPort=2;//信号上限益出
							Overed=1;
						}
					}	
				}
				
				else if ((LeakValueRd/128)<1000)
				{
					if (AmpDly1==0)
					{				
						if ((AmpRate<4)&&(AmpSelect==0))
						{
							AmpRate=AmpRate+1;
							AmpChgDly&=0xfe;
							//DelayNS(200);
						}	
						else
						{
							SetAmp(4);//inficon on  our's off
							
							OverPort=3;//信号逸出	
						}	
					}	
				}				
				
				if ((AmpChgDly&0x01)==0)
				{
					AmpChgDly|=0x01;
					AmpDly1=60;
				}
				//if (AmpDly1==0)
					SetAmp(AmpRate);
				
			break;
			default:
			break;
															
		}
		


	if(FltMod==FltDyn)
		{
			if (AmpDly1!=0)						//IF VAR IS CHANGING THEN IF VALUE GRATE THAN 
			{
					
				if (LeakValueRd/128>10000)		//1000 THEN DO NOT SAMPLE THEN VALUE
				{
					;
				}
				else
				{
					
					for(i=0;i<(SamNum-1);i++) //old i=20
					{
						LkValueDyn1[i]=LkValueDyn1[i+1];
					}	
					LkValueDyn1[SamNum-1]=LeakValueRd2;					
				}
			
			}
			else
			{		
								
				for(i=0;i<(SamNum-1);i++) //old i=20
				{
					LkValueDyn1[i]=LkValueDyn1[i+1];
				}	
				LkValueDyn1[SamNum-1]=LeakValueRd2;
			}
			
			for(i=0;i<SamNum;i++)
			{
				LkValueDyn[i]=LkValueDyn1[i];
			}	
			
		}
		else //如果是静态滤波
		
		{
			LeakValueTmp+=LeakValueRd2;
		}



		if(FltMod==FltStc)
		{
			if (Cnt>5)
			{
				Cnt=0;
				if (AmpDly1==0)
				{
					//if(FPGAEn==1)
					LeakValue=LeakValueTmp/6/128;
					//else
					//LkValue=LeakValueTmp/6;
					//LeakValue=LeakValueTmp/6;
					LeakValueTmp=0;
	               // ZeroLeakValueTp=LeakValue;
	               ZeroLeakValueTp=LeakValue;
	            }  
			}	
		}	
		else
			
		{
			if (Cnt>3)
			{
				Cnt=0;                                                                                                                                                                               
                                                                      				
                                                                      				
                PaiXu(); 
				for(i=10;i<(SamNum-10);i++)
				{
					LeakValueTmp+=LkValueDyn[i];
				}
				
				//if (AmpDly1==0)	//070302 OLD IF VAR IS CHANGING THEN DO NOT CALCULATE THE LEAK
				{
					//if(FPGAEn==1)
					LeakValue=LeakValueTmp/(SamNum-20.0)/128.0;
					//else
					//LkValue=LeakValueTmp/10.0;
					LeakValueTmp=0;
	           		// ZeroLeakValueTp=LeakValue;
	           		ZeroLeakValueTp=LeakValue;
	           		//LeakValue=LeakValueTmp/20;
	           }
			}	
		}			
	

	
		//ZeroLeakValueTp=LeakValue;
		
		
		
		if (Zeroing==0xff)
		{
			
			if (ZeroLeakValue>ZeroLeakValueTp)
			{
				//LeakValue=(ZeroLeakValue)-(ZeroLeakValue)+0.1;
				LeakValue=LkValueDown;
			}
			else 
			{
					LeakValue=ZeroLeakValueTp-ZeroLeakValue+0.1;
					LkValueDown=LeakValue;
			}
			if (ZeroLeakValue>=ZeroLeakValueTp)
			{
				ZeroLeakValue=ZeroLeakValueTp;
			}
			
		}
		else
		{
			ZeroLeakValue=0xfffff*65535*128;
		}
		
		LeakBase=(float)((float)(CalBase)*(LeakValue)/(float)(RemCal)*(float)(MacFact/10.0));
			
		TmpLeakBase=LeakBase;
		
		Exp=0;
		if 	((LeakBase<10.0)&&(LeakBase!=0))
		{
			while(TmpLeakBase<10.0)
			{
				TmpLeakBase*=10;
				Exp++;
			}	
			
			LeakExp=CalExp+Exp;
			LeakBase=TmpLeakBase;
		}
		
		else //if (LeakBase>99)
		{
			while(TmpLeakBase>=100.0)
			{
				TmpLeakBase/=10;
				Exp++;
			}			
			LeakExp=CalExp-Exp;
			LeakBase=(int8)(TmpLeakBase);
		}
		
	}	
	
	
	
	
	//Hc595Dat=Hc595Dat|0x40;
	//MSPI_SendData(Hc595Dat);
	
	
		 LeakDeal();
	/*EnTm0;
	EnTm1;
	EnUart0;
	EnUart1;
	EnI2C0;	*/							

}



⌨️ 快捷键说明

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