主题中讨论的其他器件: LMT86
工具/软件:Code Composer Studio
大家好、
我尝试在单通道模式下读取两个通道(一个一个一个一个一个)(我不需要一次转换所有通道)。 问题是、似乎只有一个通道被读取(首先启动的通道)、如果我在其中插入3V3、读数 大约为2045。 假设、如果我首先在通道 A0上启动转换、那么只有 A0将一直工作到结束
我将以这种方式配置 ADC:
void configADC (void) { //配置 ADC A0引脚 P1SEL0 |= BIT0; P1SEL1 |= BIT0; //配置 ADC10 ADCCTL0 &=~ADCENC; //禁用 ADC ADCCTL0 = ADCSHT_2 | ADCON; // ADCON、S&H=16 ADC 时钟 ADCCTL1 = ADCSHP | ADCCONSEQ_0; // ADCCLK = MODOSC;采样定时器 ADCCTL2 = ADCRES; // 10位转换结果 ADCIE = ADCIE0; //启用 ADC 转换完成中断 }
我尝试以这种方式读取它:
#define A3 true #define A0 false uint16_t g_adcResult uint16_t analogRead (bool channel) { IF (通道) ADCMCTL0 = ADCINCH_3 | ADCSREF_0; // A3 ADC 输入选择= OA 输出 Vref = DVCC 其他 ADCMCTL0 = ADCINCH_0 | ADCSREF_0; // A0 ADC 输入选择 Vref = DVCC ADCCTL0 |= ADCENC | ADCSC; //采样和转换开始 _bis_SR_register (LPM0_bits);//输入 LPM0、ADC_ISR 将强制退出 返回 g_adcResult; } void main (void) { uint16_t adcTempTerm = 0; //一些代码... adcTempTerm = analogRead (A0)+ analogRead (A3); }
ADC ISR:
#pragma vector=ADC_vector __interrupt void ADC_ISR (void) { switch (__evo_in_range (ADCIV、ADCIV_ADCIFG)) { 案例 ADCIV_NONE: 中断; ADCIV_ADCOVIFG 案例: 中断; 案例 ADCIV_ADCTOVIFG: 中断; ADCIV_ADCHIIFG 案例: 中断; ADCIV_ADCLOIFG 案例: 中断; ADCIV_ADCINIFG 案例: 中断; ADCIV_ADCIFG 案例: G_adcResult = ADCMEM0; _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); 中断; 默认值: 中断; } }
我在尝试搜索有关如何正确设置单次转换的信息时遇到困难。 是否有办法实现我要做的事情? 请注意、我当前的程序只剩下48字节的内存。