Форум » Для начинающих. » Прерывания в PIC16F877A и флаг RBIF регистра INTCON » Ответить

Прерывания в PIC16F877A и флаг RBIF регистра INTCON

Habble: Доброе утро! Скажите пожалуйста, почему в подпрограмме обработки прерываний в конце ее исполнения я не могу сбросить бит RBIF в ноль? Проверял в Протеусе - не сбрасывается, в железе тоже, тем самым зацикливаясь в обработке прерывания навсегда. По исполнению команды RETFIE программа прерываний не заканчивается, а начинается по новому кольцу. [quote] ;=================================================================================================================================== ;==========================НАЧАЛО ПП ПРЕРЫВАНИЯ ОТ ПОРТА В========================================== ;=================================================================================================== ;======================================================================================= ORG 4 ; Стандартные процедури сохранения данных W и STATUS MOVWF W_TEMP ; SWAPF STATUS,W ; CLRF STATUS ; MOVWF STATUS_TEMP ; MOVF PCLATH,W MOVWF PCLATH_TEMP ; ; Код обработки прерываний BSF Ulovka,0 ; Конец кода обработки прерываний, возобновлениеW и STATUS и выход по команде RETFIE MOVF PCLATH_TEMP,W ; MOVWF PCLATH ; SWAPF STATUS_TEMP,W ; ; MOVWF STATUS ; SWAPF W_TEMP,F ; SWAPF W_TEMP,W ; BCF INTCON,0 ; ВОТ ЭТА СРОКА НЕ СБРАСЫВАЕТ БИТ RBIF В НОЛЬ!!! RETFIE ; ЭТА СТРОКА НЕ ВЫВОДИТ ИЗ ПРЕРЫВАНИЯ, ПОТОМУ, ЧТО RBIF=1, ЭТО ; ЗАСТАВЛЯЕТ ПРОГРАММУ ПРЕРЫВАНИЯ ИСПОЛНЯТСЯ СНОВА, БЕСКОНЕЧНО! ;================================================================================================= ;==========================КОНЕЦ ПП ПРЕРЫВАНИЙ ОТ ПОРТА В================================================ ;======================================================================================================================= ;=================================================================================================================================== [/quote] ................ ............... Knopki clrwdt movlw b'10001000' movwf INTCON CLRF PORTC ; CLRF CONTROL_NIMBER CLRF CONTROL_OPROS CLRF Ulovka ................... ..................

Ответов - 40

Alex: Залейте весь проект, вместе с проектом протеуса. Код не весь, а гадать на кофейной гуще никто не будет.... У Вас возможно другое событие циклит обработчик.

Habble: http://zalil.ru/30765723 Там прерывание должно наступать по изменению уровня на порте В. В данном случае просто нажать на кнопку возле "таблеток" Ibutton.

Алексей: Habble пишет: ее исполнения я не могу сбросить бит RBIF в ноль? А даташит внимательно читали??? Почитайте еще раз, там написано примерно следующее, перед тем как сбросить флаг, необходимо прочитать порт movf PORTB,W... Ничего больше делать не нужно. вставьте эту команду перед сбросом флага или в начале прерывания и будет вам счастье...


Alex: Даташит нужно повнимательнее читать. Перед сбросом флага нужно выполнить операцию с портом В. ----------------------------------------- MOVF PORTB , W BCF INTCON, 0 ----------------------------------------- http://zalil.ru/30765921 PS: Лёха опередил

Habble: Даташит читал, но не нашел ничего такого (глаза ночью слипались). Спасибо, буду дальше ваять....

Alex: Странно, эти 2 пункта трудно не заметить.

Habble: Кто может объяснить, почему контроллер не сбрасывается, когда потенциал +5V с вывода 1 замыкать на общий? На этот 1 вывод напряжение питания +5V поступает через резистор 10кОм, параллельно выводу включен конденсатор емкостью 0,01 мкФ (фильтр).

SanSanich: У меня от +5В через 4.7к на 1 ножку, впаралель которой ёмкость 1мкф. Всё работает прекрасно.

Habble: SanSanich пишет: У меня от +5В через 4.7к на 1 ножку, впаралель которой ёмкость 1мкф. Всё работает прекрасно. Хмм, интересно, ему что, тока не хватает? Вечером попробую, отпишусь, забавные у меня с ним проблемы ))) так сказать детские )))

