Полагаю, я немного опоздал, но все же у меня возникла та же проблема, которую я решил, используя следующий метод:
Прерывания включаются с использованием двух флагов 1. Глобальный флаг прерываний 2. Флаг связанных с модулем прерываний(в вашем случае ADC)
Вы можете контролировать флаг, связанный с модулем, в вашем случае в регистре управления ADCSRA есть флаг ADIE-ADC Interrupt Enable, который вы можете использовать для управления прерываниями.
Например, в основной функции вы можете включить флаг и в ISR отключить флаг.
main()
{
//enable global flag and ADC flag
while(1)
{
//your logic
// enable ADC flag
}
}
ISR()
{
//disable the ADC flag
}
Я надеюсь, что это решит вашу проблему.