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

📄 adsample.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 5 页
字号:
						break;				
					}				
				}
			}			
		}
	//-------------------------------minimum value------------------------------
		if(s<=AD.uiMinValue3[29])
		{	  
		if(AD.uchCurMinCount<15)
		{
			AD.uchCurMinCount++;
			k=29;
		}
		else
		{
			k=0;
			for(i=29;i>=14;i--)
			{
				if((AD.uiMinGroup3[i]==uiCurGroupIndex)&&(s<AD.uiMinValue3[i]))
				{
					k=i;
					break;
				}				
			}			
		}	  
		if(k!=0)
		{		 		
			AD.uiMinValue3[k] = s;
			AD.uiMinGroup3[k] = uiCurGroupIndex;
			for(i=k-1;i>=0;i--)
			{
				if(s<=AD.uiMinValue3[i])
				{			   					
					AD.uiMinValue3[i+1] = AD.uiMinValue3[i];
					AD.uiMinGroup3[i+1] = AD.uiMinGroup3[i];
					AD.uiMinValue3[i] = s;
					AD.uiMinGroup3[i] = uiCurGroupIndex;					
				}				
		   }	
		}						
	 } 
  	}
		//------------------------Group Replacement------------------- 
	AD.uchCurMinCount=0;	   
	AD.uchCurMaxCount=0;
	AD.uiCurPKPKValue[3]=((AD.uiMaxValue3[14]+AD.uiMinValue3[14])*3/2+AD.uiLastPKPKValue[3])>>2;
	AD.uiLastPKPKValue[3]=AD.uiCurPKPKValue[3];														   	 		  

				
	i=0;
	for(j=0;j<30;j++)
	{
		if((AD.uiMaxGroup3[j]!=uiPassedGroupIndex)&&(AD.uiMaxGroup3[j] < uiGroupNum))
		{
			AD.uiMaxGroup3[i]=AD.uiMaxGroup3[j];
			AD.uiMaxValue3[i]=AD.uiMaxValue3[j];
			i++;						
		}					
	}

	while(i<30)
	{
		AD.uiMaxValue3[i] = 1;	 
		i++;				
	}
	i=0;
	for(j=0;j<30;j++)
	{
		if((AD.uiMinGroup3[j]!=uiPassedGroupIndex)&&(AD.uiMinGroup3[j] < uiGroupNum))
		{
			AD.uiMinGroup3[i]=AD.uiMinGroup3[j];
			AD.uiMinValue3[i]=AD.uiMinValue3[j];
			i++;						
		}					
	}
	while(i<30)
	{
		AD.uiMinValue3[i] = 4095;  
		i++;				
   	} 
	FeedDog();	     	 
}

//--------------------------------------------------------
//函数名称:float CaculateIntegralScale(unsigned char uchChannel)
//功    能:计算积分通道的满量程占AD的范围
//输入参数:通道号
//返    回:积分通道的满量程占AD的范围
//完成日期:9/26/2007
//作    者:佟文杰			
//----------------------------------------------------------
float CaculateIntegralScale(unsigned char uchChannel)
{
	xdata float fRealACScale;

	switch(AD.uchChType[uchChannel - 1])
	{
		case 14:	//加速度输入    速度输出
			fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1])/19.51;   //要加系数,不加系数计算的数据不正确
			fRealACScale = fRealACScale * (AD.uiACADSpan[uchChannel - 1] - AD.uiACADZero[uchChannel - 1]);									//19.5098     确切数据
			fRealACScale = fRealACScale / 2500;	
			fRealACScale = fRealACScale / 100;   
			break;

		case 17:   //速度输入      位移输出
			fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1])/1.99;   //要加系数,不加系数计算的数据不正确
			fRealACScale = fRealACScale * (AD.uiACADSpan[uchChannel - 1] - AD.uiACADZero[uchChannel - 1]);								  //1.98944       确切数据
			fRealACScale = fRealACScale / 2500;	
			fRealACScale = fRealACScale / 1000;	
			break;	
	}

	return fRealACScale;
}

