Внешние прерывания в ATtiny13
Добавлено: Ср авг 04, 2010 09:55:01
Как определить, от которого входа произошло внешнее прерывание, если разрешено (и возможно) прерывание от нескольких внешних выводов?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Нет, не наверняка. Кинулся сюда, после того, как не нашел нужной информации.>TEHb< писал(а):У них адреса разные. Ведь наверняка не читали документацию, а сразу кинулись сюда.
Именно этот случай. Но так все довольно криво получается: прерывания генерируются на любое изменение состояния входов, т.е. нужно отслеживать, какие состояния входов были до прерывания (или в предыдущем прерывании).ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT - то есть о прерывании по изменению уровня на любом из пинов? если так, то надо считать порт и посмотреть, какие биты в нем изменились - вот вам и определение, от которого сработало все
Код: Выделить всё
volatile unsigned char prev_port = PINB;Код: Выделить всё
ISR(PCINT0_vect){
switch(PINB ^ prev_port){
// тут обрабатываем варианты изменения пинов
case 0b00000001:
case 0b00000010:
// и т.д. - вариантов много, особенно если могут быть одновременные изменения нескольких пинов
}
prev_port = PINB;
}Тогда извиняйте. В тини13 не так уж и много вариантов, так что один лишний байтик вполне можно выделить. А си да, слегка сбивает с толку после паскаля.ARV писал(а):очевидно, речь не о ВНЕШНИХ прерываниях INT0 и INT1, а о PIN CHANGE INTERRUPT
да ладно, чего там...>TEHb< писал(а):Тогда извиняйте.
Код: Выделить всё
SBIS PINB,PB4 ;проверяем фронт
RETI ;выход, если задний
...
делаем что надо, если передний фронт
...
RETI
Код: Выделить всё
. . .
OUTI GIMSK,(1<<PCIE) ;разрешаем PCINT4 от внешнего сигнела
OUTI PCMSK,(1<<PCINT4)
sei
main:
. . .
rjmp main
PCINT_0:
SBIS PINB,PB4 ;проверяем фронт
RETI
. . .
reti
.org $00
rjmp RESET ;Reset Handler
reti ;rjmp EXT_INT0 ; IRQ0 Handler
rjmp PCINT_0 ; PCINT0 Handler
reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler
reti ;rjmp EE_RDY ; EEPROM Ready Handler
reti ;rjmp ANA_COMP ; Analog Comparator Handler
reti ;rjmp TIM0_COMPA ; Timer0 CompareA Handler
reti ;rjmp TIM0_COMPB ; Timer0 CompareB Handler
reti ;rjmp WATCHDOG ; Watchdog Interrupt Handler
reti ;rjmp ADC_inc ; ADC Conversion Handler