http://www.forum.getchip.net/

Очень интересный глюк с участием переполнения таймера.
http://www.forum.getchip.net/viewtopic.php?f=16&t=699
Страница 1 из 1

Автор:  Vovka001 [ 03 янв 2016, 20:44 ]
Заголовок сообщения:  Очень интересный глюк с участием переполнения таймера.

Использую прерывания по переполнению таймера. В обработки прерывания подсчитываю часы реального времени. Переменные часов это однобайтовые ячейки SRAM. Кроме переменной DS – она двух байтовая.
В основном цикле есть условие которое не должно никогда выполнятся - если R4 = 20 то перейти в подпрограмму Obr. При этом R4 всегда 0. Но, тем не менее, при обработки на кристалле я попадаю в подпрограмму Obr, при этом R4 = 0. И еще, я заметил, если переменную DS сделать однобайтовой то переход в Obr происходит реже.
В чем прикол? Причем данный алгоритм я проверял на разных кристаллах: ATMega88p, ATMega48, ATMega8, ATMega128. И везде одно и тоже…

Вложения:
2016-01-03 19-29-27 Скриншот экрана.png
2016-01-03 19-29-27 Скриншот экрана.png [ 44.68 КБ | Просмотров: 7162 ]

Автор:  SVN [ 03 янв 2016, 22:15 ]
Заголовок сообщения:  Re: Очень интересный глюк с участием переполнения таймера.

Это не глюк МК, это программа так криво написана… ;) почитай первый пост , там есть ответ. 8-)

Автор:  GetChiper [ 03 янв 2016, 23:03 ]
Заголовок сообщения:  Re: Очень интересный глюк с участием переполнения таймера.

to Vovka001
Если сам не догадался - сохраняй регистры r16, r17 и SREG в стеке в начале обработки прерывания и восстанавливай их при выходе.

Автор:  Гость [ 04 янв 2016, 00:50 ]
Заголовок сообщения:  Re: Очень интересный глюк с участием переполнения таймера.

Спасибо ребята. R16 и Sreg пробовал эффект был тот же, а вот про R17 не знал. Сейчас все ок.

Автор:  SVN [ 04 янв 2016, 00:54 ]
Заголовок сообщения:  Re: Очень интересный глюк с участием переполнения таймера.

Потому что как раз r17 и участвует в процедуре сравнения… мышкой подведи к процедуре, и увидишь результат действий. ;) Но в других случаях участвует и r16 и регистр SREG, так что Евгений тебе дал совет почти от всех граблей такого рода. :-)

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/