//--------------------------------------------------------
//函数名称:float CaculateNotIntegralScale(unsigned char uchChannel)
//功    能:计算不是积分通道的满量程占AD的范围
//输入参数:通道号
//返    回:非积分通道的满量程占AD的范围
//完成日期:9/26/2007
//作    者:佟文杰			
//----------------------------------------------------------
float CaculateNotIntegralScale(unsigned char uchChannel)
{
	xdata float fRealACScale;
	
	fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1]);
	fRealACScale = fRealACScale * (AD.uiDCADSpan[uchChannel - 1] - AD.uiDCADZero[uchChannel - 1]);	           //满量程值对应AD值
	switch(AD.uchChType[uchChannel - 1])
	{
		case 13:     //加速度输入    加速度输出
			fRealACScale = fRealACScale / 100;
			break;
		case 16:    //速度输入     速度输出     灵敏度乘以了1000
			fRealACScale = fRealACScale / 100;		  
			fRealACScale = fRealACScale / 1000;
			break;
		case 18:	//位移输入     位移输出
	   		fRealACScale = fRealACScale / 1000;	
			break;
	}
			 
	fRealACScale = fRealACScale / 2000;			
	return fRealACScale;
}

//--------------------------------------------------------
//函数名称:float CaculateNotIntegralLittleRangeScale(unsigned char uchChannel)
//功    能:计算不是积分通道的小量程满量程占AD的范围
//输入参数:通道号
//返    回:非积分通道的小量程满量程占AD的范围
//完成日期:9/26/2007
//作    者:佟文杰			
//----------------------------------------------------------
float CaculateNotIntegralLittleRangeScale(unsigned char uchChannel)
{
	xdata float fRealACScale;
	
	fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1]);
	fRealACScale = fRealACScale * (AD.uiLittleRangeADSpan[uchChannel - 1] - AD.uiLittleRangeADZero[uchChannel - 1]);	           //满量程值对应AD值
	switch(AD.uchChType[uchChannel - 1])
	{
		case 13:     //加速度输入    加速度输出
			fRealACScale = fRealACScale / 100;
			break;
		case 16:    //速度输入     速度输出     灵敏度乘以了1000
			fRealACScale = fRealACScale / 100;		  
			fRealACScale = fRealACScale / 1000;
			break;
		case 18:	//位移输入     位移输出
	   		fRealACScale = fRealACScale / 1000;	
			break;
	}
			 
	fRealACScale = fRealACScale / 400;			

	return fRealACScale;
}

//--------------HHH---------------------------------------
//函数名称:float CaculateLVDTScale(unsigned char uchChannel)
//功    能:计算LVDT通道的满量程占AD的范围
//输入参数:通道号
//返    回:LVDT通道的满量程占AD的范围
//完成日期:1/24/2008
//作    者:马爱虹			
//----------------------------------------------------------
float CaculateLVDTScale(unsigned char uchChannel)
{
	xdata float fRealACScale;
	unsigned int uiLVDTzero; 

	uiLVDTzero = (AD.uiGAPADFull[uchChannel - 1] - AD.uiGAPADZero[uchChannel - 1])/15; 
	if(AD.uiGAPADZero[uchChannel - 1]>uiLVDTzero) 
	{
		uiLVDTzero=AD.uiGAPADZero[uchChannel - 1]-uiLVDTzero; 
		AD.uiGAPADLVDTZero[uchChannel - 1]=uiLVDTzero;
	}
	else				//否则取0V的AD值为0
	{
		uiLVDTzero=0;
		AD.uiGAPADLVDTZero[uchChannel - 1]=uiLVDTzero;
	}
 								
	fRealACScale = (float)AD.uiSenSensitive[uchChannel - 1] * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[0]);		  //f*full=10V
	fRealACScale = fRealACScale * (AD.uiGAPADFull[uchChannel - 1] - uiLVDTzero);

	switch(AD.uchChType[uchChannel - 1])
	{
		case 22:   
		case 28:
			fRealACScale = fRealACScale / 100; 
			break;
		default:
			break;
	}		  

	fRealACScale = fRealACScale / 16000;

	return fRealACScale; 
}

