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

📄 adsample.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 5 页
字号:
//*******************************************************************************
//Copyright (c) 2007,美国派利斯电子(北京)有限公司 硬件部
//文件名称: Hardware.c
//摘    要: 本文件主要包含PT2060程序中采样数据处理部分
//当前版本: D-1 
//作    者:  佟文杰
//完成日期: 4/13/2007
//修 改 人:
//修改原因:
//修改日期:
//*******************************************************************************
#include "adsample.h"
#include <C8051F020.H>
#include <math.h>

#define MAXLENGTH		0x7FF		 
#define MAXGROUP        16
#define SYSCLK           22118400

unsigned int idata uiSampleteCompleteLocation;
unsigned char idata uchSampleLocationNumber;
unsigned char idata uchRMSCompleteStatus;

xdata struct PT2060AD  AD _at_ 0x0100;	//定义到0x800再开始			

unsigned int *pSampBuffer0;	 
unsigned int *pSampBuffer1; 	 			 
unsigned int *pSampBuffer2;	 			 
unsigned int *pSampBuffer3;	 

unsigned int idata uchChannelScaleStatus[2];




//unsigned int idata temp;

//unsigned char idata l;

unsigned char idata uchRMSDataStorageNumber1;
unsigned char idata uchRMSDataStorageNumber2;






unsigned char xdata uchValue1;
unsigned char xdata uchValue2;


unsigned int xdata uiRmsCounter[2][4];



unsigned char idata uchPercentCountNumber;			//20080910

float xdata fPercentValueBAK[2][4];			  //20080910






//-----------------------------------------------------------------------
//函数名称:void CaculateDataScale(void)
//功    能:提前初始化计算过程中需要的变量
//输入参数:无
//返    回:无
//完成日期:4/16/2007
//-----------------------------------------------------------------------
void CaculateDataScale(void)
{
	unsigned char xdata i;

	for (i=0; i<2; i++)
	{		
		AD.fRealIntegralScaleData[i] = CaculateIntegralScale(i + 1);		
 		AD.fRealNotIntegralScaleData[i] = CaculateNotIntegralScale(i + 1);	
		AD.fRealNotIntegralLittleScaleData[i] = CaculateNotIntegralLittleRangeScale(i + 1);	
		AD.fRealLVDTScaleData[i] = CaculateLVDTScale(i + 1);//HHH
		AD.lLvdtMark[i] = CalculateLVDTZeroPosition(i+1);		//HHHHHHHHHH 	

		JudgeChannelScale(i+1);
	}
}		

//-----------------------------------------------------------------------
//函数名称:void InitADSampleModule(void)
//功    能:AD采样模块参数初始化
//输入参数:无
//返    回:无
//完成日期:4/16/2007
//-----------------------------------------------------------------------
void InitADSampleModule(void)
{
	unsigned char xdata i;
	ADModuleSoftInitialize();

	for (i=0; i<2; i++)
	{
		CaculateIntegrateRMSZero(i+1);	
		CaculateNotIntegrateLargeRangeRMSZero(i+1);
		CaculateNotIntegrateLittleRangeRMSZero(i+1);
	}
													//20080730

//	{
	ADModuleSampleRateInitialize();
//	}	
}

