msp430F2013
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
Init_F2013(); //IO口设置
_EINT(); //允许全局中断。GIE=1
while(1)
{
LPM3; // 进入低功耗模式3,只有ACLK工作,最省电模式 _BIS_SR(LPM3_bits + GIE);
}
}
/*******************************************************************************
看门狗中断函数:watchdog_timer();
*******************************************************************************/
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
Choose_CH(5); // 选择AD通道
Turn_on_Sampling(); // 接通采集电路的电源启动采集。开启AD中断使能,并开始AD转换
LPM3_EXIT; //退出低功耗模式,在AD完成后重新开启
}
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
Close_Sampling(); // SD16停止转换,禁止中断及关闭采集电路的电源。
adc_last_val = SD16MEM0; // 保存 ADC 最后的结果.
LPM3; // 恢复到 LPM3 。
}
/*******************************************************************************
函 数:
Turn on_Sampling();
功 能:
打开参考电源,并启动AD转换
说 明:
看门狗定时采集数据时打开
*******************************************************************************/
void Turn_on_Sampling(void)
{
// SD16CTL |= (SD16VMIDON + SD16REFON); // 1.2V的参考电源。带缓冲器输出
SD16CTL |= SD16REFON; // 只打开1.2V参考源
Delay_us(500);
SD16CCTL0 |=(SD16SC + SD16IE); // 启动 SD16 进行转换并且允许 SD16 中断。
}
本打算,定时器定时打开AD模块电源和中断使能,开始AD采集,在AD采集完再返回低功耗模式。。可按上面却始终得不到数据,
如果不用低功耗模式3,一直开启AD使能,可以采集数据 |