Прерывания по RB.0: RB.4...RB.7
|
|
Broka |
Дата: Чт, 07.01.2010, 18:03 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Помогите пожалуйста разобраться с прерываниями: В PicBasicPro есть такой оператор ON INTERRUPT, написал я программу ,используется RB.0 и RB.4( в прерываниях) Вот только как их мне разделить,что бы например когда произошло прерывание по RB.0 , обработка прерывыния происходило на своей метки в программе, а когда произошло по RB.4 на своей Помогите разобраться, прочитал в мануале,там про это что то не написано,( отдельно всё отлично работает,вместе неполучается) В смысле включаю либо тот порт,а тот выключаю, либо наоборот
Наладчик КИП и А
Сообщение отредактировал
Broka - Чт, 07.01.2010, 18:22
|
|
|
|
ivan_fd |
Дата: Пт, 08.01.2010, 14:46 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Проверяйте биты регистра INTCON.
|
|
|
|
brown |
Дата: Пт, 08.01.2010, 17:23 | Сообщение # 3 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Когда- то тоже пытался использовать 2 прерывания, при чем одно в теле другого. Не получилось! Выкрутился как Quote (ivan_fd) Проверяйте биты регистра INTCON
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
lvitat |
Дата: Пт, 08.01.2010, 18:25 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
35
Замечания:
±
На сайте с 13.06.2008
Статус:
Offline
|
И незабудь после проверки регистров их сбросить
Я не волшебник, я только учусь ...
|
|
|
|
ADMIN |
Дата: Пт, 08.01.2010, 21:46 | Сообщение # 5 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
В прерывании проверяй либо RBIF(RB4..RB7) либо INTF(RB0). В если тот установлен, то ставь свой флаг, если другой, то другой флаг. По выходу из пп обработки прерывания обрабатывай каждый флаг. Что не получается то?
|
|
|
|
Broka |
Дата: Сб, 09.01.2010, 01:43 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Неполучается то, что при прерывании например по RB.0 всё просходит как положенно, переходит на свою метку. А если произошло прерывание по RB.4......RB.7 всё равно прыгает на эту же метку обработки прерывания, команда то одна: ON INTERRUPT,вот и немогу сделать так ,что бы всё лезло по своим программным меткам В смысле меткам по обработки прерываний. Например пишу ON INTERRUPT GOTO Pgsv, что по RB.0 , что по RB.4 всё туда лезит. В программе 2 метки обработки прерывания.
Наладчик КИП и А
Сообщение отредактировал
Broka - Сб, 09.01.2010, 01:51
|
|
|
|
ADMIN |
Дата: Сб, 09.01.2010, 06:59 | Сообщение # 7 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Так по команде on interrupt все туда и полезет. Это вектор прерывания по адресу 4. В этой подпрограмме и следует проверять, каким событием вызвано прерывание, читай мой пост выше. В программе всегда одна ПП прерывания. А можем ли мы узреть кусок кода, отвечающий за прерывания?
|
|
|
|
Broka |
Дата: Сб, 09.01.2010, 23:54 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 30.09.2009
Статус:
Offline
|
Огромное Вам Спасибо ребята, там оказывается всё просто ( где надо поставить запрет,где надо включить,вот оказывается в чём дело то ) Спасибо! Спасибо! Спасибо! Не слушал я Вас с самого начала,впал в панику так сказать, а всё просто!
Наладчик КИП и А
Сообщение отредактировал
Broka - Сб, 09.01.2010, 23:56
|
|
|
|
Fenix1111 |
Дата: Сб, 03.07.2010, 18:00 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
1
Замечания:
±
На сайте с 04.04.2010
Статус:
Offline
|
Мне тоже очень бы хотелось разобратся с прерываниями по нескольким внешним событиям. Смысл выше изолженного я понял. После какого либо прерывания в подпрограмме нужно сначала проверить по какому поводу возникло прерывание а потом уже сделать обработку именно этого прерывания. И всеже незатруднит ли кого нибудь выложить наглядный пример по этому поводу.
|
|
|
|
k2mozganet |
Дата: Вс, 12.12.2010, 23:13 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
23
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Доброго времени суток.... ребята, а вы бы не могли выложить кусок кода обработки прерывания по разным портам RB.4......RB.7 , а то я что-то совсем не понял, как проверить каким событием было вызвано прерывание?????Буду очень благодарен:)))
|
|
|
|
Broka |
Дата: Пн, 13.12.2010, 13:01 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
253
Замечания:
±
На сайте с 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
|
|
|
|