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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Прерывания по RB.0: RB.4...RB.7
Broka Дата: Чт, 07.01.2010, 18:03  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Помогите пожалуйста разобраться с прерываниями:
В PicBasicPro есть такой оператор ON INTERRUPT, написал я программу ,используется RB.0 и RB.4( в прерываниях)
Вот только как их мне разделить,что бы например когда произошло прерывание по RB.0 , обработка прерывыния
происходило на своей метки в программе, а когда произошло по RB.4 на своей
Помогите разобраться, прочитал в мануале,там про это что то не написано,( отдельно всё отлично работает,вместе неполучается) В смысле включаю либо тот порт,а тот выключаю, либо наоборот


Наладчик КИП и А
Сообщение отредактировал Broka - Чт, 07.01.2010, 18:22
ЯНДЕКС Дата: 07.01.2010
ivan_fd Дата: Пт, 08.01.2010, 14:46  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Проверяйте биты регистра INTCON.
brown Дата: Пт, 08.01.2010, 17:23  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Когда- то тоже пытался использовать 2 прерывания, при чем одно в теле другого. Не получилось! Выкрутился как
Quote (ivan_fd)
Проверяйте биты регистра INTCON


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
lvitat Дата: Пт, 08.01.2010, 18:25  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 13.06.2008

Статус: Offline

И незабудь после проверки регистров их сбросить

Я не волшебник, я только учусь ...
ADMIN Дата: Пт, 08.01.2010, 21:46  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

В прерывании проверяй либо RBIF(RB4..RB7) либо INTF(RB0). В если тот установлен, то ставь свой флаг, если другой, то другой флаг. По выходу из пп обработки прерывания обрабатывай каждый флаг. Что не получается то?
Broka Дата: Сб, 09.01.2010, 01:43  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Неполучается то, что при прерывании например по RB.0 всё просходит как положенно, переходит на свою метку.
А если произошло прерывание по RB.4......RB.7 всё равно прыгает на эту же метку обработки прерывания,
команда то одна: ON INTERRUPT,вот и немогу сделать так ,что бы всё лезло по своим программным меткам
В смысле меткам по обработки прерываний. cool
Например пишу ON INTERRUPT GOTO Pgsv, что по RB.0 , что по RB.4 всё туда лезит.
В программе 2 метки обработки прерывания.


Наладчик КИП и А
Сообщение отредактировал Broka - Сб, 09.01.2010, 01:51
ADMIN Дата: Сб, 09.01.2010, 06:59  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Так по команде on interrupt все туда и полезет. Это вектор прерывания по адресу 4. В этой подпрограмме и следует проверять, каким событием вызвано прерывание, читай мой пост выше. В программе всегда одна ПП прерывания.
А можем ли мы узреть кусок кода, отвечающий за прерывания?
Broka Дата: Сб, 09.01.2010, 23:54  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Огромное Вам Спасибо ребята, там оказывается всё просто ( где надо поставить запрет,где надо включить,вот оказывается в чём дело то ) Спасибо! Спасибо! Спасибо! happy
Не слушал я Вас с самого начала,впал в панику так сказать, а всё просто!


Наладчик КИП и А
Сообщение отредактировал Broka - Сб, 09.01.2010, 23:56
Fenix1111 Дата: Сб, 03.07.2010, 18:00  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Новенький
Сообщений: 1
Репутация: 0   ±
Замечания:   ±
На сайте с 04.04.2010

Статус: Offline

Мне тоже очень бы хотелось разобратся с прерываниями по нескольким внешним событиям. Смысл выше изолженного я понял. После какого либо прерывания в подпрограмме нужно сначала проверить по какому поводу возникло прерывание а потом уже сделать обработку именно этого прерывания. И всеже незатруднит ли кого нибудь выложить наглядный пример по этому поводу.
k2mozganet Дата: Вс, 12.12.2010, 23:13  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 23
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Доброго времени суток.... ребята, а вы бы не могли выложить кусок кода обработки прерывания по разным портам RB.4......RB.7 , а то я что-то совсем не понял, как проверить каким событием было вызвано прерывание?????Буду очень благодарен:)))
Broka Дата: Пн, 13.12.2010, 13:01  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 253
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