//-----------------------------------------------------------------------
//函数名称:void ADModuleSoftInitialize(void)
//功    能:AD采样模块软件参数初始化
//输入参数:无
//返    回:无
//完成日期:4/16/2007
//-----------------------------------------------------------------------
void ADModuleSoftInitialize(void)
{
	unsigned int i;
	unsigned char j;

	AD.uchGroupDone = 0;	
	AD.uiCurProcessingIndex = 0x0f;	 //20080703
	AD.uiPassedGroupIndex = 0;
	AD.uiSampleLocation = 0; 
	AD.uchCurMinCount = 0;	
		
	for (i=0; i<2; i++)											 
	{
		AD.uiDataAverage[i] = 0;
		AD.fDataRMSAverage[i] = 0;
	}
	
	AD.uiGapSumPTR1 = 0;
	AD.uiGapSumPTR2 = 0;		   //加初始化

	for(i=0;i<32;i++)
	{					
		AD.uiGapSumValue1[i] = 0xcc0;	    
		AD.uiGapSumValue2[i] = 0xcc0 ;	    
	}										   

	AD.uchCurMaxCount = 0;
	AD.uiGapSumPTR1 = 0;
		 
	for(i=0;i<4;i++)
	{					
		AD.uiCurPKPKValue[i] = 0;
		AD.uiLastPKPKValue[i] = 0;
	}		 
                                                                      
    for(i=0;i<30;i++)
	{
		AD.uiMaxValue0[i] = 1;
		AD.uiMinValue0[i] = 4095;
		AD.uiMaxGroup0[i] = 14;
		AD.uiMinGroup0[i] = 14;

		AD.uiMaxValue1[i] = 1;
		AD.uiMinValue1[i] = 4095;
		AD.uiMaxGroup1[i] = 14;
		AD.uiMinGroup1[i] = 14;

		AD.uiMaxValue2[i] = 1;
		AD.uiMinValue2[i] = 4095;
		AD.uiMaxGroup2[i] = 14;
		AD.uiMinGroup2[i] = 14;

		AD.uiMaxValue3[i] = 1;
		AD.uiMinValue3[i] = 4095;
		AD.uiMaxGroup3[i] = 14;
		AD.uiMinGroup3[i] = 14;	
	}
//	AD.uchCountNumber1 = 0;
//	AD.uchCountNumber2 = 0;
//	AD.uchCountNumber = 0;
	uchRMSCompleteStatus = 0;
	uiSampleteCompleteLocation = 0;
	uchSampleLocationNumber = 0;

	uchChannelScaleStatus[0] = 0;
	uchChannelScaleStatus[1] = 0;
	for (i=0; i<8; i++)
	{
		AD.fDataRMSADAverage[0][i]	= 0;
		AD.fDataRMSADAverage[1][i]	= 0;	//20080708
	}
	uchRMSDataStorageNumber1 = 0;    //20080708
	uchRMSDataStorageNumber2 = 0;    //20080708
	



	uchValue1 = 0;   //20080708
	uchValue2 = 0;   //20080708


	uchPercentCountNumber = 0;			   //20080910

	for (i=0; i<2; i++)
	{
		for (j=0; j<4; j++)
		{
			fPercentValueBAK[i][j] = 0;		//20080910
		}


	}
}

//--------------------------------------------------------
//函数名称:void SetDefaultCentricity(unsigned char uchChannel)
//功    能:初始化采样中心线
//输入参数:通道号
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
/*void SetDefaultCentricity(unsigned char uchChannel)
{
	unsigned char xdata i,j;

	switch(AD.uchChType[uchChannel - 1])
	{
		case 13:
		case 16:
		case 18:
			for (i=0; i<2; i++)	
			{
				for (j=0;j<15;j++)
				{									  
//					AD.uiDataAverageBAK[i][j] = 0x812;	 //改电路之前的数据	4cb
				}
			}
			break;
		case 14:
		case 17:
			for (i=0; i<2; i++)	
			{
				for (j=0;j<15;j++)
				{
//					AD.uiDataAverageBAK[i][j] = 0x7c0;
				}
			}
			break;
	}	
}			*/

//--------------------------------------------------------
//函数名称:void ADModuleSampleRateInitialize(void)
//功    能:初始化采样频率和采样通道
//输入参数:通道号
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void ADModuleSampleRateInitialize(void)
{					  	
	switch(AD.uchChType[0])
	{
	 	case 13:	   //加速度输入    输出加速度	a-a		  
		case 16:	   //速度输入      输出速度		v-v
			switch(AD.uchSampleRate[0])
			{
				case 3:			 //4K
					SetSampleRate(SYSCLK/12/16044);		 
					break;
				case 1:			 //0.5K
					SetSampleRate(SYSCLK/12/2022);		  
					break;
				default:
					SetSampleRate(SYSCLK/12/16044);		 
					break;
			}
			AD.uiGroupNum = 16;
			AD.uiGroupLength = 256;			
			break; 

		case 14:	   //加速度输入    输出速度		a-v
		case 15:	   //加速度输入    输出位移
		case 17:	   //速度输入      输出位移		v-d
			SetSampleRate(SYSCLK/12/16044);	
			AD.uiGroupNum = 16;
			AD.uiGroupLength = 256;		 
			break;

		case 18:	   //位移输入      输出位移		d-d
			SetSampleRate(SYSCLK/12/2005);	
			AD.uiGroupNum = 16;
			AD.uiGroupLength = 256;	
			break;

		case 22:     //LVDT输入         输出机壳膨胀
		case 28:     //HHH
			SetSampleRate(SYSCLK/12/8192);		  
			AD.uiGroupNum = 8;
			AD.uiGroupLength = 256;
			break;

		default:
			SetSampleRate(SYSCLK/12/16044);		 
			break;
	}
	SampleStartControl();
	SetInitChannel();		
}

