Это таблица векторов прерываний ATMega16:
1 $000(1) RESET External Pin, Power-on Reset, Brown-out
Reset, Watchdog Reset, and JTAG AVR
Reset
2 $002 INT0 External Interrupt Request 0
3 $004 INT1 External Interrupt Request 1
4 $006 TIMER2 COMP Timer/Counter2 Compare Match
5 $008 TIMER2 OVF Timer/Counter2 Overflow
6 $00A TIMER1 CAPT Timer/Counter1 Capture Event
7 $00C TIMER1 COMPA Timer/Counter1 Compare Match A
8 $00E TIMER1 COMPB Timer/Counter1 Compare Match B
9 $010 TIMER1 OVF Timer/Counter1 Overflow
10 $012 TIMER0 OVF Timer/Counter0 Overflow
11 $014 SPI, STC Serial Transfer Complete
12 $016 USART, RXC USART, Rx Complete
13 $018 USART, UDRE USART Data Register Empty
14 $01A USART, TXC USART, Tx Complete
15 $01C ADC ADC Conversion Complete
16 $01E EE_RDY EEPROM Ready
17 $020 ANA_COMP Analog Comparator
18 $022 TWI Two-wire Serial Interface
19 $024 INT2 External Interrupt Request 2
20 $026 TIMER0 COMP Timer/Counter0 Compare Match
21 $028 SPM_RDY Store Program Memory Ready
В показанном вами коде первый слот (RESET
) заполняется инструкцией jmp reset
.Следующий слот, который вас интересует - это TIMER0_OVF
, но между RESET
и TIMER0_OVF
есть 8 слотов, которые вы должны заполнить чем-то .Заполнение их инструкциями reti
(RETurn from Interrupt), вероятно, будет достаточно, если вы не заботитесь об обработке этих прерываний.
Если мы предположим, что reti (x16)
интерпретируется этим ассемблером как "output16 reti
инструкция ", тогда это позаботится о заполнении этих 8 слотов.Если вам интересно «почему 16 инструкций для 8 слотов?» - это потому, что каждый из этих слотов занимает 2 слов (достаточно, чтобы соответствовать инструкции jmp
), иразмер одной reti
инструкции составляет 1 слово.Таким образом, вы заполняете каждый слот двумя reti
инструкциями, вторая из которых не имеет смысла.