Урок №4. Изучаем прерывания с помощью языка программирования Assembler на микроконтроллере Atmega8.

preview_player
Показать описание
Изучаем работу прерывания с помощью языка программирования Assembler на микроконтроллере Atmega8.

Рекомендации по теме
Комментарии
Автор

Следовало бы сказать о начальной системной области Flash памяти - области векторов прерываний. Ведь они используются: rjmp RESET rjmp EXT_INT0. И еще вопрос: прерывания на INT0 (PORTD.2) запрограммированы по нарастающему фронту (переход из низкого в высокий уровень), а когда нажимается кнопка возникает другой фронт - спадающий - переход из высокого уровня в низкий, а в обработчике прерывания после антидребезговой задержки проверяется нажатое состояние кнопки (низкий уровень на PIND.2). Таким образом прерывание возникнет после отпускания нажатой бездребезговой кнопки кнопки или во время дребезга дребезговой кнопки. Таким образом программа с бездребезговой кнопкой работать не будет, а с дребезговой будет (проверила на макете именно с разными кнопками). У вас по-видимому кнопка с дребезгом была, поэтому и заработало. Чтобы программа работала абсолютно верно (т.е. одинаково и с бездребезговой кнопкой и с кнопкой с дребезгом), надо запрограммировать прерывание INT0 по спадающему фронту, т.е.
ldi temp, (1<<ISC01)|(0<<ISC00) ; прерывание INT0 по спадающему фронту (при нажатии кнопки)
out MCUCR, temp
А так глобально все верно и подход к обработке кнопки на прерывании правильный.
Еще желательно перед возвратом из обработчика (а именно перед разрешением прерываний), сбросить флаг прерывания INT0, который может повторно установиться из-за дребезга, вызвав вложенное прерывание, т.е. добавить команды:
ldi temp, (1<<INTF0)
out GIFR, temp ;сброс флага прерывания, который возможно установился повторно во время дребезга
Так что работа с кнопкой на прерывании, задача довольно сложная и требует массы экспериментов на железе, через что я прошла.

marina
Автор

Спасибо за труды, но это не урок. Больше похоже на обзор непонятных примеров, которые не смогут помочь в изучении языка.

ciklomat