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.如下图所示。请在百忙之中给予指导。 不胜感激。
