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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: ivan_fd  
Проблемка с прерыванием...
Uncle_Dizel Дата: Пт, 18.11.2011, 00:10  |                                                                                                                Сообщение # 16
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

Green var GPIO.0
Blue var GPIO.1
REd var GPIO.2

TRISIO=%111000
GPIO = %000000 'очистим от мусора

OPTION_REG = %00000111 'Регистр настроек
wpu = %00110000 'Регистор включение подтяжки резисторов
INTCON = %10001000 'Регистр настроек прерывания
IOCB = %00110000 'Регистр индивидуальной настройки прерывания портов
clear
pause 500
On Interrupt GoTo one

start:
Blue = 0
Green = 0
Red= 0
goto start

Disable 'разрешить прерывания
One:
if INTCON.0 = 1 then
REd = 1
pause 1000
INTCON.0 = 0
endif
Resume
Enable

Добавлено (18.11.2011, 00.10.01)
---------------------------------------------
ну вот скажем моя программа, для прерывания по GPIO использую 2 вывода подцепляя на землю, я хочу узнать какой из выводов GPIO.4 или GPIO.5 сработало прерывание
brown, в INTCON я могу узнать какое именно было прерывание, а порт какой сработал?

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

Статус: Offline

Так в теле прерывания считайте порт.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Uncle_Dizel Дата: Пт, 18.11.2011, 00:36  |                                                                                                                Сообщение # 18
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

то есть
Disable 'разрешить прерывания
One:
if INTCON.0 = 1 then

If GPIO.4 = 0 then
goto label_1
endif

If GPIO.5 = 0 then
goto label_2
endif

endif

NTCON.0 = 0
endif
Resume
Enable
brown Дата: Сб, 19.11.2011, 00:13  |                                                                                                                Сообщение # 19
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Да, как-то так. Только не надо проверять флаг в прерывании - его нужно сбрасывать при выходе из него. Так же смотрите, чтобы goto label не было выходом из прерывания.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Uncle_Dizel Дата: Сб, 19.11.2011, 00:55  |                                                                                                                Сообщение # 20
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

вот по поводу выхода из прерывания Так же смотрите, чтобы goto label не было выходом из прерывания. а что будет если оно будет выходом?
brown Дата: Сб, 19.11.2011, 01:31  |                                                                                                                Сообщение # 21
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Прога будет работать не понятно как или ... зависнет. Что- то было уже на форуме , лень искать.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
ЯНДЕКС Дата: 19.11.2011
Uncle_Dizel Дата: Вт, 29.11.2011, 22:02  |                                                                                                                Сообщение # 22
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

а как определить какое прерывание приоритетнее????

Добавлено (29.11.2011, 22.02.27)
---------------------------------------------
я так понимаю алгоритм прерывания
1 происходит прерывание
2 переходим в подпрограмму прерывания
3 определяем какое прерывание было (IF INCON.6 then.....IF INCON.5 и так далее )
4 тогда приобретене будет то прерывание которое мы поставим рание условие?

ivan_fd Дата: Ср, 30.11.2011, 10:35  |                                                                                                                Сообщение # 23
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Приоритетные прерывания есть в 18-ых пиках, в ниже нету.

В Вашем случаи
Quote
(IF INCON.6 then.....IF INCON.5 и так далее )
это не приоритет.
Здесь каждая обработка прерывания будет виполнятся в свое время.

Сообщение отредактировал ivan_fd - Ср, 30.11.2011, 12:48
Uncle_Dizel Дата: Ср, 30.11.2011, 14:19  |                                                                                                                Сообщение # 24
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

Здесь каждая обработка прерывания будет виполнятся в свое время. ну а если они все разом произошли?
ivan_fd Дата: Ср, 30.11.2011, 15:01  |                                                                                                                Сообщение # 25
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну, а если вдруг и такое произойдет, то сначала обработается код, который стоит первым. И т. д...

Но это не есть приоритет. В приоритетной системе прерываний, прерывание с высшим приоритетом, прервет процедуру прерывания с низшим.
ADMIN Дата: Ср, 30.11.2011, 15:46  |                                                                                                                Сообщение # 26
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Если произойдет любое разрешенное прерывание, то программа перейдет в ПП обработки. В этой ПП можно самостоятельно задать приоритет, проверив в определенной последовательности флаги каждого прерывания, фигурирующего в программе. Это относится, в основном, к младшим семействам. В приоритетной (PIC18 и т.д) системе прерываний под обработку прерывания определенного приоритета выделено место в программе. Если одно прерывание имеет более высший приоритет, чем другое, при условии их одновременного возникновения, то программа переходит на обработку этого прерывания в первую очередь и именно на свое место в программе.
доцент2 Дата: Пн, 09.01.2012, 07:46  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 293
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

написал програмку с динамической индикацией на LED. использовал прерывание по переполнению таймера TMR0.
проблемка в том, что в протеусе программа работает около 2,5...3 секунд и виснет. что это может быть: глюк протеуса или неправильное "оформление" прерывания?
retas Дата: Пн, 09.01.2012, 17:15  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

доцент2!
Так Протеус вам и должен показать, посмотрите на собаку, стек. А быть может Протеус сильно нагружает процесор компа -
тогда придётся отлаживать частями либо в реале.
Удачи.
ADMIN Дата: Пн, 09.01.2012, 17:52  |                                                                                                                Сообщение # 29
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote (retas)
написал програмку с динамической индикацией на LED. использовал прерывание по переполнению таймера TMR0. проблемка в том, что в протеусе программа работает около 2,5...3 секунд и виснет. что это может быть: глюк протеуса или неправильное "оформление" прерывания?

Больше похоже на "неправильное "оформление" прерывания"
доцент2 Дата: Пн, 09.01.2012, 19:43  |                                                                                                                Сообщение # 30
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 293
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

может глянете что не так?
Прикрепления: __2.dsn (88.8 Kb) · _0-40V.pbp (6.4 Kb)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: