有时需要读取一个ADC通道,有时需要读取另一个通道,但我的代码不起作用。
有人能告诉您为什么此代码不起作用吗? 我意识到有一种序列等模式,但它看起来很复杂,我的代码必须非常接近工作。
提前感谢! 以下是代码...
void init_temp_monitor_adc (void){
PM5CTL0 &=~LOCKLPM2;
//默认情况下,REFMSTR=1 => REFCTL用于配置内部引用
同时(REFCTL0和REFGENBUSY);
//电压参考控制
REFCTL0 = REFVSEL_2 | REFON_L | REFOUT_L;
//配置ADC12
ADC12CTL0 = ADC12SHT0_2 | ADC12ON; //循环采样时间,ADC打开
ADC12CTL1 = ADC12SHP; //源时钟是采样计时器
ADC12CTL2 || ADC12RES_2; // 12位转换
// ADC12IER0 |= ADC12IE0; //中断MEM0 --未使用--
//********* 下一行似乎永远选择ADC12INCH_12或ADC12INCH_13,但我想在调用READ_TEMP_ADC()*******时选择它
ADC12MCTL0 |= ADC12INCH_13 | ADC12VRSEL_1;//选择A13, Vref源=内部VREF (高于设置为2.5V)
// ADC12MCTL0 |= ADC12INCH_12 | ADC12VRSEL_1;//选择A12, Vref源=内部VREF (高于设置为2.5V)
while (!(REFCTL0 & REFGENRDY));//等待参考生成器稳定
}
//---------------------------
//参数选择要读取的通道
u16int_t read_temp_adc (u16int_t which){
u16int_t val;
IF (which == 1){
ADC12MCTL0 |= ADC12INCH_12| ADC12VRSEL_1;//选择A12通道A
while (!(REFCTL0 & REFGENRDY));//等待参考生成器稳定
__DELAY周期(50);
ADC12CTL0 || ADC12ENC | ADC12SC; //开始转换
//等待转换。
//
while (!(ADC12IFGR0和ADC12IFG0));//AA
Val = ADC12MEM0; //
ADC12MCTL0 &=~ADC12INCH_12;
}
否则 ,如果(which == 2){ // TTT
ADC12MCTL0 |= ADC12INCH_13| ADC12VRSEL_1;//选择A13通道B
while (!(REFCTL0 & REFGENRDY));//等待参考生成器稳定
__DELAY周期(50);
ADC12CTL0 || ADC12ENC | ADC12SC; //开始转换
//等待转换。
//
while (!(ADC12IFGR0和ADC12IFG0));//AA
Val = ADC12MEM0; //
ADC12MCTL0 &=~ADC12INCH_13;
}
ADC12CTL0 &=~ADC12ENC;//我们是否需要此项?
返回值;
}