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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Как работать с прерываниями?
somlich Дата: Вт, 21.04.2009, 11:55  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Вот такой вопрос, у меня нужно постоянно отслеживать изменение с 1 на 0 на 3 портах. Вроде нужно использовать прерывания. Но как их включить? Знаю, что есть оператор on interrup (вроде так, просто на работе нет под рукой picbasic), если я правильно понял, при возникновении любого прерывания происходит переход по данной метке?
ЯНДЕКС Дата: 21.04.2009
demanik Дата: Вт, 21.04.2009, 12:28  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (somlich)
при возникновении любого прерывания происходит переход по данной метке?

Кроме этого еще нужно разрешить нужные прерывания в соответствующих гегистрах. Об нужных прерываниях и их регистрах нужно смотреть в даташит используемого пика.


Попробуй всё и вся... может быть пол...

DIKTATOR Дата: Вт, 21.04.2009, 15:29  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 2   ±
Замечания:   ±
На сайте с 24.07.2008

Статус: Offline

Прерывания занимают много места в МикроКонтроллёре, если нужно просто проверять состояние портов и "одновременно" выполнять простую программу то вот:

TRISB = %00000000
PORTB = %00000000

prwerko1:
IF PORTB.0 = 0 THEN prwerk00
IF PORTB.1 = 0 THEN prwerk01
IF PORTB.2 = 0 THEN prwerk02
'тут ваша короткая программа которая выполняется в месте с проверкой портов
goto prwerko1

prwerk00:
'ваша программа которая выполняется если на выводе PORTB.0 сигнал 0
IF PORTB.0 = 1 THEN prwerko1 'пока на порте не будет сигнал 1 программа будет ждать этот сигнал чтобы перейти к метке prwerko1
goto prwerk00

prwerk01:
'ваша программа которая выполняется если на выводе PORTB.1 сигнал 0
IF PORTB.1 = 1 THEN prwerko1 'пока на порте не будет сигнал 1 программа будет ждать этот сигнал чтобы перейти к метке prwerko1
goto prwerk01

prwerk02:
'ваша программа которая выполняется если на выводе PORTB.2 сигнал 0
IF PORTB.2 = 1 THEN prwerko1 'пока на порте не будет сигнал 1 программа будет ждать этот сигнал чтобы перейти к метке prwerko1
goto prwerk02

Сам я прерываниями никогда не пользовался, пусть ктонибудь напишет программу с прерыванием возможно она лучше этой что я написал wink ))


Используйте симулятор ПРОТУЕС !!! Реальная вещь!!
Я снова тут, но не всегда свободен.
demanik Дата: Вт, 21.04.2009, 23:48  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (DIKTATOR)
пусть ктонибудь напишет программу с прерыванием

Можно чтонибудь сварганить. Только нужно знать марку пика.


Попробуй всё и вся... может быть пол...

holyuser Дата: Ср, 22.04.2009, 01:56  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Quote (demanik)
Только нужно знать марку пика.

и что он должен делать...
DIKTATOR Дата: Ср, 22.04.2009, 13:33  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 2   ±
Замечания:   ±
На сайте с 24.07.2008

Статус: Offline

TRISB = %00000000
PORTB = %00000000

prwerko1:
IF PORTB.0 = 0 THEN prwerk00
IF PORTB.1 = 0 THEN prwerk01
IF PORTB.2 = 0 THEN prwerk02
'тут ваша короткая программа которая выполняется в месте с проверкой портов
goto prwerko1

prwerk00:
'ваша программа которая выполняется если на выводе PORTB.0 сигнал 0
prwerk000:
IF PORTB.0 = 1 THEN prwerko1 'пока на порте не будет сигнал 1 программа будет ждать этот сигнал чтобы перейти к метке prwerko1
goto prwerk000

prwerk01:
'ваша программа которая выполняется если на выводе PORTB.1 сигнал 0
prwerk011:
IF PORTB.1 = 1 THEN prwerko1 'пока на порте не будет сигнал 1 программа будет ждать этот сигнал чтобы перейти к метке prwerko1
goto prwerk011

prwerk02:
'ваша программа которая выполняется если на выводе PORTB.2 сигнал 0
prwerk022:
IF PORTB.2 = 1 THEN prwerko1 'пока на порте не будет сигнал 1 программа будет ждать этот сигнал чтобы перейти к метке prwerko1
goto prwerk022

вот чучуть изменил, чтобы ваша программа не повторялась когда на выводе долго будет сигнал 0


Используйте симулятор ПРОТУЕС !!! Реальная вещь!!
Я снова тут, но не всегда свободен.
somlich Дата: Пт, 24.04.2009, 13:43  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Недостаток программы на мой взгляд, что пока 0 то больше ничего не проверяется. wink
У меня так все и реализовано было. Чуть по другому, но смысл в принципе тот-же самый. Сейчас все что хотел реализовал с помощью таймера, в нем проверяю состояние портов, если что, то выполняю подпрограмки. Этим кстати решается проблема програмных пауз, приходится использовать PAUSES вместо PAUSE в цикле.
Всем спосибо за помощь smile
DIKTATOR Дата: Пт, 24.04.2009, 14:07  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 2   ±
Замечания:   ±
На сайте с 24.07.2008

Статус: Offline

Ну если использовать несложную проверку то вот пример )) очень быстро проверка будет ))
Если у вас сигналы 0 подающиеся в порт буду приходить длительностью до 20 pause то можно и посложнее программы делать, ведь она быстро выполнится, если считать что 1 операция 200наносек. Другое дело если сигнал 0 в порт будет длительностью до 10 pauseus.
prwerk00:
PORTB.3 toggle
prwerk000:
IF PORTB.0 = 1 THEN prwerko1
perttt = perttt + 1
IF perttt = 120 THEN permetochka
goto prwerk000

permetochka:
PORTB.3 toggle
perttt = 0
goto prwerk000

Чото про прерывания никто ничего не пишет, наверно не знают )))).


Используйте симулятор ПРОТУЕС !!! Реальная вещь!!
Я снова тут, но не всегда свободен.

Сообщение отредактировал DIKTATOR - Пт, 24.04.2009, 15:52
demanik Дата: Пт, 24.04.2009, 23:52  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (somlich)
Недостаток программы на мой взгляд, что пока 0 то больше ничего не проверяется

для чего мучать народ. Детальнее опишите техзадание (если не секрет или ком. тайна) и марку пика в который Вы хотите запихнуть прогу может предложим чтонибудь по конкретнее.


Попробуй всё и вся... может быть пол...

  • Страница 1 из 1
  • 1
Поиск: