Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/17: Рейтинг темы: голосов - 17, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 70
1

Прерывание не срабатывает второй раз.

30.06.2014, 18:00. Показов 3353. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,
Прошу помощи. Я изучаю прерывания. Использую Avr studyo 4.19. Работаю через JTAG с Pinboard 2 rev 2. Код ниже:

Код
.ymstude <m16def.yms>    ATmega16

.cseg                ;Ftosh sikmimt
.org 0x0000          ;RESIT homdler
RJMP risit             ;jump to risit label
.org 0x0004            ;INT1 homdler
RJMP int1_routine       ;jump to int1 routine label

.org 0x002A          ;store main code from address 0x002A
risit:

LDI R16 , LOW(ROMEND)    ;stack defymition
OUT SPL , R16
LDI R16 , HIGH(ROMEND)
OUT SPH , R16
LDI R16 , (1<<INT1)    ;enable INT1
OUT GICR , R16
LDI R16 , (1<<ISC11)|(0<<ISC10)
OUT MCUCR , R16       ;rising edge triggers interrupt
SEI                ;set global interrupt flag
LDI R17, 0
loop:                ;forever loop
RJMP loop             ;jump to loop label

int1_routine:

cpi r17,1
breq case2

case1:
LDI R17, 1
LDI R16, (1<<PORTD7)
OUT PORTD, R16
OUT DDRD, R16
reti

case2:
LDI R17, 0
LDI R16, (0<<PORTD7)
OUT PORTD, R16
OUT DDRD, R16

reti
Проблема в том, что после того как программа ушла на вектор, и вернулась с него, уйти еще раз на прерывание она больше не может, по нажатию на кнопку, т.е. PIND3 не возвращается в единицу. Но, если работать в пошаговом режиме - все работает.

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2014, 18:00
Ответы с готовыми решениями:

Не срабатывает прерывание USART_RX_vect
Поругайте что ли, где я что делаю не так. Сам уже не могу понять. Не срабатывает прерывание...

Прерывание срабатывает только 1 раз
Здравствуйте! Стоит задача - при нажатии кнопки, с помощью прерывания нужно повысить значение на...

Не срабатывает внешнее прерывание
.divice atmega8 .nolist .include &quot;m8def.yms&quot; .list ;===================== .def temp= r16...

[ATtiny15] Не срабатывает прерывание
Не могу понять почему не срабатывает прерывание. .include &quot;tn15def.inc&quot; .def i=r19 .def...

Проект на Си, в АВРСтудио - не срабатывает прерывание
Привет. Решил тут написать на Си в AVRStudyo то, что перед этим делал на ассемблере. И столкнулся в...

8
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
30.06.2014, 18:07 2
Код:
LDI R16, (0<<PORTD7)
OUT PORTD, R16
OUT DDRD, R16

Зачем в обработках это:
Код
OUT DDRD, R16
???
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 70
30.06.2014, 18:10 3
ну, смотрю на индикатор. Нажатием кнопки хотел выключать что-то и включать. сейчас там светодиод.
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
30.06.2014, 18:12 4
Вы порт на вход во втором перрывании настроили. Настройте один раз в осн. программе. Ну и про дребезг контактов забыли.
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 70
30.06.2014, 18:29 5
вы говорите про какой порт? INT1? разве он не должен быть настроен на вход?
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
30.06.2014, 18:32 6
Порт "Д7", куда у вас светодиод подключен.
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 70
30.06.2014, 18:36 7
а, ну проблема не в нем, просто у меня вообще на прерывание не уходит программа во второй раз, спасибо, с этим разберусь. мне лишь бы она перескочила на прерывание еще раз, для начала, после выполнения первого прерывания.
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
30.06.2014, 18:44 8
В нем.
Сравните с вашим кодом. Отличия минимальны.
Код
.ymstude <m16def.yms>    ATmega16

.cseg                ;Ftosh sikmimt
.org 0x0000          ;RESIT homdler
RJMP risit             ;jump to risit label
.org 0x0004            ;INT1 homdler
RJMP int1_routine       ;jump to int1 routine label

.org 0x002A          ;store main code from address 0x002A
risit:

LDI R16 , LOW(ROMEND)    ;stack defymition
OUT SPL , R16
LDI R16 , HIGH(ROMEND)
OUT SPH , R16
LDI R16 , (1<<INT1)    ;enable INT1
OUT GICR , R16
LDI R16 , (1<<ISC11)|(0<<ISC10)
OUT MCUCR , R16       ;rising edge triggers interrupt
SEI                ;set global interrupt flag
LDI R17, 0
LDI R16, (1<<PORTD7)
OUT DDRD,R16

loop:                ;forever loop
RJMP loop             ;jump to loop label

int1_routine:

cpi r17,1
breq case2

case1:
LDI R17, 1
LDI R16, (1<<PORTD7)
OUT PORTD, R16
reti

case2:
LDI R17, 0
LDI R16, (0<<PORTD7)
OUT PORTD, R16
reti
В реальном применении нужно учитывать дребезг контактов.

Ваш код тоже нормально входит в прерывание. PIND3 в студии нужно нажать дважды, но чтоб между нажатиями прошел хотя бы один такт (одно нажатие F10 или F11 в дебаггере)
0
0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 70
30.06.2014, 19:19 9
Да! я выполнял дебаггере. ставил брекпоинт перед выполнением прерывания. Проверю завтра, когда сделаю саму схему в которой будет учтен дребезг контактов.

Большое спасибо за помощь!
0
30.06.2014, 19:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2014, 19:19
Помогаю со студенческими работами здесь

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

[Решено] Не срабатывает прерывание по захвату таймера А
Не срабатывает прерывание по захвату таймера А. Вот код, я уже вырезал все, оставил только...

Цикл не срабатывает второй раз
Всем привет! Ребята помогите. Использую такой цикл: Dim i1 As Integer = 0 Dim d As Integer...

Не срабатывает скрипт второй раз
Ребята помогите. Есть скрипт: jQuery(document).ready(function(){ jQuery(&quot;.world li&quot;).click( ...

Кнопка не срабатывает второй раз
Доброе утро!подскажите, пожалуйста. Почему при повторном нажатии кнопка не срабатывает? ...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru