例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]他们相应的数组里么,不是的话多通道采集是如何实现的。 |