Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/32: Рейтинг темы: голосов - 32, средняя оценка - 4.69
Votk
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
1

Прерывания на портах.

23.02.2011, 22:28. Просмотров 5802. Ответов 15
Метки нет (Все метки)

Здравствуйте. У меня вопрос возможно ли обработка прерывания на каких либо портах по мимо INT0 и INT1? Ну вот например мне нужно завершить цикл когда концевой выключатель, подключенный к порту D3 будет нажат. Т.о. мне надо обрабатывать прерывание по приходу 1 в D3. Подскажите пожалуйста как это осуществить? Если можно кодом асм. (Не судите строго, я только начинаю. :)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 22:28
Ответы с готовыми решениями:

Вызов прерывания в обработке прерывания
В программе,нажатие кнопки вызывает прерывание,в котором оно...

Нужно написать программу на MpLAB. Сравнить числа на портах PortB and PortC
Помогите пожалуйстаа! Нужно написать программу на MpLAB. Сравнить числа на...

Прерывания
Здравствуйте, такая проблема: Контроллер ATMega32, при нажатии на кнопку,...

Прерывания MSP430
Здравствуйте! Написал программу для обмена данными с температурного датчика и...

AT90S8535. Прерывания
Нужно сделать прерывание по сравнению события А таймер счётчик, внешнее...

15
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
23.02.2011, 22:31 2
Если там есть PCINT, то решается прерыванием.

А если нету - тупо в цикле проверять нажата-ли кнопка. Если да - выпрыгивать вон из цикла.
0
Votk
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
23.02.2011, 23:01 3
У меня атмега16 там INT0 на D2, а INT1 на D3 и всё, а мне надо 5 концевиков. Значит надо делать в цикле опрос порта. Т.е. получиться что то вроде этого?
Код
Rjmp D1
Next:
NOP
NOP

D1:         ldi   tmpa,0b00000000
out   DDRD,tmpa
in   tmpa, PORTD
cpi tmpa, 0x10
breq Next
nop
nop
0
OTPYMI
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
23.02.2011, 23:06 4
Если кроме концевиков контроллеру больше делать нечего - пусть в цикле опрашивает.

А если есть чем - тогда я бы "сложил" сигналы с концевиков (либо стандартной логикой, либо немного измочившись с диодами) и сделал так, чтобы по срабатыванию любого концевика выкидывалось прерывание INT0 (или INT1), а оно уже пусть само смотрит, на какой из ножек какой уровень и определяет, какой из концевиков стал причиной прерывания.
0
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
23.02.2011, 23:11 5
На меге16 вроде есть PCINT.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
23.02.2011, 23:12 6
Нету там PCINT...
0
OTPYMI
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
23.02.2011, 23:13 7
Не-а:

http://www.cyberforum.ru/savedimages/2011/02/23/tnee0gmtwdytcsqw.gif
0
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
23.02.2011, 23:16 8
ааа, значит перепутал с 168й
0
Votk
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
23.02.2011, 23:17 9
Цитата Сообщение от OTPINE
Если кроме концевиков контроллеру больше делать нечего - пусть в цикле опрашивает.

А если есть чем - тогда я бы "сложил" сигналы с концевиков (либо стандартной логикой, либо немного измочившись с диодами) и сделал так, чтобы по срабатыванию любого концевика выкидывалось прерывание INT0 (или INT1), а оно уже пусть само смотрит, на какой из ножек какой уровень и определяет, какой из концевиков стал причиной прерывания.
Мне по определенному концевику надо отрубать подачу сигнала на определенный шаговый двигатель. Поэтому мне надо знать конкретно от какого концевика сработало прерывание.Так что мне опрос портов в принципе подходит.
0
OTPYMI
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
23.02.2011, 23:18 10
Ну в твоем случае это будут не прерывания, а просто в самой программе опрос и действие при срабатывании условия. Прерывания здесь использоваться не будут.
0
Votk
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
23.02.2011, 23:25 11
Цитата Сообщение от OTPINE
Ну в твоем случае это будут не прерывания, а просто в самой программе опрос и действие при срабатывании условия. Прерывания здесь использоваться не будут.
Ну да. Сори, оговорился.
0
Votk
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
23.02.2011, 23:37 12
Странно как то в Протеусе повесил на D1 диод и на землю его, на D2 кнопку и запитал, залил в мегу 16 этот код:
Код
.include "m16def.yms"
;----- обозначем регистры--------------------------
.def tmpa       =r17    ;всяко-разно
;----- инициализация --------------------------------------------------

ldi   tmpa,high(ROMEND)       ;указатель стека (старший)
out   SPH,tmpa
ldi   tmpa,low(ROMEND)        ;указатель стека (младший)
out   SPL,tmpa
Rjmp D1
Next:  ldi tmpa, 0b00000000
out portd, tmpa
Rjmp next

D1:         ldi   tmpa,0b00000010
out   DDRD,tmpa
in   r19, PORTD
cpi R19, 0b00000110
breq Next

ldi tmpa, 0b00000010
out portd, tmpa
rjmp D1
И нифига не работает! По нажатию кнопки диод не гаснет! Почему так?
0
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
24.02.2011, 00:24 13
Код
in   r19, PORTD
cpi R19, 0b00000110
а надо
Код
in   r19, PORTD
omdi r19,0b00000100
breq/brne
или проще: sbis, sbic
0
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
24.02.2011, 00:31 14
Вообще весь цикл сводится к этому:
Код
loop:
sbic PIND,2
rjmp yes
cbi PORTD,1
rjmp loop
yes:
sbi PORTD,1
rjmp loop
0
Votk
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
24.02.2011, 00:43 15
А почему как у меня не работает именно в протеусе? Должно ж по идее работать. Ведь в симуляторе AVRStudyo всё работает адекватно.
0
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
24.02.2011, 00:45 16
Хз... Я эти протеусы никогда не любил...
0
24.02.2011, 00:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2011, 00:45

Attiny85 и прерывания
Доброго времени суток! Решил воплотить один из проектов (давних задумок:)), но...

Прерывания (от начинающего)
Здравствуйте! Изучаю программирование для микроконтроллеров Atmega. Возникли...

Прерывания на мк 8051
Привет. Стоит задача разработать программу с использованием таймеров и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru