0 / 0 / 0
Регистрация: 27.06.2014
Сообщений: 70
|
|
1 | |
Прерывание не срабатывает второй раз.30.06.2014, 18:00. Показов 3353. Ответов 8
Метки нет (Все метки)
Добрый день,
Прошу помощи. Я изучаю прерывания. Использую 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 Спасибо.
0
|
30.06.2014, 18:00 | |
Ответы с готовыми решениями:
8
Не срабатывает прерывание USART_RX_vect Прерывание срабатывает только 1 раз Не срабатывает внешнее прерывание [ATtiny15] Не срабатывает прерывание Проект на Си, в АВРСтудио - не срабатывает прерывание |
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
|
30.06.2014, 18:07 | 2 |
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 | |
30.06.2014, 19:19 | |
Помогаю со студенческими работами здесь
9
Не срабатывает прерывание компаратора(AIN0) [Решено] Не срабатывает прерывание по захвату таймера А Цикл не срабатывает второй раз Не срабатывает скрипт второй раз Кнопка не срабатывает второй раз Анимация не срабатывает второй раз Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |