msp4305529ADC采样代码
时间: 2023-07-02 16:15:15 浏览: 229
以下是 MSP430F5529 的 ADC 采样代码示例:
```c
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器
ADC12CTL0 = ADC12SHT0_9 | ADC12ON; // 配置 ADC12 采样时间和开启 ADC12
ADC12CTL1 = ADC12SHP | ADC12CONSEQ_2; // 配置 ADC12 转换模式为序列转换模式
ADC12MCTL0 = ADC12INCH_0; // 配置 A0 通道为 ADC12MCTL0
ADC12MCTL1 = ADC12INCH_1 | ADC12EOS; // 配置 A1 通道为 ADC12MCTL1,并设置为序列结束
ADC12IE = 0x02; // 允许 A1 通道的转换结束中断
ADC12CTL0 |= ADC12ENC; // 使能 ADC12 转换
P6SEL |= BIT0 + BIT1; // 配置 P6.0 和 P6.1 为模拟输入通道
while(1)
{
ADC12CTL0 |= ADC12SC; // 开始 ADC12 转换
__bis_SR_register(LPM0_bits + GIE); // CPU 进入低功耗模式0,等待 ADC12 转换完成并触发中断
__no_operation(); // 空操作以防止编译器优化
}
}
#pragma vector = ADC12_VECTOR // ADC12 转换结束中断
__interrupt void ADC12ISR(void)
{
switch(__even_in_range(ADC12IV,34)) // 根据 ADC12IV 寄存器的值判断 ADC12 转换是否完成
{
case 0: break; // 未发生中断
case 2: // A0 转换结束
ADC12CTL0 &= ~ADC12ENC; // 禁止 ADC12 转换
ADC12MCTL0 &= ~ADC12INCH_0; // 清除 A0 通道
ADC12MCTL1 |= ADC12INCH_1; // 配置 A1 通道为 ADC12MCTL1
ADC12CTL0 |= ADC12ENC; // 使能 ADC12 转换
break;
case 4: // A1 转换结束
ADC12CTL0 &= ~ADC12ENC; // 禁止 ADC12 转换
ADC12MCTL1 &= ~ADC12INCH_1; // 清除 A1 通道
ADC12MCTL0 |= ADC12INCH_0; // 配置 A0 通道为 ADC12MCTL0
__bic_SR_register_on_exit(LPM0_bits); // 跳出低功耗模式0
break;
default: break; // 未知的 ADC12 中断
}
}
```
此代码配置 ADC12 为序列转换模式,通过 A0 和 A1 两个通道轮流进行采样,每次采样结束后触发中断,通过中断函数切换 ADC12 的采样通道。
阅读全文