k2mozganet, Посмотри, я для своей машины доводчики стёкол делал, написал для PIC16f628a программу, использовал там прерывание, может сгодиться тебе для разборки полётов?
;--------------------- Описание проекта ---------------------------
;Проект : Автоматический доводчик стёкол для автомобилей ВАЗ
;Автор : Бросалин Фёдор Александрович
;Версия : 1.0.0 от 07.11.2010 ( Версия для передних 2стеклоподьёмников)
;-------------------------- Общие настройки --------------------------
@ DEVICE PIC16F628A, INTRC_OSC, WDT_ON, MCLR_ON, PWRT_ON, LVP_OFF
define BUTTON_PAUSE 20 ; Защита от дребезга контактов
;---------------------------------------------------------------------
;------------------------Регистры специального назначения------------
;-------------------------- INTCON -----------------------------------

Symbol INTF = INTCON.1 ; Флаг внешнего прерывания по PORTB.0(INT)
Symbol INTE = INTCON.4 ; Бит разрешения прерывания по PORTB.0(INT)
Symbol RBIF = INTCON.0 ; Флаг внешнего прерывания по PORTB.4-PORTB.7
Symbol RBIE = INTCON.3 ; Бит разрешения прерывания по PORTB.4-PORTB.7
Symbol GIE = INTCON.7 ; Бит глобального разрешения прерываний
;------------------- Определение символов --------------------------
SYMBOL DV1 = PORTA.0 ; Порт А.0 выход двигателя № 1
SYMBOL DV2 = PORTA.1 ; Порт А.1 выход двигателя № 2
symbol DV3 = PORTA.2 ; Порт А.2 выход двигвтеля № 3
symbol DV4 = PORTA.3 ; Порт А.3 выход двигателя № 4
symbol SVET = PORTB.2 ; Выход для включения освещения в салоне (Опция)
SYMBOL SIGN = PORTB.0 ; Вход от сигнализации
SYMBOL TOC = PORTB.1 ; Вход от токового датчика
;---------------------Конфигурация портов----------------------------
TRISA = %11110000 ; Конфигурация Порта А
PORTA = %00000000 ; При включении Порт А = 0
TRISB = %00000011 ; Конфигурация Порта В
PORTB.7 = 0
PORTB.2 = 0
PORTB.3 = 0
PORTB.4 = 0
OPTION_REG.7 = 1 ; Подтягивающие резисторы включить
OPTION_REG.6 = 0 ; Срабатывание по переднему фронту сигнала
;------------------- Определение переменных -------------------------
J VAR BYTE ; Байтовая переменая
INTE = 1 ; Бит разрешения прерывания по ПОРТ В.0
GIE = 1
;--------------------Основная программа------------------------------
Main: ; Начало программы
INTF = 0 ; Флаг внешнего прерывания по ПОРТ В.0
enable ; Разрешение прерывания
on interrupt goto Zakr1 ; При прерывании перейти на метку Zakr1
low SVET ; Выключить Порт А.2
low DV1 ; Выключить Порт А.0
low DV2 ; Выключить Порт А.1
pause 10 ; Пауза 0,1сек
goto Main ; Вернуться в начало программы
disable ; Запрет прерываний
Zakr1: ; Метка закрытия
high DV1
for J = 0 to 200 ; Начало Цикла отсчёта времени работы Порт А.0
pause 100 ; Пауза 20 ms
if TOC = 0 then DV1 = 0:goto Zakr2 ; Блин... надоело писать ,всё и так понятно!
next J
low DV1
goto Zakr2
Zakr2:
pause 500
high DV2
for J = 0 to 200
pause 100
if TOC = 0 then DV2 = 0:INTF = 0:resume
NEXT j
low DV2
intf = 0
resume
end
Тут правда прерывание только по PORTB.0 , ну в принципе какая разница, разберёшься!


Наладчик КИП и А
Сообщение отредактировал Broka - Пн, 13.12.2010, 13:07
ЯНДЕКС Дата: 13.12.2010
  • Страница 1 из 1
  • 1
Поиск: