Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Подпрограмма прерывание выполняется постоянно
Подпрограмма прерывание выполняется постоянно
sandro37 Дата: Пн, 06.02.2012, 13:00  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 21
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

камень 16f628a
Пытаюсь вникнуть в работу прерываний, в сети очень мало информации с примерами на PBP. Написал следующий код, в задумке он должен работать следующим образом: при запуске контроллера начинает мигать светодиод на выводе A2, а по нажатию кнопки на выводе B0, должен сменить свое состояние светодиод подключенный к выводу A3.
Code
TRISA = %00000000
PORTA = %00000000
TRISB = %11111111
PORTB = %00000000
Option_Reg.7=0
ON INTERRUPT GOTO myint ' При возникновении прерывания перейти на метку -  myint
INTCON = %10010000 ' Включить прерывание по выводу RB0    
main:
PORTA.2 = 1
Pause 500
PORTA.2 = 0     
Pause 500
goto main
DISABLE  ' Отключить обработку прерываний  
myint:
toggle PORTA.3  ' Включить/выключить LED при возникновении прерывания  
RESUME      ' Вернуться в основную программу  
ENABLE

но в Proteus происходит следующее: при запуске контроллера начинает мигать светодиод на выводе A2, а по нажатию кнопки на выводе B0, начинает мигать светодиод подключенный к выводу A3, как будто подпрограмма выполняется при каждом проходе основной программы. Где я не прав?
ЯНДЕКС Дата: 06.02.2012
ivan_fd Дата: Пн, 06.02.2012, 14:18  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 911
Репутация: 50   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Я думаю, что Вы забыли сбросить флаг прерывания. Почитайте о прерывании ПРЕРЫВАНИЕ

Меня все время преследуют умные мысли...но я быстрее!!!
sandro37 Дата: Пн, 06.02.2012, 14:56  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 21
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

Да, верно, вот так все заработало
Code

TRISA = %00000000
PORTA = %00000000
TRISB = %11111111
PORTB = %00000000
Option_Reg.7=0
ON INTERRUPT GOTO myint ' При возникновении прерывания перейти на метку -  myint
INTCON = %10010000 ' Включить прерывание по выводу RB0       
main:
PORTA.2 = 1
Pause 500
PORTA.2 = 0        
Pause 500
goto main
DISABLE  ' Отключить обработку прерываний     
myint:
toggle PORTA.3  ' Включить/выключить LED при возникновении прерывания    
INTCON = %10010000 ' сброс флага прерывания    
RESUME      ' Вернуться в основную программу     
ENABLE

Сообщение отредактировал sandro37 - Пн, 06.02.2012, 14:58
Форум Picbasic.ru » Программирование МК » PicBasicPro » Подпрограмма прерывание выполняется постоянно
Страница 1 из 11
Поиск: