реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> PIC16F74 непонятки с прерыванием, хаотичная ошибка прерывания по таймеру
evc
сообщение Oct 29 2015, 12:41
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



ddd-ekb, слово "скрываете" я использовал в шутку. ViKo, однако прав, я давно на ассемблере не писал, вот и забылось.
Как я вам и писал - именно адресация страниц портится у вас, в обработчике прерываний. Уважаемый ViKo, навел на правильную мысль.
Попытайтесь поставить вот такую преамбулу обработчика прерываний и соответственно на выходе тоже обратный код:

Код
        ORG     0x004            ; interrupt vector location
        movwf   w_temp           ; save off current W register contents
        movf    STATUS,w         ; move status register into W register
        movwf    status_temp      ; save off contents of STATUS register
        movf    PCLATH,w
        movwf    PCLATH_temp
        clrf    PCLATH

... здесь ваш обработчик прерываний...

        movf    status_temp,w    ; retrieve copy of STATUS register
        movwf    STATUS           ; restore pre-isr STATUS register contents
        movf    PCLATH_temp,w
        movwf    PCLATH
        swapf   w_temp,f
        swapf   w_temp,w         ; restore pre-isr W register contents
        retfie                   ; return from interrupt


--------------------
УЭР
Go to the top of the page
 
+Quote Post
ddd-ekb
сообщение Oct 29 2015, 13:03
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-15
Пользователь №: 89 059



Цитата(evc @ Oct 29 2015, 17:41) *
именно адресация страниц портится у вас, в обработчике прерываний.

да и чёрт с ней, с этой адресацией, пусть хоть вся перепортится
в данной программе на каждом проходе принудительно устанавливается состояние всей периферии
затем просто берутся значения из регистров минут и часов, перекодируются в сегментный вид и выплёвываются в порты
так что все сбои могут привести только к сбою индикации на от силы 50-100 миллисекунд
вобщем пока пусть проверяется, первые полчаса прошли нормально
Go to the top of the page
 
+Quote Post
evc
сообщение Oct 29 2015, 13:11
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(ddd-ekb @ Oct 29 2015, 16:03) *
да и чёрт с ней, с этой адресацией, пусть хоть вся перепортится

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


--------------------
УЭР
Go to the top of the page
 
+Quote Post
ddd-ekb
сообщение Oct 29 2015, 15:39
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-15
Пользователь №: 89 059



Цитата(evc @ Oct 29 2015, 18:11) *
из-за этого получаете несанкционированные входы в обработчик прерываний ... но как скажете.

на сейчас окончательно утряс причину возникновения повторного прерывания сразу при выходе из обработчика
несанкционированных входов нет sm.gif
в основной программе есть периодическая инициализация регистра PIE1
MOVLW 1
MOVWF PIE1
на всякий случай, вместе с остальными TRISами и ADCONами
вдруг чего сбойнёт от помех и некому будет питание передёрнуть, а вачдог не сработает, т.к. программа то бегает по кругу, просто периферия переинициализировалась неверно из-за таджика-сварщика sm.gif
раз уж методом тыка установлено влияние страниц, то логично предположить что обработчик и правда не восстанавливает страницу, тогда получается что при попадании момента прерывания между выбором страницы 1 и записью 1 в PIE, эта 1 отправляется в зеркальный относительно PIE регистр PIR и устанавливает этот самый флаг, который сразу же опять и вызывает прерывание
абсолютно понятно и логично, ура sm.gif
теперь осталось понять в каком месте обработчика портится страница, т.е. бит 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
Go to the top of the page
 
+Quote Post
evc
сообщение Oct 29 2015, 16:28
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266



Цитата(ddd-ekb @ Oct 29 2015, 19:39) *
три тысячи чертей

Нет, только один - PCLATH.
Я наверное, старею, поэтому все таки вам отвечу: в STATUSе хранятся биты для определения страницы оперативной памяти.
В PCLATHе хранятся биты для определения страницы программной памяти.
Еще в первом посте на этой странице я вам привел код для обработчика который сохраняет и то и другое, чего в вашем коде нет.
Но, к сожалению, выходит правда - очевидные вещи, самые малозаметные - вы вцепились в этот STATUS и в упор не замечаете PCLATH.


--------------------
УЭР
Go to the top of the page
 
+Quote Post
ddd-ekb
сообщение Oct 29 2015, 16:36
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-15
Пользователь №: 89 059



Цитата(evc @ Oct 29 2015, 21:28) *
Нет, только один - PCLATH.
Я наверное, старею, поэтому все таки вам отвечу: в STATUSе хранятся биты для определения страницы оперативной памяти.
В PCLATHе хранятся биты для определения страницы программной памяти.
Еще в первом посте на этой странице я вам привел код для обработчика который сохраняет и то и другое, чего в вашем коде нет.
Но, к сожалению, выходит правда - очевидные вещи, самые малозаметные - вы вцепились в этот STATUS и в упор не замечаете PCLATH.

ура, всё, раскурил до конца biggrin.gif
PCLATH не при делах, как и программная память
проблема как и было в итоге определено в неверном сохранении обработчиком номера страницы регистров
причина в том, что у 73\74 нет общеадресуемой памяти, в отличии от 76\77, а даташит общий
вот и не отразил сходу этот момент

усё, спасибо за попинывание и всякие мысли, тему закрыть, автора в бан santa2.gif
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 05:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016