hallo; im Datenblatt des ATMEGA328P steht: Address Labels Code Comments 0x0000 jmp RESET ; Reset 0x0002 jmp INT0 ; IRQ0 0x0004 jmp INT1 ; IRQ1 0x0006 jmp PCINT0 ; PCINT0 usw. Die Adresse zählt hier von Befehl zu Befehl nur 2 Byte weiter. Im Simulatorprogramm des AVR Studio 5 sehe ich aber im Speicher: prog 0x0000 0c 94 1c 00 0c 94 2b 00 .”...”+. prog 0x0008 18 95 18 95 18 95 18 95 ........ prog 0x0010 18 95 18 95 18 95 18 95 Hier zählt die Adresse von Befehl zu Befehl 4 Byte weiter. (Mein Programm beginnt so: jmp start ; 1 Reset jmp inter0 ; 2 External Interrupt Request 0 INT0_vect reti ; 3 External Interrupt Request 1 INT1_vect reti ; 4 Pin Change Interrupt Request 0 PCINT0_vect reti ; 5 Pin Change Interrupt Request 1 PCINT1_vect reti ; 6 Pin Change Interrupt Request 2 PCINT2_vect usw.) Wo ist mein Denkfehler ?
Michael S. schrieb: > Wo ist mein Denkfehler ? Die Adressen im AVR Assembler adressieren 16 Bit Worte, die HEX-Darstellung aber 8 Bit Worte.
Falk B. schrieb: > Michael S. schrieb: >> Wo ist mein Denkfehler ? >> https://pngtoico.io > Die Adressen im AVR Assembler adressieren 16 Bit Worte, die > HEX-Darstellung aber 8 Bit Worte. Besten Dank!
:
Bearbeitet durch User
und noch ein Tipp: Es empfiehlt sich die einzelnen Vectoren per .ORG auf die Adresse aus dem Datenblatt zu setzen, bei größeren AVR sind die Einträge 4 Byte groß um auch direkte Sprünge unterzubringen. Ein nacktes RETI würde bei einfachem hintereinander schreiben zu einem Versatz führen. Ist hier nicht nötig, aber manchmal portiert man ja was auf ein größeres Model und wundert sich dann. Sascha
Sascha W. schrieb: > bei > einfachem hintereinander schreiben zu einem Versatz führen. > Ist hier nicht nötig, aber manchmal portiert man ja was auf ein größeres > Model und wundert sich dann. Schon passiert ;-) Beitrag "Verständnisfrage zum ATMEGA328P Datenblatt Speicherverwaltung Interruptvektortabelle"
1 | jmp inter0 ; 2 External Interrupt Request 0 INT0_vect |
2 | reti ; 3 External Interrupt Request 1 INT1_vect |
Sascha W. schrieb: > per .ORG auf die Adresse aus dem Datenblatt zu setzen Besser noch die Namen der Vektoren aus dem Include-File. Dann ist man noch flexibler und übersichtlicher.
1 | .org $0000 |
2 | jmp RESET ; Reset Handler |
3 | |
4 | .org TCC0_OVF_vect |
5 | jmp TCC0_OVF_irq |
6 | |
7 | .org TCC0_CCA_vect |
8 | jmp TCC0_CCA_irq |
9 | |
10 | .org PORTD_INT0_vect |
11 | jmp PORTD_INT0_ISR |
12 | |
13 | .org TCF0_OVF_vect |
14 | jmp TCF0_OVF_irq |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.