avrgreenhand 发表于 2009-7-17 17:31:09

AVR 关于AD转换的问题

在avr的用户手册中 有这样一句话“在ADC 转换结束,且数据寄存器被更新后, ADIF 置位。如果ADIE 及SREG 中的全局
中断使能位I 也置位,ADC 转换结束中断服务程序即得以执行,同时ADIF 硬件清零。此
外,还可以通过向此标志写1 来清ADIF”   中的“通过向此标志写1 来清ADIF”是什么意思,如果不清零会发生什么情况?

恳请各位高手指点指点。。。。。

machao 发表于 2009-7-19 13:20:49

ADIF表示当前一次ADC转换完成了,不关你是否需要这个ADC的值,一般总要把它清掉,为下一次做准备。

如果你不清零,而且ADC是单次转换的。那么当你启动ADC后,ADIF仍然为1,你如果认为是转换完成,读ADC值的话,可能就是错误的了。

avrgreenhand 发表于 2009-7-19 14:54:51

谢谢马老师 辛苦了

Kidult 发表于 2012-4-21 20:07:17

machao 发表于 2009-7-19 13:20 static/image/common/back.gif
ADIF表示当前一次ADC转换完成了,不关你是否需要这个ADC的值,一般总要把它清掉,为下一次做准备。

如果你 ...

如果是连续转换模式的话,即:ADCSRA|=(1<<ADFR);还需要考虑ADIF位吗?连续转换模式下,怎么才能判断转换结束呢?
   我的程序是这样写的:
         ADCSRA=0x00;
           ADMUX=0x40;///ADC0,
           ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|0x07;
             delay_nms(10); //给出转换的时间,1ms足够            
            adc_l0=ADCL;//先读取低八位
            adc_h0=ADCH;//再读取高八位
   红色注释行是否可以换成判断ADIF位是否置位?
    谢谢!!!!

Kidult 发表于 2012-4-21 20:11:08

machao 发表于 2009-7-19 13:20 static/image/common/back.gif
ADIF表示当前一次ADC转换完成了,不关你是否需要这个ADC的值,一般总要把它清掉,为下一次做准备。

如果你 ...

是否只有在用中断服务程序处理准换结果的时候才需要判断ADIF是否置位?
页: [1]
查看完整版本: AVR 关于AD转换的问题