Попробовал компильнуть их пример Timer1_Interrupt. Вот как выглядит lst обработчика и вопросы по нему: 1. Зачем сохранялись R30, R31?
2. Почему не сохранялся используемый R16?
Timer1Overflow_ISR:
PUSH R30
PUSH R31
PUSH R27
IN R27, SREG
PUSH R27
; void Timer1Overflow_ISR() org IVT_ADDR_TIMER1_OVF {
; if (counter >= _THRESHOLD) {
LDS R16, _counter+0
CPI R16, 10
BRLO L_Timer1Overflow_ISR0
L__Timer1Overflow_ISR5:
; PORTB = ~PORTB; // toggle PORTB
IN R16, PORTB
COM R16
OUT PORTB, R16
; counter = 0; // reset counter
LDI R27, 0
STS _counter+0, R27
; }
RJMP L_Timer1Overflow_ISR1
L_Timer1Overflow_ISR0:
; counter++; // increment counter
LDS R16, _counter+0
SUBI R16, 255
STS _counter+0, R16
L_Timer1Overflow_ISR1:
; }
L_endTimer1Overflow_ISR:
POP R27
OUT SREG, R27
POP R27
POP R31
POP R30
RETI