之前写过,我也是找网上程序进行修改的。我做的是基于msp430g2231的传感器平台,运用到了多路ad采集,当然我是直接采集的,另外2种方式是中断采集和dma采集,中断采集以前做过,dma采集只在stm32中使用过,msp430没有。
我用的msp430g2231,ad多路采集有很多种方法,我只说一种。
这个是之前发的图片,msp430g2231 4路ad采样,LED显示。
其他的我不用说,我只写主要的代码。
这个事初始化函数,初始化用的,当然也可以用其他的方式初始化,初始化函数尽量在系统启动之后写。
void init_ADC10()
{
P1SEL|=BIT3+BIT4+BIT5+BIT7;
ADC10AE0|=BIT3+BIT4+BIT5+BIT7; // 使P1.0允许AD模拟输入信号
ADC10CTL0=ADC10ON+MSC+SREF_0;//+REFON 开AD内核,选择电源为参考电压
ADC10CTL1=ADC10SSEL_0+CONSEQ_0; //+INCH_1+INCH_2 选择ADC12SC为触发源,选择系统时钟为AD内核时钟,采用单通道多次采用
}
然后就是采样函数,就这样简单,当然如果需要定时采样,可以开启ad定时器,也不是很难,仔细研究下就可以了。
单通道多次采样几乎是4个重复的步骤,如果采集的是实时的信号,我是不建议这样写的,要么中断,要么dma,干不干就看你了。具体的意思我就不过多解释了。
void start_ADC10()
{
ADC10CTL1|=INCH_3;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[0]= ADC10MEM;
//printf("%dn",result[1]);
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_3;
ADC10CTL1|=INCH_4;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[1]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_4;
ADC10CTL1|=INCH_5;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[2]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_5;
ADC10CTL1|=INCH_7;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[3]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_7;
}