//---------------------------HHH-----------------------------
//函数名称:long CalculateLVDTZeroPosition(unsigned char uchChannel,int iLVDTZeroPosition)
//功    能:计算LVDT零点标志	  
//输入参数:通道号,LVDT零点电压		 AD.iZeroPosition[uchChannel - 1]
//返    回:无
//完成日期:1/24/2008
//作    者:马爱虹			
//----------------------------------------------------------

long CalculateLVDTZeroPosition(unsigned char uchChannel)
{
	xdata long lTempData;

	
	lTempData = (long)AD.iZeroPosition[uchChannel - 1] * ((long)AD.uiGAPADFull[uchChannel - 1] - (long)AD.uiGAPADLVDTZero[uchChannel - 1]);
	lTempData = lTempData / 16000;
	lTempData = lTempData + (long)AD.uiGAPADLVDTZero[uchChannel - 1];
		
	return lTempData;    
}


//--------------------------------------------------------
//函数名称:void CalculateIntegralChannelValue(unsigned char uchChannel,float fIntegralData)
//功    能:计算积分通道的数据
//输入参数:通道号,积分通道的数据
//返    回:无
//完成日期:9/26/2007
//作    者:佟文杰			
//----------------------------------------------------------
void CalculateIntegralChannelValue(unsigned char uchChannel,float fIntegralData)
{   
	xdata float fTempData;	   
	xdata long  lTempData;
	  
	if (AD.uchtMeasureType[uchChannel - 1] == 3)	 //有效值
	{
		if (fIntegralData > 5)  ///AD.fRMSIntegrateZeroValue[uchChannel - 1]) 
		{
			if (fIntegralData < 10)
			{
				fTempData = (fIntegralData - 5) / AD.fRealIntegralScaleData[uchChannel - 1]; 	//20080730
			}
			else
			{
				fTempData = fIntegralData / AD.fRealIntegralScaleData[uchChannel - 1]; 	//20080730
			}
			
		}
		else
		{
			fTempData = 0;
		}		
		   
/*		if (fIntegralData > 3) 
		{
			fTempData = (fIntegralData - 1) / AD.fRealIntegralScaleData[uchChannel - 1];	   //20080714  新添加减1操作,降低有效值的上限
		}
		else 
		{
			fTempData = 0;
		}*/		
	}
	else
	{
		if(fIntegralData > AD.uiACADZero[uchChannel - 1])		
		{
			if (fIntegralData > 30)
			{
				fTempData = fIntegralData - AD.uiACADZero[uchChannel - 1];
				fTempData += 2;
			}
			else
			{
				fTempData = fIntegralData - AD.uiACADZero[uchChannel - 1];
			}
			 
			fTempData = fTempData / AD.fRealIntegralScaleData[uchChannel - 1];
		}
		else
		{
			fTempData = 0;
		}	
	} 

	if (fTempData > 6.5)		//计算上传的比例值不能超过量程的6.5倍
	{
		fTempData = 6.5;
	}
	
	lTempData = fTempData * (AD.iScaleHigh[uchChannel - 1]-AD.iScaleLow[uchChannel - 1]) + AD.iScaleLow[uchChannel - 1]; //实际测量值 
	if (lTempData > 32700)
	{
		lTempData = 32700;
	}  
	
/*	if (AD.uchChType[0] == 14)  	//a-v类型 判断			  20080910
	{
		if (lTempData <= 100)   //小于1mm/s,做5次平均计算
		{
			fPercentValueBAK[uchChannel -1][uchPercentCountNumber] = fTempData;
			uchPercentCountNumber = (uchPercentCountNumber++) & 0x03;
			fTempData = (fTempData + fPercentValueBAK[uchChannel -1][0] + fPercentValueBAK[uchChannel -1][1] + fPercentValueBAK[uchChannel -1][2] + fPercentValueBAK[uchChannel -1][3]) / 5;
		}
		else
		{
			;
		}  
	}	*/
/*	else if ((AD.uchChType[uchChannel - 1] == 14) || (AD.uchChType[uchChannel - 1] == 16))
	{
		if (lTempData <= 100)			 //小于1mm/s ,做平均计算
		{
		
		}
		else
		{
			;
		}
	}
	else
	{
		;
	}	  */
											   
	AD.iActualValue[uchChannel - 1][1] = fTempData*5000; 
	
	
	AD.iActualValue[uchChannel - 1][0] = lTempData;
}

//--------------------------------------------------------
//函数名称:void JudgeChannelScale(unsigned char uchChannel)
//功    能:计算大小量程
//输入参数:通道号
//返    回:无
//完成日期:9/26/2007
//作    者:佟文杰			
//----------------------------------------------------------
void JudgeChannelScale(unsigned char uchChannel)
{
	if (((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 10000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 3)) 
	   || ((AD.iScaleHigh[uchChannel - 1] > 250) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 500) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 200) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 3))
		|| ((AD.iScaleHigh[uchChannel - 1] > 120) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 60) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 50) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 3)))  
	{
		uchChannelScaleStatus[uchChannel - 1] = 1;
	}
	else
	{
		uchChannelScaleStatus[uchChannel - 1] = 0;
	}
}

//--------------------------------------------------------
//函数名称:void CalculateNotIntegralChannelValue(unsigned char uchChannel,float fNotIntegralData)
//功    能:计算非积分通道的数据
//输入参数:通道号 , 非积分通道的数据
//返    回:无
//完成日期:9/26/2007
//作    者:佟文杰			
//----------------------------------------------------------
void CalculateNotIntegralChannelValue(unsigned char uchChannel,float fNotIntegralData)
{   
	xdata float fTempData;
	xdata long  lTempData;	
	
//	xdata float fTempNumber;   
	  
/*	if (((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 10000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 5000) && (AD.uchChType[uchChannel - 1] == 16) && (AD.uchtMeasureType[uchChannel - 1] == 3)) 
	   || ((AD.iScaleHigh[uchChannel - 1] > 250) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 500) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 200) && (AD.uchChType[uchChannel - 1] == 13) && (AD.uchtMeasureType[uchChannel - 1] == 3))
		|| ((AD.iScaleHigh[uchChannel - 1] > 120) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 1)) || ((AD.iScaleHigh[uchChannel - 1] > 60) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 2)) || ((AD.iScaleHigh[uchChannel - 1] > 50) && (AD.uchChType[uchChannel - 1] == 18) && (AD.uchtMeasureType[uchChannel - 1] == 3)))  
*/
	if (uchChannelScaleStatus[uchChannel - 1] == 1)
	{
		if (AD.uchtMeasureType[uchChannel - 1] == 3)
		{
/*			if (fNotIntegralData > 2)
			{
				fTempData = fNotIntegralData / AD.fRealNotIntegralScaleData[uchChannel - 1];
			}
			else 
			{
				fTempData = 0; 
			}	*/
			if (fNotIntegralData > AD.fRMSNotIntegrateLargeRangeValue[uchChannel - 1])			//20080730
			{
				fTempData = (fNotIntegralData - AD.fRMSNotIntegrateLargeRangeValue[uchChannel - 1]) / AD.fRealNotIntegralScaleData[uchChannel - 1];	
			}
			else
			{
				fTempData = 0;	
			}
		}
		else
		{
			if (fNotIntegralData > (float)AD.uiDCADZero[uchChannel - 1])		
			{
				fTempData = fNotIntegralData - AD.uiDCADZero[uchChannel - 1]; 
				fTempData = fTempData / AD.fRealNotIntegralScaleData[uchChannel - 1];
			} 

⌨️ 快捷键说明

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