多通道采集是如何实现的

2019-07-22 15:08发布

例2:用序列通道采样模式对通道A1、A5、A7采样,将采样结果在中断中读出,并将A1、A5、A7采样的结果分别存入ADC10_A1[]、ADC10_A5[]和ADC10_A7[]数组中。选择SMCLK无分频作为采样时钟,选择内部参考源1.5V,ADC10SC触发采样,采样时间设置为16个采样时钟周期。

unsigned int u=7;
unsigned int ADC_timers =0;
unsigned int ADC_Result[8];
unsigned int ADC10_A1[20];
unsigned int ADC10_A5[20];
unsigned int ADC10_A7[20];
void main ()
{WDTCTL=WDTPW+WDTHOLD;
ADC10CTL1 |= CONSEQ_1;
ADC10CTL0 |= SREF_1+REFON+ADC10IE;//选择内部参考源1.5V,开启AD允许中断
ADC10CTL0 |= ADC10SHT_2+MSC; //打开AD转换,过采样率设置为16个采样周期
ADC10CTL1 |= ADC10SSEL_3+SHS_0; //选择SMCLK无分频作为采样时钟,ADC10SC触发采集
ADC10CTL1 |=INCH_7; //最高通道设为通道7
ADC10CTL0 |= ADC10ON; //打开ADC10模块
ADC10AE0 |= 0xa1; //开启通道A1、A5、A7
__bis_SR_register(GIE); //开总中断
while(1)
{
ADC10CTL0 |=ENC+ADC10SC; //开始转换
for(int i=0;i<10000;i++); //加入延时等待ADC10一轮序列通道采样完成}}
/****************************************************************************
* 名 称:
* 功 能:AD采样中断,没完成一次采样中断一次,将采样值存入数组
AD_Result[10]然后将想要的采样值读出**********************************************

#pragma vector=ADC10_VECTOR__interrupt
void ADC10_ISR (void)
{
ADC_Result[u]=ADC10MEM;
u--;
if(u>8)
{
u=7;
ADC10_A7[AD_timers]=ADC_Result[7];
ADC10_A5[AD_timers]=ADC_Result[5];
ADC10_A1[AD_timers]=ADC_Result[1];
ADC_timers++;
}
}
*******************************************************************我想利用这段程序改成多通道(A1、3、5、7)各采集20次然后取平均,ADC_Result[u]=ADC10MEM这句程序是每当中断的时候依次采集A1、3、5、7通道,然后再储存到ADC_Result[u]他们相应的数组里么,不是的话多通道采集是如何实现的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
jlyuan
1楼-- · 2019-07-22 16:34
建议楼主先看看教程:http://bbs.21ic.com/icview-332268-1-1.html
huangchui
2楼-- · 2019-07-22 19:29
里面没有我要的
wuhany
3楼-- · 2019-07-23 01:28
注意讲ADC10采样的部分
huangchui
4楼-- · 2019-07-23 03:44
嗯,我知道了,多谢啊
1988020566
5楼-- · 2019-07-23 05:56
就是顺序读取寄存器地址。
1988020566
6楼-- · 2019-07-23 06:58
这个也不难用,参考例程就行了。

一周热门 更多>