void ADC_handle(void)//转换8次,切换通道
{
unsigned int DATA0,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7;
int A0,A1,A2,A3,A4,A5,A6,A7;
Delay_US(40);
for(A0=0;A0<4;A0++)
{
ADCON0=0x81; //选择AN0通道准备进行A/D转换,启动A/D模块
asm("NOP"); //略做延时
asm("NOP"); //略做延时
asm("NOP"); //略做延时
asm("NOP"); //略做延时
ADGO=1; //开始进行A/D转换
while(ADGO) continue; //等待A/D转换结束
DATA0=(unsigned int)ADRESH;//强制类型转换,因为ADRESH是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。
DATA0= DATA0<<8; // 将高两位左移8位
DATA0 += ADRESL; //低八位加入ADRESL的值。
Data0+=DATA0;
}
Data0=Data0/4;
Delay_US(40);
for(A1=0;A1<4;A1++)
{
ADCON0=0x89; //选择AN1通道准备进行A/D转换,启动A/D模块
asm("NOP"); //略做延时
asm("NOP"); //略做延时
asm("NOP"); //略做延时
asm("NOP"); //略做延时
ADGO=1; //开始进行A/D转换
while(ADGO) continue; //等待A/D转换结束
DATA1=(unsigned int)ADRESH;//强制类型转换,因为ADRESH是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。
DATA1= DATA1<<8; // 将高两位左移8位
DATA1 += ADRESL; //低八位加入ADRESL的值。
Data1+=DATA1;
}
Data1=Data1/4;
Delay_US(40);
for(A2=0;A2<4;A2++)
{
ADCON0=0x91;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
DATA2=(unsigned int)ADRESH;
DATA2= DATA2<<8;
DATA2+= ADRESL;
Data2+=DATA2;
}
Data2=Data2/4;
Delay_US(40);
for(A3=0;A3<4;A3++)
{
ADCON0=0x99;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
DATA3=(unsigned int)ADRESH;
DATA3= DATA3<<8;
DATA3+= ADRESL;
Data3+=DATA3;
}
Data3=Data3/4;
Delay_US(40);
for(A4=0;A4<4;A4++)
{
ADCON0=0xA1;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
DATA4=(unsigned int)ADRESH;
DATA4= DATA4<<8;
DATA4+= ADRESL;
Data4+=DATA4;
}
Data4=Data4/4;
Delay_US(40);
for(A5=0;A5<4;A5++)
{
ADCON0=0xA9;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
DATA5=(unsigned int)ADRESH;
DATA5= DATA5<<8;
DATA5+= ADRESL;
Data5+=DATA5;
}
Data5=Data5/4;
Delay_US(40);
for(A6=0;A6<4;A6++)
{
ADCON0=0xB1;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
DATA6=(unsigned int)ADRESH;
DATA6= DATA6<<8;
DATA6+= ADRESL;
Data6+=DATA6;
}
Data6=Data6/4;
Delay_US(40);
for(A7=0;A7<4;A7++)
{
ADCON0=0xB9;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO) continue;
DATA7=(unsigned int)ADRESH;
DATA7= DATA7<<8;
DATA7+= ADRESL;
Data7+=DATA7;
}
Data7=Data7/4;
Delay_US(40);
Data_V[D_flag]=Data0; //将转换的电压值存入数组
Data_V[D_flag+1]=Data2;
Data_V[D_flag+2]=Data4;
Data_V[D_flag+3]=Data6;
Data_I[D_flag]=Data1; //将转换的电流值存入数组
Data_I[D_flag+1]=Data3;
Data_I[D_flag+2]=Data5;
Data_I[D_flag+3]=Data7;
DATA0=0; //AD采样暂存清0
DATA1=0;
DATA2=0;
DATA3=0;
DATA4=0;
DATA5=0;
DATA6=0;
DATA7=0;
}AD采样的程序,现在发现无线循环下采样不准了?
|