ATmega8A прерывание
Добавлено: Вс дек 30, 2012 17:04:09
Столкнулся со следующей проблемой.
Я настраиваю внешнее прерывание по INT1.
При изменении сигнала на входе INT1 по фронту вызывается подпрограмма обработчика прерывания
EXT_INT1:
Потом программа начинает выполнятся с метки RESET (начало программы), после окончания обработчика прерывания.
Как сделать так, чтобы программа продолжала выполнятся после окончания выполнения прерывания, с момента его вызова.
**********************************************************
.include "m8Adef.inc"
.cseg
.org 0
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp AD ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
;RESET:
EXT_INT0:
; EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
AD:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:
reti
RESET:
ldi R16,0b00001100
out MCUCR,R16
ldi R16,0b10000000
out GICR,R16
ldi R16,0
sei
Main1:
nop
rjmp Main1
EXT_INT1: inc R16
out PORTB,R16
reti
Я настраиваю внешнее прерывание по INT1.
При изменении сигнала на входе INT1 по фронту вызывается подпрограмма обработчика прерывания
EXT_INT1:
Потом программа начинает выполнятся с метки RESET (начало программы), после окончания обработчика прерывания.
Как сделать так, чтобы программа продолжала выполнятся после окончания выполнения прерывания, с момента его вызова.
**********************************************************
.include "m8Adef.inc"
.cseg
.org 0
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp AD ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
;RESET:
EXT_INT0:
; EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
AD:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:
reti
RESET:
ldi R16,0b00001100
out MCUCR,R16
ldi R16,0b10000000
out GICR,R16
ldi R16,0
sei
Main1:
nop
rjmp Main1
EXT_INT1: inc R16
out PORTB,R16
reti