Страница 1 из 1
Глюк ШИМ при вызове прерывания INT0, INT1
Добавлено: Пт сен 19, 2008 13:40:21
Rubin
Добрый день Котяры. Помогите разобраться. Вроде бы простой код а ведет себя непредсказуемо (на мой взгляд). Пишу в OCR2 127, запускаю таймер, далее вызываю прерывание INT0, и в OCR2 пишется 128. INT1 - в OCR2 пишется 1. И это еще ДО выполнения самого прерывания. Вроде бы и ошибиться негде, а не работает.

Добавлено: Пт сен 19, 2008 18:39:04
pirotehnick
а ты в дебагере просматривал как у тебя код работает??? на линиях инт_0 и инт_1 постоянно низкий уровень и, в соответствии с настройками, прерывания возникают постоянно, или так должно быть?
Потом у тебя постоянно загаживается стек, т.к. не вызавается команда ret или reti .
Если хочешь могу немного подправить код.
Re: Глюк ШИМ при вызове прерывания INT0, INT1
Добавлено: Пт сен 19, 2008 19:17:39
tych
Rubin писал(а): Вроде бы и ошибиться негде, а не работает.

Если бы на Си написать в CVAVR то навеняка работало бы.
Добавлено: Пт сен 19, 2008 19:34:29
pirotehnick
А может так:
Добавлено: Пн сен 22, 2008 09:38:02
Rubin
Pirotehnick, превеликое Спасибо

. Код заработал, только не понял в чем трабла была: в настройке таймера или в стеке.
Добавлено: Пн сен 22, 2008 14:54:42
pirotehnick
проблема была в настройке прерываний (INT0, INT1). В соответствии с твоими настройками прерывание инт_0 генерировалось постоянно, пока на соответствующем выводе держался низкий уровень.
И, как я уже говорил, у тебя постоянно загаживался стек, так как не вызывалась команда reti, видимо ты пытался сделать возврат в подпрограмму loop с помощью rjmp, можно было и так, но тогда тебе было бы нужно очистить стек, например с помощью команды pop.
А вообще не плохо было бы описать по подробнее, что требуется от данной программы, а то сразу и не понятно что ты хочешь сделать.
