Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 自由运行模式下AVR ADC中的ADIE位_Arduino_Microcontroller_Avr_Atmel_Atmega - Fatal编程技术网

Arduino 自由运行模式下AVR ADC中的ADIE位

Arduino 自由运行模式下AVR ADC中的ADIE位,arduino,microcontroller,avr,atmel,atmega,Arduino,Microcontroller,Avr,Atmel,Atmega,我一直在写我自己的“库”来处理AVR芯片上的不同初始化。然而,我被ADCSRA寄存器中ADIE位的动作所困扰(数据表第261页)。数据表并没有真正解释ADIE是如何工作的。但是,每当ADIE设置为0时,我都无法获得ADC的读数。为什么呢?我认为ADC的工作原理与定时器类似-即使中断未启用,它仍将使用读数更新ADC寄存器 这是罪魁祸首代码,每当“中断”设置为除1以外的任何值时,ADC都不工作。有趣的是,与其他中断不同,如果ISR(ADC_vect)例程中没有代码,芯片就不会卡住 if(interr

我一直在写我自己的“库”来处理AVR芯片上的不同初始化。然而,我被ADCSRA寄存器中ADIE位的动作所困扰(数据表第261页)。数据表并没有真正解释ADIE是如何工作的。但是,每当ADIE设置为0时,我都无法获得ADC的读数。为什么呢?我认为ADC的工作原理与定时器类似-即使中断未启用,它仍将使用读数更新ADC寄存器

这是罪魁祸首代码,每当“中断”设置为除1以外的任何值时,ADC都不工作。有趣的是,与其他中断不同,如果ISR(ADC_vect)例程中没有代码,芯片就不会卡住

if(interrupt){ADCSRA|=1<<ADIE;}//enable the ADC conversion complete interrupt
else{ADCSRA&=~1<<ADIE;}

if(interrupt){ADCSRA |=1此代码缺少一些括号,因此它不会做您认为它会做的事情。它看起来可能是做了正确的事情,运气好

if(interrupt){ADCSRA|=1<<ADIE;}//enable the ADC conversion complete
interrupt else{ADCSRA&=~1<<ADIE;}


~1<<ADIE != ~(1<<ADIE)
if(中断){ADCSRA |=1非常感谢!:)括号是问题所在,现在我知道为什么代码的位会随机干扰其余的位。我可能会以软中断结束,以避免在相当多的ISR之间屏蔽,因此我可能必须记住手动设置/清除重要位。再次感谢您的帮助:)