发现问题了,不是干扰,而是软件上的。我用while查转换结束的标志位ADIF,理论上应该是没问题的。单片机一直在查ADIF,我在程序中没有使用中断,里面有用到定时器中断。可能是在查ADIF时进入的定时器中断,退出来的时候ADIF被硬件清零了,所以就进入死循环。对于ADIF数据手册是这样描述的
Bit 4 – ADIF: ADC 中断标志
在ADC 转换结束,且数据寄存器被更新后, ADIF 置位。如果ADIE 及SREG 中的全局
中断使能位I 也置位,ADC 转换结束中断服务程序即得以执行,同时ADIF 硬件清零。此
外,还可以通过向此标志写1 来清ADIF。要注意的是,如果对ADCSRA 进行读-修改
-写操作,那么待处理的中断会被禁止。这也适用于SBI 及CBI 指令。
|