MSP430G2533: msp430g2 两通道ADC 转化问题。

Part Number: MSP430G2533
Other Parts Discussed in Thread: MSP430G2553

TI技术工程师:你好。

          我在使用msp430g2553 单片机,现在要进行两道路的ADC转换:通道 0 (采集模拟信号),通道10(采集芯片内部的温度信号)。 代码如下:

#include <msp430g2553.h>

unsigned int adc_ch0_val; // 存储通道0的值
unsigned int adc_ch10_val; // 存储通道10的值

void main(void) {
    WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗

    // --- 1. 配置 ADC ---
    ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON; 
    // SREF_1: 使用内部1.5V参考电压
    // ADC10SHT_3: 采样保持时间 64 cycles
    // REFON: 开启参考电压
    // ADC10ON: 开启 ADC

        ADC10CTL1 = ADC10DIV_3; // 分频 /4 (暂时不设置通道,在循环里设置)

    // 配置 P1.0 为模拟输入 (通道0)
    ADC10AE0 |= BIT0+BIT1; 

    __delay_cycles(100000); // 等待参考电压稳定

    while(1) {
        // --- 第一步:读取通道 0 (P1.0) ---
        ADC10CTL1 &= ~INCH_15; // 清除之前的通道选择
        ADC10CTL1 |= INCH_0;    // 选择通道 0
        
        ADC10CTL0 |= ENC + ADC10SC; // 启动转换
        while (!(ADC10IFG & ADC10CTL0)); // 等待转换完成
        adc_ch0_val = ADC10MEM; // 读取数据
        
        
         __delay_cycles(100000); // 等待参考电压稳定

        // --- 第二步:读取通道 10 (内部温度传感器) ---
        ADC10CTL1 &= ~INCH_15; // 清除之前的通道选择
        ADC10CTL1 |= INCH_10;   // 选择通道 10

        ADC10CTL0 |= ENC + ADC10SC; // 启动转换
        while (!(ADC10IFG & ADC10CTL0)); // 等待转换完成
        adc_ch10_val = ADC10MEM; // 读取数据

        // --- 数据处理 ---
        // 这里可以添加代码将 adc_ch0_val 和 adc_ch10_val 发送出去
        
        __delay_cycles(1000000); // 延时 1 秒
    }
}

  我是用查询的方式对两通道ADC进行转化。 问题出在 通道转换上面。

如果通道0在while(1)中前 仿真结果一直是通道0 。即使执行了ADC10CTL1 |= INCH_10;  实践和仿真结果都是无法切换到通道0.如下图所示。请在百忙之中给予指导。 不胜感激。

image.png