SanSanich: Странно что он не сбрасывается! Еслиб не хватало тока, он бы по помехи наоборот переодически сам бы сбрасывался. А тут обратное. Работает, но по 0 не сбрасывается. Если есть другой, проверьте. Может с МК что то. Эта ножка для программирования ещё используется.

Alex: Habble пишет: Кто может объяснить, почему контроллер не сбрасывается Бит конфигурации MCLR не зашит :)

SanSanich: Бит конфигурации лучше расписывать типа такого __CONFIG _CP_ALL & _WDT_OFF & _HS_OSC & _PWRTE_ON & _LVP_OFF & _WRT_ENABLE_OFF & _BODEN_ON & _DEBUG_OFF тогда будет ясно

Habble: Alex пишет: Бит конфигурации MCLR не зашит :) Такой бит конфигурации я видел в PIC16F628A, а в PIC16F877A я такого бита не вижу, просветите пожалуйста, а то я в недоумении. SanSanich пишет: Эта ножка для программирования ещё используется. Да, я его использую для программирования непосредственно в плате макета. Вообще, даже если я оставлю 1-й вывод в воздухе - работает, дам ему +5В - работает, дам логический ноль - все равно работает! Прилагаю фото живого устройства, резистор там стоит 2.2кОм, конденсатор 1мкФ, замыкание на корпус не вызывает сброса, почему? Не могу понять, ведь в протеусе сброс работает, даже при сопротивлении резистора в 10кОм.

SanSanich: Попробуйте бит конфигурации 3F75

Alex: Habble пишет: а в PIC16F877A я такого бита не вижу, просветите пожалуйста, а то я в недоумении.Я кстати тоже. Его действительно в 877-ом нет. Эта нога не может быть использована как порт ввода/вывода, по этому сброс железно привязан к этой ноге.

Bigor: В 877-ом этот вывод выполняет только две функции MCLR и VPP и всё: "Master Clear (Reset) input or programming voltage input. This pin is an active low RESET to the device".

Habble: SanSanich пишет: Попробуйте бит конфигурации 3F75 Без изменений, не хочет он сбрасывается, я в шоке!

SanSanich: По ощущениям, это не программная, а аппаратная ошибка. Попробуйте другой МК, если имеется. У меня с точностью наоборот, пока не увеличил ёмкость, иногда сбрасывался по импульсной помехе.

Habble: SanSanich пишет: По ощущениям, это не программная, а аппаратная ошибка. Попробуйте другой МК, если имеется. У меня с точностью наоборот, пока не увеличил ёмкость, иногда сбрасывался по импульсной помехе. Под рукой нету другого такого контроллера. Придется искать, заказать, пока спасибо ВАМ ВСЕМ.

Habble: Приехали мне два микроконтроллера PIC16F877A, оба уже рабочие, на них чуток по другому даже написано название, наверное самый первый просто брак, или китай попался. Наконец то можно продолжать работать.

SanSanich: Люблю яPIC16F877A! Очень надёжны. Они у меня в стабилизаторах напряжения (5-9кВА) работают, годами не выключаясь. Не одного глюка и сбоя, сам в шоке. Надписи, как в двух нижних на фото.

MAZ: А откуда приехали? Скорей всего это не брак. А мелкое жульничество.

Habble: Заказывал тут через знакомого электронщика. Мне нравятся оттуда детали. А бракованный микроконтроллер покупал на радиорынке Караваевы дачи в Киеве, видать не повезло, так как там тоже есть точка продаж микросхем из вышеуказанного сайта (но дорого, с сайта дешевле намного).

Bigor: Несмотря на мое глубочайшее уважение к фирме Имрад, сайт которой привел Habble, и ее шефу Ю. Вакулке, рекомендую ПИКи и индикаторы (LCD) заказывать в киевском филиале днепропетровской "Гаммы". Обычно там дешевле, чем где бы то ни было. Сайт www.microchip.ua. Один недостаток: цен на сайте нет. Надо звонить по тел. (044)223-84-63. Успехов.

Ruslan Lipin: SanSanich пишет: стабилизаторах напряжения (5-9кВА) а можно поподробнее. Чем нагрузка коммутируется?

SanSanich: Ruslan Lipin пишет: а можно поподробнее. Чем нагрузка коммутируется? Симисторами. На любой тип нагрузки, есть аппаратная часть анализа индуктивной нагрузки. Так пошёл МК? Сбрасывается?

