|
楼主 |
发表于 2010-6-5 09:25:01
|
显示全部楼层
void Deal_AD(void)
{
unsigned char HI,Low,i;
//static uchar k;
unsigned long data,j,a,b;
unsigned int c,m1,Adresult_avg;
//float m2;
// double m;
// for(i=0;i<20;i++) // 20
// AD_Reseve=AD_Sample; // 读采样值,以免在计算时被新的采样值覆盖
///*
for(i=0;i<20;i++) // 读采样值,以免在计算时被新的采样值覆盖
{
if(AD_Sample>512)
{
AD_Reseve=AD_Sample-512;
}
else
{
AD_Reseve=512-AD_Sample;
}
}
//*/
data=0; // data先清零
for(i=0;i<20;i++) // 计算16[20]点采样值平方和
{
HI=AD_Reseve>>8; // 高2位
Low=AD_Reseve&0xff; // 低8位,隐形转换Low=AD_Reseve;
a=HI*HI;
a=a<<16;
b=(HI*Low);
b=b<<9;
c=Low*Low;
j=a+c+b;
/* a为高2位,b为低8位,j=(a<<8+b)*(a<<8+b)= (a*a)<<16+2*(a<<8*b)+b*b=(a*a)<<16+(a*b)<<9+b*b. */
data+=j; // 累加平方和
}
data=data*0.05; // data除以20
//data=262144;
//m=sqrt(data); // 开平方根
//m=576.123;
//m=data*0.001953125;
//data=2600;
data=(data*10000); // 放大一万倍
m1=sqrt_16(data); // m1是unsigned int类型数据,等于扩大了100倍
//m2=m1*0.01; // 缩小一百倍
//m1=Adresult;
//Adresult=(unsigned int)m; // 转换为整形数据
//Adresult=(unsigned int)m2; // 转换为整形数据
Adresult=(m1*5)>>10; /* 将AD采样结果转换为两位数表示的值,即放大10倍,乘以满该度值5V,除以满刻度转换值10位(1024) */
/*
//取采样值的平均值
for(k=0;k<20;k++)
{
AD_Reseve_Average=Adresult;
AD_Average_Point++;
}
if(AD_Average_Point>20)
{
AD_Average_Point=0;
AD_Average_Finish_Flag=1;
}
//=================================================
for(k=0;k<20;k++)
{
AD_Average_Reseve_Progression+=Adresult;//累加AD采样值
AD_Average_Point++;
}
if(AD_Average_Point>20)
{
AD_Average_Point=0;
AD_Average_Finish_Flag=1;
}
*/
//=====================================
/*
for(k=0;k<20;k++)
{
AD_Average_Reseve_Progression+=Adresult;//累加AD采样值
AD_Average_Point++;
break;
}
if(AD_Average_Point>20)
{
k=0;
AD_Average_Point=0;
AD_Average_Finish_Flag=1;
}
*/
//for(k=0;k<20;k++)
//{
AD_Average_Reseve_Progression+=Adresult;//累加AD采样值
AD_Average_Point++;
// break;
//}
if(AD_Average_Point>32)
{
//k=0;
AD_Average_Point=0;
AD_Average_Finish_Flag=1;
}
//Adresult=(((Adresult/10)<<4)&0xf0)+(Adresult % 10);/* 转换为带一位小数的BCD码实际值如25表示2.5V */
}
/* **************************************************************
** 函 数 名: AD_Average_Deal()
** 功 能:AD转换完成结果取平均值处理数据子程序
** 编 制: 大兵
** 日 期: 2010-5-29
****************************************************************** */
void AD_Average_Deal(void)
{
//AD_Average_Reseve_End = (AD_Average_Reseve_Progression>>5);
AD_Average_Reseve_End = (AD_Average_Reseve_Progression/32);
AD_Average_Reseve_End_Transfer=AD_Average_Reseve_End;
AD_Average_Reseve_Progression = 0;
AD_Average_Reseve_End=0;
} |
|