|
//看门狗定时器1秒 进入启动一次AD采集,,AD采集分二个通道0和6,当第6通道采集完后,再次进入低功耗模式3
main()
{
while(1)
{
if(CH0_Finish)
{
CH0_Finish=0;
Tx_Pack(DATA);//取出第0通道数据发送
Choose_CH(6); //切换通道
}
if(CH6_Finish)
{
CH6_Finish=0;
Tx_Pack(DATA);//取第6通道数据
AD_RUN=0; //AD转换完成,进入低功耗模式
}
if(AD_RUN==0) LPM3; // 进入低功耗模式3,只有ACLK工作,最省电模式 _BIS_SR(LPM3_bits + GIE);
}
}
/********************************************************************************/
void Choose_CH(uchar ch)
{
adc_ch_inf=ch; //记录当前通道号
SD16INCTL0 |= ch; //选择通道
SD16CTL |= SD16REFON; // 只打开1.2V参考源
Delay_us(500);
SD16CCTL0 |=(SD16SC + SD16IE); // 启动 SD16 进行转换并且允许 SD16 中断。
AD_RUN=1; // AD已启动标志置位
}
/******************************************************************************/
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
SD16CCTL0 &= ~(SD16SC + SD16IE); // SD16 停止转换及禁止中断。
adc_last_val = SD16MEM0; // 保存 ADC 最后的结果.
if(adc_ch_inf==0) CH0_Finish=1;
else if(adc_ch_inf==6) CH6_Finish=1;
}
/*******************************************************************************
看门狗中断函数:watchdog_timer(); //1秒中断
******************************************************************************
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
Taken_time++;
if(Taken_time>=1)
{
Taken_time=0;
Choose_CH(0); //先由通道0开始转换
LPM3_EXIT; //退出低功耗模式,在AD完成后重新开启
}
}
有错吗??当通道采集时,不切换,没有问题,一切换就采集不到了,上来的数据全7FFF |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|