//--------------------------------------------------------
//函数名称:void SetSampleRateAD(unsigned char uchChannel, unsigned char uchSampleRate)
//功    能:将采样频率设置到AD模块
//输入参数:通道号,采样频率
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void SetSampleRateAD(unsigned char uchChannel, unsigned char uchSampleRate)
{
	AD.uchSampleRate[uchChannel - 1] = uchSampleRate;
}

//--------------------------------------------------------
//函数名称:void SetChannleType(unsigned char uchChannel,unsigned char uchChannelType)
//功    能:设置采样通道类型
//输入参数:采样通道,采样通道类型
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void SetChannleType(unsigned char uchChannel,unsigned char uchChannelType)
{
	if (((uchChannelType > 12) && (uchChannelType < 19)) || ((uchChannelType > 20) && (uchChannelType <23)) || (uchChannelType==28))
	{
		AD.uchChType[uchChannel - 1] = uchChannelType;
	}
	else
	{
		AD.uchChType[uchChannel - 1] = 13;	//设定类型,不在范围之内默认加速度输入,加速度输出
	}				  
}
										 		 
//--------------------------------------------------------
//函数名称:void SetSensorDirection(unsigned char uchChannel, unsigned char uchSensorDirection)
//功    能:设置传感器方向
//输入参数:通道号,传感器方向
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void SetSensorDirection(unsigned char uchChannel, unsigned char uchSensorDirection)
{
	AD.uchSenDirection[uchChannel - 1] = uchSensorDirection; 	
}

//--------------------------------------------------------
//函数名称:void SetMeasureType(unsigned char uchChannel, unsigned char uchtMeasureType)
//功    能:设置测量类型
//输入参数:通道号,测量类型
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void SetMeasureType(unsigned char uchChannel, unsigned char uchtMeasureType)
{																		
	AD.uchtMeasureType[uchChannel - 1] = uchtMeasureType; 	
}

//--------------------------------------------------------
//函数名称:void SetCPUPosizationStatusAD(unsigned char uchCPUPosizationFlag)
//功    能:设置上下CPU位置的标志
//输入参数:CPU位置标志
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void SetCPUPosizationStatusAD(unsigned char uchCPUPosizationFlag)
{
	AD.uchCPUPosizationStatus = uchCPUPosizationFlag;
}

//--------------------------------------------------------
//函数名称:void SetSensorSensitive(unsigned char uchChannel, unsigned int uiSensorSensitive)
//功    能:设置传感器灵敏度
//输入参数:通道号,传感器灵敏度
//返    回:无
//作	者:佟文杰
//----------------------------------------------------------
void SetSensorSensitive(unsigned char uchChannel, unsigned int uiSensorSensitive)
{
	AD.uiSenSensitive[uchChannel - 1] = uiSensorSensitive;  
}

//--------------------------------------------------------
//函数名称:void SetZeroPosition(unsigned char uchChannel, int iZeroPosition)
//功    能:设置零点位置
//输入参数:通道号,零点位置电压值
//返    回:无
//作	者:佟文杰
//---------------------------------------------------------- 
void SetZeroPosition(unsigned char uchChannel, int iZeroPosition)
{
	AD.iZeroPosition[uchChannel - 1] = iZeroPosition;  
}

//--------------------------------------------------------
//函数名称:void SetScaleLow(unsigned char uchChannel,int iScaleLow)
//功    能:设置量程范围下限
//输入参数:通道号,量程下限
//返    回:无
//作	者:佟文杰
//---------------------------------------------------------- 
void SetScaleLow(unsigned char uchChannel,int iScaleLow)
{ 
	AD.iScaleLow[uchChannel - 1] = iScaleLow;  
}

//--------------------------------------------------------
//函数名称:void SetScaleHigh(unsigned char uchChannel,int iScaleHigh)
//功    能:设置量程范围上限
//输入参数:通道号,量程上限
//返    回:无
//作	者:佟文杰
//---------------------------------------------------------- 
void SetScaleHigh(unsigned char uchChannel,int iScaleHigh)
{	 
	AD.iScaleHigh[uchChannel - 1] = iScaleHigh; 
}

⌨️ 快捷键说明

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