Глюк ШИМ при вызове прерывания INT0, INT1

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

Добрый день Котяры. Помогите разобраться. Вроде бы простой код а ведет себя непредсказуемо (на мой взгляд). Пишу в OCR2 127, запускаю таймер, далее вызываю прерывание INT0, и в OCR2 пишется 128. INT1 - в OCR2 пишется 1. И это еще ДО выполнения самого прерывания. Вроде бы и ошибиться негде, а не работает. :(
Вложения
int0-1mega8.asm
собственно код.
(2.27 КБ) 364 скачивания
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж

Сообщение pirotehnick »

а ты в дебагере просматривал как у тебя код работает??? на линиях инт_0 и инт_1 постоянно низкий уровень и, в соответствии с настройками, прерывания возникают постоянно, или так должно быть? :?

Потом у тебя постоянно загаживается стек, т.к. не вызавается команда ret или reti .

Если хочешь могу немного подправить код.
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Rubin писал(а): Вроде бы и ошибиться негде, а не работает. :(
Если бы на Си написать в CVAVR то навеняка работало бы.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж

Сообщение pirotehnick »

А может так:
Вложения
test2.asm
(2.21 КБ) 344 скачивания
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн май 14, 2007 19:49:16
Откуда: Краснодар

Сообщение Rubin »

Pirotehnick, превеликое Спасибо :)) . Код заработал, только не понял в чем трабла была: в настройке таймера или в стеке.
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж

Сообщение pirotehnick »

проблема была в настройке прерываний (INT0, INT1). В соответствии с твоими настройками прерывание инт_0 генерировалось постоянно, пока на соответствующем выводе держался низкий уровень.
И, как я уже говорил, у тебя постоянно загаживался стек, так как не вызывалась команда reti, видимо ты пытался сделать возврат в подпрограмму loop с помощью rjmp, можно было и так, но тогда тебе было бы нужно очистить стек, например с помощью команды pop.

А вообще не плохо было бы описать по подробнее, что требуется от данной программы, а то сразу и не понятно что ты хочешь сделать. 8)
Контактная информация:
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»