Полная версия этой страницы:
AVRStudio
polkin777
Oct 6 2007, 04:27
Изучаю прерывания. Установил в програмку внешнее прерывание на ногу виртуального тини2313. Есть возможность при пошаговом прогоне программы изменить на данной ноге прерывания сигнал, что бы увидеть работу прерывания....
В принципе есть - в студии доходиш до места ожидания прерывания а потом сам руками выставляеш уровень на лапе.. но это как то ...... по моему лучше в протеусе отсимулировать, или есчё лучше загнать в реальный камень...
polkin777
Oct 7 2007, 12:13
Интересует где именно "сам руками выставляеш уровень на лапе". чего жать нужно?
mdmitry
Oct 7 2007, 20:35
В AvrStudio справа панель портов, выбрать нужный и использовать.
Цитата(mdmitry @ Oct 8 2007, 00:35)

В AvrStudio справа панель портов, выбрать нужный и использовать.
Только тыркать нужно не PORT а PIN !
polkin777
Oct 8 2007, 04:57
Спасибо за помощь. Второй вопрос. Тини 2313 имеет 8 выводов прерывания PCINT0-7 и только один вектор.... Значить я не могу использовать несколько прерываний одновременно?
Цитата(polkin777 @ Oct 8 2007, 08:57)

Спасибо за помощь. Второй вопрос. Тини 2313 имеет 8 выводов прерывания PCINT0-7 и только один вектор.... Значить я не могу использовать несколько прерываний одновременно?
Ну, в векторе анализируй, кто дёрнулся. Делай приоритетный анализатор пинов. Отработал первую ситуаццыю, возвращайся в анализатор опять. Выход из прерывания только из анализатора. Типа "всё, больше нет никто - аут..."
polkin777
Oct 8 2007, 07:11
На выходит каменный цветок..... Не могу добиться перехода на метку PCINT при изменении PINB0...
.include "tn2313def.inc"
.device attiny2313
.def temp =r16 ;general scratch space
rjmp RESET ;Reset Handle
rjmp PCINT ;irq0
reset:
ldi r28,low(RAMEND)
out SPL,r28
ldi temp,0x01 ;initialise port B as O/I
out PCMSK,temp ;Прерывание по PINB0.
ldi temp,0x05 ;initialise port B as O/I
out MCUCR,temp ;По низкому уровню.
ldi temp,0x20 ;initialise port B as O/I
out EIFR,temp ;PCIF После сработки заводит снова прерывание(очищает флаг для прерывания).
ldi temp,0x20 ;initialise port B as O/I
out GIMSK,temp ;PCIE разрешает работу этого прерывания (включает его)
delay:
ldi r20,255
magain: ldi r19,255
fagain: dec r19
brne fagain
dec r20
brne magain
ret
PCINT:
ldi temp,0b10101010
out DDRB,temp
reti
Почему-то мне кажется, что надо еще разрешить прерывания глобально (sei).
2 676038 - правильно кажется - нету sei там, а значит и не будет интерруптов..
polkin777
Oct 8 2007, 14:18
Спасибо помогло. "надо еще разрешить прерывания глобально (sei)."
Дабы не плодить темы и я спрошу
Отладка в АВРСтудии приема по UART. Приемник включен, прерывания по приему и глобальные прерывания разрешены, прерывание обрабатывается, но данные которые я пишу в буфер приемника (в панеле отладки) при следующем такте сбрасываются вместе с установкой бита прерывания UDRE (USART Data Register Empty). Попадая в обработчик прерывания первым делом переписываю содержимое буффера во временную переменную, но там ,к моему сожалению, - пустота...
Подскажите, что я делаю не так ?
Цитата(swisst @ Oct 9 2007, 13:53)

... но там ,к моему сожалению, - пустота...
Подскажите, что я делаю не так ?
Всё так и есть. Читаем пустоту и правим уже в регистере.
Maik-vs
Oct 11 2007, 14:05
Цитата(swisst @ Oct 9 2007, 13:53)

Дабы не плодить темы и я спрошу
Отладка в АВРСтудии приема по UART. ... данные которые я пишу в буфер приемника (в панеле отладки)
А даже и не надо писать в буфер. Просто ткни мышой в бит RXC (UCSRA.7) - будет прерывание, а потом как mse сказал, "Читаем пустоту и правим уже в регистере".
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.