用msp430g2553写的ad测量电压的程序,实际调试的时候ADC10MEM里面确实是有值的,但是转化成电压值的时候一直都不能转换,求大佬帮忙看一下,或者提供一个可以用的程序。我接的是差不多1.2v的电池,所以检测到的电压大于1的时候P1.0会亮,但是实际上一直为我赋的初始值。
void ADC10_Init(void)
{
ADC10CTL1 |= CONSEQ_2; //单通道重复采样模式
ADC10CTL0 |= SREF_1+REFON+REF2_5V;//选择内部参考源2.5V,打开基准源
ADC10CTL0 |= ADC10SHT_3+MSC; //过采样率设置为64个采样周期,打开AD转换
ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2分频为采样时钟,用ADC10SC触发采集
ADC10CTL1 |=INCH_4; //选择通道A1
ADC10CTL0 |= ADC10ON+ADC10SR+REFBURST; //开启ADC10
ADC10AE0 |= 0x10; //开启外部通道A1
}
unsigned long ADSample()//取样
{
int i=0;
unsigned long ADC10_Result;
ADC10_Init();
for( i=0;i<8;i++)
{
ADC10CTL0 |=ENC+ADC10SC; //开始转换
while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成)
ADC10_Result+=ADC10MEM; //读取采样结果
}
AD_Result=AD_Result>>3;
return ADC10_Result;
}
unsigned long DC_Result()
{
unsigned long dc_result,dc_sample;
dc_sample=ADSample()/8;
dc_result=dc_sample*2.5/1023;//计算电压值公式
return dc_result;
}
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
unsigned long dc_result;
P1DIR|=BIT0;
dc_result=DC_Result();
if(dc_result!=0)
P1OUT|=BIT0;
else
P1OUT&=~BIT0;
return 0;
}
|