Доброго времени соток. Изучаю таймеры и прерывания и начал с таймера T/C0. И вот вопрос. в функции White() вместо while(TCNT0<250) хочу использовать флаг прерывания TOV0, для выхода из цикла по переполнению TCNT0. Но как это написать не знаю. Вернее много написал. но ничего не работает. Спасибо.
очистка битов в регистре TIFR осуществляется ЗАПИСЬЮ ЕДИНИЦ в соответствующие биты, поэтому это неправильный код, правильно будет так: TIFR = (1<<TOV0);
битва с дураками проиграна, победители торжествуют. слава победителям!
Можете мне расписать по подробнее эту строчку? Мне нужно разбить эту строку на части на последовательность операции. Иначе не понятно, и буду опять возвращаться к теме. Спасибо.
После выхода из цикла программа начинает работать с самого начало.
Ибо Вы включили прерывание, и не описали обработчик. По умолчанию AVR-GCC генерирует код, перезагружающий МК при возникновении неописанного прерывания.
очистка битов в регистре TIFR осуществляется ЗАПИСЬЮ ЕДИНИЦ
спасибо, попробую поработать с обработчиком прерываний. А на счёт строчки я так понял while(!(TIFR & (1<<TOV0))) цикл работает пока TIFR не равно единице. Это правильно я понял?
king-live писал(а):А для чего нужно TIFR обнулять. Я так понял это происходит аппаратно. или только после вызова обработчика прерывания он может обнулиться?
обнулять его нужно, если вы его опрашиваете без работы с прерываниями - раз нет обработчика, некому аппаратно его сбрасывать, надо вручную.
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер писал(а):очистка битов в регистре TIFR осуществляется ЗАПИСЬЮ ЕДИНИЦ в соответствующие биты, поэтому это неправильный код, правильно будет так: TIFR = (1<<TOV0);
Это верно.
YS : Фу блин, точно. Тогда TIFR|=(1<<TOV0);
Мастер Ломастер: так тоже можно, но по объему кода и скорости неоптимально. самый эффективный вариант я привел ранее.
YS: Зато не затрагивает остальные биты.
Диалог опытных программистов Если сбрасываете конкретный флаг, ответ выше. А если хотите сбросить все активные флаги в данном регистре, то не мудрите, делайте проще