MSP430F6638的ADC采用内部2.5V参考电压时,用ADC通道0(P6.0)读出数据准确,但是运用AD1或者AD2等其他通道不加电压读出值为4096,求大神帮看看程序是不是有问题?
程序为采用通道AD1时:
void Init_ADC__2(void)
{
P6SEL |= BIT1; // 使能ADC通道
ADC12CTL0 = ADC12ON+ADC12SHT0_15+ADC12REFON+ADC12REF2_5V; // 打开ADC,设置采样时间
ADC12CTL1 =ADC12CSTARTADD_1+ADC12SHP+ADC12CONSEQ_0; // 选择存储器地址,使用采样定时器
ADC12MCTL1 =ADC12SREF_1+ADC12INCH_1; // 选择采样通道0 ADC12SREF_1+
//delay_1(1);
ADC12CTL0 |= ADC12ENC; // 使能转换
}
void ADC_SUM_2(unsigned char counter)
{
unsigned long average;//均值滤波总和变量,当counter过大可能导致溢出
float testing=0;//滤波后的测试值
average = 0;
testing=0;
test=0;
for(unsigned char j=0;j<counter;j++)//循环采集三次
{
ADC12CTL0 |=ADC12SC; // 开始转换
delay(10);
while (ADC12IFG ==BIT1)//等待AD转换结束
{
average +=ADC12MEM1;//采集值叠加到均值滤波总和变量
ADC12IFG&=~BIT1;//清 ADC12IFG中断标志位
}
}
testing=average/counter;//滤波后的测试值
delay(1000);//延时
}
***********************主函数***********************/
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关狗
Init_ADC__2();
_EINT();
while(1)
{
ADC_SUM_2(35);
LPM3;
}