Страница 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.

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