PIC12F629 Interrupts

Loading thread data ...
Reply to
Alexey V Bugrov

Салют, Михаил!

Да.И так до бесконечности.Поэтому в теле прерывания СLRWDT лучше избегать.

Скачай описание на 12f629.Там будет пример сохранения регистров W,STATUS во время входа в прерывание и восстановления их при выходе.

movwf w_temp swapf status,w bcf status,rp0 movwf status_temp

выполнения прерывания

swapf status_temp,w movwf status swapf w_temp,f swapf w_temp,w

retfie

При этом w_temp должен быть определен как в банке 0 так и в банке 1. Общее правило в принципе такое.Значения регистров,которые могут измениться во время выполнения прерывания, сохраняються в промежуточных регистрах в самом начале прерывания.В конце прерывания значения регистров восстанавливаються. И сбрасывается флаг прерывания.В этом примере речь идет о сохранении W и STATUS. Но если ты что то делаешь в основном теле программы ,например, с EEADR и во время прерывания тоже работаешь с EEADR ,то и его надо сохранять и восста- навливать.

---------------- С уважением.Ю.

Reply to
yura.v.podgornov

Привет!

Mon Apr 04 2005 02:01, Mikhail Samoilenko wrote to All:

...

MS> Если не сбросить флага прерывания в процессе его обработки MS> (конкретно в моем случае - флага TMR1IE) то что происходит MS> по команде retfie? Снова вызывается вектор прерывания?

Да. Сэмплинг флагов производится в начале каждого цикла и если прерывание действует, то выбиравшаяся в этом же цикле команда уже не исполняется.

MS> Есть какая-нибудь application note по прерываниям?

В "PICmicro Mid-Range MCU Family Reference Manual", есть раздел "Interrupts". Там не очень много информации, но в принципе всё есть.

В чем смысл эксперимента с неснятием флага?

Александр Голов, Москва, snipped-for-privacy@mail.ru

Reply to
Alexander Golov
Reply to
Mikhail Samoilenko

Привет!

Sat Apr 09 2005 20:59, Mikhail Samoilenko wrote to Alexander Golov:

...

MS> Hе понял о каком сэмплинге и какой команде речь.

Ядро в конце первого такте каждой команды производит проверку активности флага прерывания и, соответственно, принимает решение о дальнейших действиях. Я думал тебя интересует будет ли вообще исполнять основной код МК (хотя бы по одной команде), или повиснет наглухо.

MS> Хотя в принципе уже разобрался.

MS> Просто в первый раз использую прерывания, а в даташите на 629 MS> про флаги как-то невнятно написано: "The interrupt flag bit(s) must be MS> cleared in software before re-enabling interrupts to avoid GP2/INT MS> recursive interrupts". До того речь шла о прерываниях вообще, а тут - MS> акцент на GP2/INT.

Это просто ошибка. Посмотри в даташитах на другие 14-разрядные, там в сущности тоже самое говорится, но несколько в другом порядке. Видимо когда слова/абзацы двигали, что-то потеряли/лишнего прилепили.

MS> Хотя у меня точно так же зациклился и с TMR1 при MS> неснятом TMR1IF.

Естественно.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Reply to
Alexander Golov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.