12.1 Interruptvektoren im ATmega48
Tabelle 12-1: Reset- und Interruptvektoren im ATmega48
Vektor-Nr. | Flash-Adresse | Quelle | Definition |
1 | 0x000 | RESET | External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset
|
2 | 0x001 | INT0 | Externer Interrupt 0
|
3 | 0x002 | INT1 | Externer Interrupt 1
|
4 | 0x003 | PCINT0 | Pegelwechsel-Interrupt 0
|
5 | 0x004 | PCINT1 | Pegelwechsel-Interrupt 1
|
6 | 0x005 | PCINT2 | Pegelwechsel-Interrupt 2
|
7 | 0x006 | WDT | Watchdog Time-out Interrupt
|
8 | 0x007 | TIMER2 COMPA | Zähler/Zeitgeber2 Compare Match A
|
9 | 0x008 | TIMER2 COMPB | Zähler/Zeitgeber2 Compare Match B
|
10 | 0x009 | TIMER2 OVF | Zähler/Zeitgeber2 Overflow
|
11 | 0x00A | TIMER1 CAPT | Zähler/Zeitgeber1 Capture Event
|
12 | 0x00B | TIMER1 COMPA | Zähler/Zeitgeber1 Compare Match A
|
13 | 0x00C | TIMER1 COMPB | Zähler/Zeitgeber1 Compare Match B
|
14 | 0x00D | TIMER1 OVF | Zähler/Zeitgeber1 Overflow
|
15 | 0x00E | TIMER0 COMPA | Zähler/Zeitgeber0 Compare Match A
|
16 | 0x00F | TIMER0 COMPB | Zähler/Zeitgeber0 Compare Match B
|
17 | 0x010 | TIMER0 OVF | Zähler/Zeitgeber0 Overflow
|
18 | 0x011 | SPI, STC | SPI Serielle Aussendung beendet
|
19 | 0x012 | USART, RX | USART: Datenbyte empfangen
|
20 | 0x013 | USART, UDRE | USART: Datenregister leer
|
21 | 0x014 | USART, TX | USART: Datenbyte gesendet
|
22 | 0x015 | ADC | Analog-Digital-Wandlung beendet
|
23 | 0x016 | EE READY | EEPROM bereit
|
24 | 0x017 | ANALOG COMP | Flanke am Analogvergleicher
|
25 | 0x018 | TWI | 2-wire Serial Interface
|
26 | 0x019 | SPM READY | Store Program Memory Ready
|
Typischerweise sieht es in einem Programm wie folgt aus:
Adresse Marken Kode Kommentar
0x000 rjmp RESET ; Reset-Behandler
0x001 rjmp EXT_INT0 ; IRQ0-Behandler
0x002 rjmp EXT_INT1 ; IRQ1-Behandler
0x003 rjmp TIM2_COMP ; Timer2-Vergleich-Behandler
0x004 rjmp TIM2_OVF ; Timer2-Überlauf-Behandler
0x005 rjmp TIM1_CAPT ; Timer1-Schnappschuss-Behandler
0x006 rjmp TIM1_COMPA ; Timer1-VergleichA-Behandler
0x007 rjmp TIM1_COMPB ; Timer1-VergleichB-Behandler
0x008 rjmp TIM1_OVF ; Timer1-Überlauf-Behandler
0x009 rjmp TIM0_OVF ; Timer0-Überlauf-Behandler
0x00a rjmp SPI_STC ; Behandler bei SPI Übertragung komplett
0x00b rjmp USART_RXC ; USART-Empfang-Behandler
0x00c rjmp USART_UDRE ; UDR-leer-Behandler
0x00d rjmp USART_TXC ; USART-Gesendet-Behandler
0x00e rjmp ADC ; ADU-fertig-Behandler
0x00f rjmp EE_RDY ; EEPROM-fertig-Behandler
0x010 rjmp ANA_COMP ; Analogvergleicher-Behandler
0x011 rjmp TWSI ; TWI-Behandler
0x012 rjmp SPM_RDY ; Behandler für SPM-Befehl fertig
;
0x013 RESET: ldi r16,high(RAMEND); Start des Hauptprogramms
0x014 out SPH,r16 ; Stapelzeiger auf RAM-Ende setzen
0x015 ldi r16,low(RAMEND)
0x016 out SPL,r16
0x017 sei ; Interrupts freigeben
0x018 <instr> xxx
... ... ...
12.2 Interruptvektoren im ATmega88
Tabelle 12-2: Reset- und Interruptvektoren im ATmega88
Vektor-Nr. | Flash-Adresse(2)Quelle | Definition | |
1 | 0x000(1)RESET | External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset
| 2 | 0x001 | INT0 | Externer Interrupt 0
| 3 | 0x002 | INT1 | Externer Interrupt 1
| 4 | 0x003 | PCINT0 | Pegelwechsel-Interrupt 0
| 5 | 0x004 | PCINT1 | Pegelwechsel-Interrupt 1
| 6 | 0x005 | PCINT2 | Pegelwechsel-Interrupt 2
| 7 | 0x006 | WDT | Watchdog Time-out Interrupt
| 8 | 0x007 | TIMER2 COMPA | Zähler/Zeitgeber2 Compare Match A
| 9 | 0x008 | TIMER2 COMPB | Zähler/Zeitgeber2 Compare Match B
| 10 | 0x009 | TIMER2 OVF | Zähler/Zeitgeber2 Overflow
| 11 | 0x00A | TIMER1 CAPT | Zähler/Zeitgeber1 Capture Event
| 12 | 0x00B | TIMER1 COMPA | Zähler/Zeitgeber1 Compare Match A
| 13 | 0x00C | TIMER1 COMPB | Timer/Coutner1 Compare Match B
| 14 | 0x00D | TIMER1 OVF | Zähler/Zeitgeber1 Overflow
| 15 | 0x00E | TIMER0 COMPA | Zähler/Zeitgeber0 Compare Match A
| 16 | 0x00F | TIMER0 COMPB | Zähler/Zeitgeber0 Compare Match B
| 17 | 0x010 | TIMER0 OVF | Zähler/Zeitgeber0 Overflow
| 18 | 0x011 | SPI, STC | SPI Serial Transfer Complete
| 19 | 0x012 | USART, RX | USART Rx Complete
| 20 | 0x013 | USART, UDRE | USART, Data Register Empty
| 21 | 0x014 | USART, TX | USART, Tx Complete
| 22 | 0x015 | ADC | ADC Conversion Complete
| 23 | 0x016 | EE READY | EEPROM Ready
| 24 | 0x017 | ANALOG COMP | Analog Comparator
| 25 | 0x018 | TWI | 2-wire Serial Interface
| 26 | 0x019 | SPM READY | Store Program Memory Ready
| |
- Hinweise:
- Wenn die BOOTRST-Fuse programmiert ist,
beginnt die Programmabarbeitung nach Reset an der Startadresse des Urlader-Bereiches.
Siehe „Urlader-Unterstützung“
- Wenn das IVSEL-Bit im MCUCR gesetzt ist,
befinden sich die Interruptvektoren am Beginn des Urlader-Bereichs.
Die Adresse jedes Vektors ist dann um die Adresse am Beginn des Urlader-Bereichs verschoben.
Tabelle 12-3: Reset- und Interruptvektoren im ATmega88
BOOTRST | IVSEL | Reset-Adresse | Startadresse der Interruptvektoren
|
---|
1 | 0 | 0x000 | 0x001
|
1 | 1 | 0x000 | Urlader-Reset-Adresse + 0x001
|
0 | 0 | Urlader-Reset-Adresse | 0x001
|
0 | 1 | Urlader-Reset-Adresse | Urlader-Reset-Adresse + 0x001
|
- Hinweis:
- Die Urlader-Reset-Adresse ist in Table 27-7 zu sehen.
Für die BOOTRST-Fuse gilt wie für alle Fuses:
„1“ bedeutet unprogrammiert und „0“ bedeutet programmiert.
Wenn die BOOTRST-Fuse unprogrammiert ist,
die Größe des Boot-Sektors 2 KByte beträgt
und das IVSEL-Bit im GICR-Register gesetzt wird,
bevor irgendein Interrupt freigegeben wird,
dann sieht ein typisches Programm etwa so aus:
Adresse Marken Kode Kommentar
0x000 rjmp RESET ; Reset-Behandler
;
0x001 RESET: ldi r16,high(RAMEND); Start des Hauptprogramms
0x002 out SPH,r16 ; Stapelzeiger auf RAM-Ende setzen
0x003 ldi r16,low(RAMEND)
0x004 out SPL,r16
0x005 sei ; Interrupts freigeben
0x006 <instr> xxx
;
.org 0xc01
0xc01 rjmp EXT_INT0 ; IRQ0-Behandler
0xc02 rjmp EXT_INT1 ; IRQ1-Behandler
... ... ... ;
0xc12 rjmp SPM_RDY ; Behandler für SPM-Befehl fertig
Wenn die BOOTRST-Fuse programmiert ist
und der Boot-Sektor eine Größe von 2 KByte hat,
dann sieht eine Programm typischerweise so aus:
Adresse Marken Kode Kommentar
.org 0x001
0x001 rjmp EXT_INT0 ; IRQ0-Behandler
0x002 rjmp EXT_INT1 ; IRQ1-Behandler
... ... ... ;
0x012 rjmp SPM_RDY ; Behandler für SPM-Befehl fertig
;
.org 0xc00
0xc00 rjmp RESET ; Reset-Behandler
;
0xc01 RESET: ldi r16,high(RAMEND); Start des Hauptprogramms
0xc02 out SPH,r16 ; Stapelzeiger auf RAM-Ende setzen
0xc03 ldi r16,low(RAMEND)
0xc04 out SPL,r16
0xc05 sei ; Interrupts freigeben
0xc06 <instr> xxx
Wenn die BOOTRST-Fuse programmiert ist,
die Größe des Boot-Sektors 2 KByte beträgt
und das IVSEL-Bit im GICR-Register gesetzt wird,
bevor irgendein Interrupt freigegeben wird,
dann sieht ein typisches Programm etwa so aus:
Adresse Marken Kode Kommentar
.org 0xc00
0xc00 rjmp RESET ; Reset-Behandler
0xc01 rjmp EXT_INT0 ; IRQ0-Behandler
0xc02 rjmp EXT_INT1 ; IRQ1-Behandler
... ... ... ;
0xc12 rjmp SPM_RDY ; Behandler für SPM-Befehl fertig
0xc13 RESET: ldi r16,high(RAMEND); Start des Hauptprogramms
0xc14 out SPH,r16 ; Stapelzeiger auf RAM-Ende setzen
0xc15 ldi r16,low(RAMEND)
0xc16 out SPL,r16
0xc17 sei ; Interrupts freigeben
0xc18 <instr> xxx