#include "msp430g2553.h"
#include "adc.h"
unsigned int ADC_getValue(unsigned int channel)
{
unsigned int value;
if(channel > 12)
return 0;
ADC10CTL0 &= ~ENC;
if(CH_TSR == channel)
{
ADC10CTL0 = ADC10ON + ADC10SHT_3 + REFON + SREF_1 + ADC10IE; //采样保持时间为8*ADC10CLKs,VR+=1.5V
ADC10CTL1 |= INCH_10 + ADC10SSEL_0 + CONSEQ_0; //选择ACLK作为温度采样时钟源,进行单通道单次转换
}
else
{
ADC10CTL0 = ADC10ON + ADC10SHT_1 + ADC10IE; //VR+=VCC,VR-=VSS
ADC10CTL1 |=((channel << 12)& 0xf000)+ADC10SSEL_0+CONSEQ_0; //选择ADC10OSC作为时钟源,进行单通道单次转换
}
if(channel < 8)
ADC10AE0 |= channel; //通道1模拟输入使能
ADC10CTL0 |=ENC+ADC10SC; //使能转换和起动转换
LPM3;
value = ADC10MEM & 0x03ff;
ADC10CTL0 &= ~ENC;
return value;
}
#pragma vector = ADC10_VECTOR
__interrupt void ADC10_ISR()
{
LPM3_EXIT;
ADC10CTL0 &= ~ADC10IFG;
}
评论2
最新资源