/*************************************************
* 项目:多通道adc————1.5—2.5-3.5基准电压
*任文
**************************************************/
#include<msp430g2553.h>
#define CPU_F ((double)1000000)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uint unsigned int
#define uchar unsigned char
uchar i ;
uint a[150];
long ADC_timers[6];
void adc_init()
{ P1SEL|=BIT0+BIT1+BIT2+BIT3 ; //
P1DIR&=~(BIT0+BIT1+BIT2+BIT3);
ADC10CTL1|=CONSEQ_3 ;
// ADC10CTL0|=SREF_1+ADC10IE+REFON; //选择内部参考源1.5V,开启AD允许中 断
ADC10CTL0|=SREF_1+ADC10IE+REF2_5V+REFON; //选择内部参考源2.5V,开启AD允许中 断
// ADC10CTL0|=SREF_0+ADC10IE;// //选择内部参考源3.5V,开启AD允许中 断
ADC10CTL0|=ADC10SHT_0+MSC ; //打开AD转换,过采样率设置为16个 采样周 期
ADC10CTL1|=ADC10SSEL_3+SHS_0 ; //选择SMCLK无分频作为采样时钟, ADC10SC触 发 采 集
ADC10CTL1|=INCH_3; //最高通道设为通道7
ADC10CTL0|=ADC10ON ; //打开ADC10模块
ADC10AE0 |=BIT0+BIT1+BIT2+BIT3 ; //开启通道A3、A4
ADC10DTC1 = 0x78; //ADC_10总采样的次数120次
P1OUT&=~(BIT0+BIT1+BIT2+BIT3); //下拉电阻
}
void adc_qi()
{
ADC10CTL0&=~ENC;//关闭采样使能
while(ADC10CTL1&BUSY);//检测AD是否繁忙
ADC10CTL0|=ENC+ADC10SC;//启动ADC
ADC10SA=(uint)a; //获取a[]的首地址。首先对A1、A0采样,放入a[0]和a[1]中。再对A1、A0采样,放入a[2]和a[3]中,如此循环下去。
ADC_timers[0]=0; //A0
ADC_timers[1]=0; //A1
ADC_timers[2]=0; //A2
ADC_timers[3]=0; //A3
for(i=0;i<120;i++)
{if(i%4==0)
ADC_timers[0]+=a[i];
if(i%4==1)
ADC_timers[1]+=a[i];
if(i%4==2)
ADC_timers[2]+=a[i];
if(i%4==3)
ADC_timers[3]+=a[i];
}
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
LPM0_EXIT;//退出低功耗模式
}
|