Hi Leuts, ich habe hier ein paar Zeilen Code für den ATmega 16. Nur leider wird anscheinend absolut kein Interrupt ausgeloest. Weiss einer woran das liegen könnte ? Ach ja, Fuses: BOOTRST = 1, BOOTSZ = 00 .include "m16def.inc" .def temp1 = r22 ; Interrupttabelle jmp Init ; Reset reti ; External Interrupt Request 0 reti ; External Interrupt Request 1 reti ; Timer/Counter2 Compare Match reti ; Timer/Counter2 Overflow reti ; Timer/Counter1 Capture Event reti ; Timer/Counter1 Compare Match A reti ; Timer/Counter1 Compare Match B reti ; Timer/Counter1 Overflow rjmp Timer0 ; Timer/Counter0 Overflow reti ; Serial Transfer Complete reti ; USART, Rx Complete reti ; USART Data Register Empty reti ; USART, Tx Complete reti ; ADC Conversion Complete reti ; EEPROM Ready reti ; Analog Comparator reti ; Two-wire Serial Interface reti ; External Interrupt Request 2 rjmp Timer0 ; Timer/Counter0 Compare Match reti ; Store Program Memory Ready Init: ; Stack initialisieren ldi temp1, high (RAMEND) out SPH, temp1 ldi temp1, low (RAMEND) out SPL, temp1 ; Port A ist Ausgang ldi temp1, 0xFF out DDRA, temp1 ldi temp1, 0xFF out PORTA, temp1 ; Comparewert fuer Timer0 laden ldi temp1, 36 out OCR0, temp1 ; Timer 0 Compare und Overflow aktivieren ldi temp1, 0b00000011 out TIMSK, temp1 ; Vorteiler Timer 0 = 1024 ldi temp1, 0b00000101 out TCCR0, temp1 ; Interrupts freigeben sei rjmp Main Main: rjmp Main Timer0: ; Zaehler zuruecksetzen ldi temp1, 0 out TCNT0, temp1 ldi temp1, 0x00 out PORTA, temp1 reti
Hallo Karlheinz, Deine Interrupt-Tabelle ist falsch. Setze mal die passenden ORG-Anweisungen vor die Sprünge, also z.B. .ORG OVF0addr rjmp Timer0 ; Timer/Counter0 Overflow Gruß, Frank
Hi, ich hab zwar schon lange nicht mehr in Assembler programmiert aber müsste nicht vor der Interrupttabelle die Speicherstelle angegeben werden? z.B. .org 0002 //wenn BOOTSTR = 1 ;Interruptabelle .... Schau mal im List-File ob die IRQ Adressen stimmen. Ansonsten im Debugger prüfen ob alle Bits für die IRQ Behandlung korrekt gesetzt sind bzw. werden. Gruss Stefan
Hm, scheint als hättest Du rechtm, Frank. Bloss kapier ich es nicht, den Aufbau der Tabelle habe ich dem Atmel Datenblatt entnommen und abgetippt :-) Aber nicht dran gedacht, dass beim ATmega16 die Adresse anscheinend 2 Bytes belegt, beim 8515 nur 1 Byte ... Anyway, danke für die schnelle Hilfe Greetings Karlheint
>> Aber nicht dran gedacht, dass beim ATmega16 die Adresse anscheinend
2
Bytes belegt, beim 8515 nur 1 Byte ...
So ist es. Habe ich anfangs auch übersehen und gestaunt, warum selbst
simpelste Programme auf einmal nicht mehr funktionierten. ;-)
Anyway, danke für die schnelle Hilfe
Gerne.
Gruß, Frank
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.