Ruslan Lipin: SanSanich пишет: Так пошёл МК? Сбрасывается? Вы про что? симисторы в нуле переключаются? И какую гальваноразвязку применяли?

SanSanich: Habble пишет: Кто может объяснить, почему контроллер не сбрасывается, когда потенциал +5V с вывода 1 замыкать на общий? На этот 1 вывод напряжение питания +5V поступает через резистор 10кОм, параллельно выводу включен конденсатор емкостью 0,01 мкФ (фильтр). Выше был пост, подозрение на МК было, вот и спрашиваю

SanSanich: Ruslan Lipin пишет: симисторы в нуле переключаются? И какую гальваноразвязку применяли? И не только! Это моё детище, в смысле алгоритма работы! Конечно прототип был. Более подробно можно на сайте фирмы, где я работаю посмотреть "ОМЕГА" (хоть это и оффтоп, как админ могу воспользоваться служебным положением?!)

Habble: SanSanich пишет: Так пошёл МК? Сбрасывается? Да, теперь все нормально сбрасывается, и проблема была не только в сбросе, сама EEPROM память давала сбои, когда получил новые, то все стало впорядке. Вот макетка :) Блок управление электромеханическим замком. Доступ по кодах с клавиатуры и с таблеток IButton. http://s004.radikal.ru/i206/1104/c9/d1ffa87b7632.jpg

SanSanich: В общем железо подвело! Бывает, главное истина выяснилась. А для чего сброс нужен был? Выход со слипа кнопками и таблеткой, так понимаю, а первая ножка зачем? Чисто спортивный интерес!

Habble: SanSanich пишет: А для чего сброс нужен был? Выход со слипа кнопками и таблеткой, так понимаю, а первая ножка зачем? Ну как все было...написал программу, в протеусе всё работало, в железе когда проверял, то таблетка которая предварительно была прописана в еепром памяти, переставала распознаваться, думал, что глюк в программе, но как то раз случайно решил сбросить контроллер, а он не сбросился, вот это и насторожило, что проблема может быть в железе, хотя я знаю из разных постов на разных сайтах - пики очень надежные контроллеры. Вот так и получилось, вцепился за сброс, и вот к чему он меня вывел... Теперь каждый контроллер предварительно проверяю на предмет исправности вывод сброса, зашив в его память элементарную программку мигания светодиодом, вот так вот... С этим макетом буду защищаться на сдаче дипломного проекта. http://i074.radikal.ru/1104/3a/c82c11683b4e.jpg http://s008.radikal.ru/i304/1104/58/589d11ab7ceb.jpg http://i046.radikal.ru/1104/2e/e2c7089df334.jpg http://s009.radikal.ru/i309/1104/90/c85f4f4acac9.jpg

SanSanich: Теперь ясно, а то я связи не увидел! Желаем удачи на защите! Если появятся какие идеи, можно в Творческая лаборатория организовать проект. Успехов!

Habble: SanSanich пишет: Желаем удачи на защите! Успехов! Спасибо! SanSanich пишет: Если появятся какие идеи, можно в Творческая лаборатория организовать проект Хорошо, появится хорошая идея, напишу.

Habble: Защитился на 5 баллов! Специальность "Радиоинженер-конструктор-технолог"

Photographer: Поздравляю!

SanSanich: Молодца!!! Успехов и новых идей!

Bigor: Поздравляю! Успехов.

gosenergo81: Вопрос по прерываниям: если произошло прерывание и по вектору мы уходим в ПП прерывания, то программа потом вернется только в ту точку откуда мы ушли в прерывания, или же можно изменить точку возврата?

MAZ: При прерывание, произойдет выполнение текущей команды и запись адреса следующей команды в стек. За тем уход по вектору прерывания выполнение подпрограммы прерывания и возврат по стеку через retfie на тот самый адрес. Не знаю как на более совершенных пиках, но у среднего семейства так. Выход из прерывания на другой адрес не имеет смысла. Т.к. это уже будет не прерывание. если вы не используетесь retfie , то не выйдите из прерывания. Тут предлагали выход по сбросу сторожевого таймера в прерывании. Но это все таки не выход, а сброс по сути. Лучше в прерывании установить флаг события, после выхода из прерывания через некоторое время предусмотреть проверку этого флага и переход на нужную метку.



полная версия страницы