Цитата(evc @ Oct 29 2015, 18:11)

из-за этого получаете несанкционированные входы в обработчик прерываний ... но как скажете.
на сейчас окончательно утряс причину возникновения повторного прерывания сразу при выходе из обработчика
несанкционированных входов нет

в основной программе есть периодическая инициализация регистра PIE1
MOVLW 1
MOVWF PIE1
на всякий случай, вместе с остальными TRISами и ADCONами
вдруг чего сбойнёт от помех и некому будет питание передёрнуть, а вачдог не сработает, т.к. программа то бегает по кругу, просто периферия переинициализировалась неверно из-за таджика-сварщика

раз уж методом тыка установлено влияние страниц, то логично предположить что обработчик и правда не восстанавливает страницу, тогда получается что при попадании момента прерывания между выбором страницы 1 и записью 1 в PIE, эта 1 отправляется в зеркальный относительно PIE регистр PIR и устанавливает этот самый флаг, который сразу же опять и вызывает прерывание
абсолютно понятно и логично, ура

теперь осталось понять в каком месте обработчика портится страница, т.е. бит 5 регистра статуса
Код
movwf buf1
movf STATUS,w
movwf buf2
clrf STATUS
.......
movf buf2,w
movwf STATUS
movf buf1,w
retfie
единственная портящая статус команда тут MOVF, и портит она только бит 2
да и в принципе, если эта команда портит биты выбора страниц, то как ей пользоваться на ненулевых страницах?
на всякий случай повторюсь, buf1 и 2 имеют адреса 70Н и 71Н для однозначной адресации независимо от текущей страницы
так что половина непонимания остаётся пока
три тысячи чертей, они опять упрыгали на 2 минуты вперёд, с новым обработчиком прямо скопипастеным с даташита, со всеми этими SWAPами
вобщем точно выходит что обработчик не восстанавливает обратно 1 страницу, а оставляет 0 на которой сам работал
угу, абсолютно точно так, набил 50 нопов между выбором 1 страницы и записью в PIE1 (чтоб расширить окно ошибки), так прямо на глазах по 2 минуты плюсует
Сообщение отредактировал ddd-ekb - Oct 29 2015, 14:23