本帖最后由 彪哥 于 2013-6-26 12:51 编辑
一个AD转换的程序如下,连续累加28次,每次连续转换两次,分别是两个通道数据。现在的问题是:
12位AD的AD出来的结果最高是0xFFF;可是累加求平均后,得到的数据是0x1EFC(7932),百思不得其解。请高人相助!
注:整段程序编译后代码7K多,data使用94字节。使用89S52芯片,时钟22.1184MHz
uchar AD_BufL;
uchar AD_BufH;
ulong Result_L;
ulong Result_H;
uchar i,ii;
ulong Chanal_A = 0;
ulong Chanal_B = 0;
for(ii=0;ii<28;ii++)
{
for(i=0;i<2;i++)
{
while(AD_ST==0); //等待AD转换结束
while(AD_ST==1);
AD_HL = 0; //读高8位数据
AD_BufH = AD_RESULT;
AD_HL = 1; //读低4位数据
AD_BufL = AD_RESULT;
Result_L = (AD_BufH<<4)+(AD_BufL>>4);
Result_H = AD_BufH>>4;
if(i==0) //A道数据
Chanal_A = (Result_L + Result_H<<8) + Chanal_A;
else //B道数据
Chanal_B = (Result_L + Result_H<<8) + Chanal_B;
}
}
Chanal_A = Chanal_A/28;
Chanal_B = Chanal_B/28;
|