Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Прерывания от одного компаратора PIC 16F628
kurnosenkoc Дата: Вс, 09.02.2014, 18:16  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 19.12.2013

Статус: Offline

Начал осваивать  Proton вроде все понятно,но уперся в прерывания от компаратора.
Хотел сделать защиту по току используя один внутренний компаратор  со встроенным источником опорного напряжения.
При превышении напряжения на входе RA1 выше опорного  программа должна перейти в обработчик,но у меня она сразу в обработчике, и чтобы я не делал ничего не получается.
На схеме кнопка подает напряжение на RA1.
Если программа работает ,то на выходе RB3 импульсы.
В обработчике импульсы на RB7.
Подскажите пожалуйста ,где я накосячил ?
Прикрепления: IN_UPT.dsn (73.1 Kb) · IN_UPT.asm (14.6 Kb) · IN_UPT.bas (2.0 Kb)
ЯНДЕКС Дата: 09.02.2014
mnbv Дата: Вс, 09.02.2014, 19:10  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 2   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

В Picsimulatoride, которому у меня нет оснований не доверять, ваша программа работает.
kurnosenkoc Дата: Вс, 09.02.2014, 19:17  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 19.12.2013

Статус: Offline

К сожалению я ее не знаю,но  в железе не работает ,где-то ошибка,но я ее не могу найти.
xvovanx Дата: Вс, 09.02.2014, 20:01  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 328
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

У вас возможно получается, что после обработчика преравания не происходит возврат куда вы указали - на Context Restore. Попробуйте сначала разместить программу main с возвратом на начало goto start. А обработчик прерываний поставить в конце программы -после  goto start.
Сообщение отредактировал xvovanx - Вс, 09.02.2014, 20:04
kurnosenkoc Дата: Вс, 09.02.2014, 20:23  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 19.12.2013

Статус: Offline

Не знаю ,но мне сейчас не важно ,что делает обработчик пусть даже крутит в обработчике бесконечный цикл.Лишь бы не попадал в обработчик при включении питания, что сейчас и происходит.
ivan_fd Дата: Вс, 09.02.2014, 21:30  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Самое первое, что это такое

Код
GoTo alarm_label
Context Restore  'Возврат из обработчика прерывания

Вы всегда будете переходить на начало прерывания.

Теперь второе.

Вы даташит читали????

Цитата
В подпрограмме обработки прерываний необходимо выполнить следующие действия:
1.  Произвести запись или чтение регистра CMCON для устранения условия несоответствия.
2.  Сбросить флаг CMIF в ‘0’.

Прочитайте регистр CMCON перед включением флага прерывания и сбросьте флаг прерывания от компаратора.
И все будет как надо.

Да и в обработчике прерываний нужно сделать то же самое.

Сообщение отредактировал ivan_fd - Вс, 09.02.2014, 21:31
kurnosenkoc Дата: Вс, 09.02.2014, 22:14  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 19.12.2013

Статус: Offline

Буду искать.
Ну вот и получилось !
При просмотре ассемблированного файла было замечено ,что в листинге ассемблере нет оператора CMCON = CMCON с помощью которого я пытался
привести в соответствие регистр CMCON.
И прописав повторно константу в этот регистр перед сбросом компаратора все заработало.
Спасибо всем помогающим и особая благодарность ivan_fd.
Вот рабочая программа обслуживающая прерывания от компаратора.
Прикрепления: 5483129.bas (2.4 Kb)

Сообщение отредактировал kurnosenkoc - Пн, 10.02.2014, 12:53
  • Страница 1 из 1
  • 1
Поиск: