您好,
我有一个应用程序在一次读取多通道ADC中读取2个通道。 代码如下。 它似乎"工作",但我从第一个采样的时间通道获得的实际读数很高。 我正在对2个输入通道进行采样 ,这些通道大约为2.5V。 它们都应该参考3.3V的Vcc。 第一个信道为我提供了3700个ADC计数,而第二个信道为我提供了我所期望的,大约3100个计数。 当我在 Init_ADC函数中切换输入通道(swap inch_0和inch_1)时,第一个采样通道(ADC12MEM0)在3700左右仍然很高,而第二个通道是正确的。
我们希望对此有任何想法。
谢谢 ,Dave
void Init_adc()
{
P6SEL |=0x03;// WFP 6.0 & WFP 6.1 ADC选项选择
ADC12CTL0 = SHT0_2 + MSC + ADC12ON;//设置采样时间,多样品转换,打开ADC12
ADC12CTL1 = SHP + CONSEQ_1;//使用采样计时器,转换序列一次
ADC12MCTL0 = inch_0;// ref+=AVcc,通道= A0温度
ADC12MCTL1 = inch_1 + EOS;// ref+=AVcc,通道= A1感应
ADC12IE = 0x02;//在第二个通道上启用中断-序列结束
ADC12CTL0 || ENC;//已启用转换
}
void Start_ADC()
{
ADCDoneFlag=0;
ADC12IE = 0x02;//启用中断
ADC12CTL0 |= ADC12SC;//开始采样
ADCStartFlag=0;
}
// ADC12中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=ADC12_vector
__interrupt void ADC12_ISR (void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (ADC12_vector))) ADC12_ISR (void)
#否则
错误编译器不受支持!
#endif
{
ADC12CTL0 &=~ADC12SC;//采样停止
ADC12IE = 0;//禁用中断
ADC_VALUE = ADC12MEM1;
ADC_Temp_value = ADC12MEM0;
ADCDoneFlag=1;
__BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除CPUOFF位
}