HIIIIILFEEEEE ! Ich werd noch verrückt, meine Unterprogrammsprünge funktionieren nicht, obwohl ich den Stackpointer initialisiert habe. Mein Problem ist der erste Unterprogrammaufruf funktioniert, ist das erste Unterprogramm jedoch beendet (mit ret) so springt er nicht in das main Programm zurück von dem er aus in das Unterprogramm gesprungen ist sondern springt anscheinend auf Adr. 0x0000 wo der rjmp des Main Programm ist. -> Somit wird wieder ganz am Anfang des Main Programms begonnen.... Wer weiß meinen Fehler, wäre Euch sehr dankbar... Mein Main Programm: MAIN: ;Initialisierung des Stack Pointers ldi stack,HIGH(RAMEND) out SPH,stack ldi stack,LOW(RAMEND);Initiate Stackpointer out SPL,stack ; wegen Interrupts und Unterprogr. ;Stackpointerinitialisierung ende ldi mp,0xff out DDRC,mp ldi mp,0x00 out PORTC,mp ldi DATENREG, 0b01000001 ldi X_ADRESSREG_LOW,0b10101010 ldi X_ADRESSREG_HIGH, 0b00000111 rcall INFO_IN_SR ; SR->Schieberegister rcall SCHREIBEN_IN_DPRAM LOOP: jmp LOOP Vielen Dank Peter
Da ich jmp xxx lese sollte es ein avr mit mehr als 8k flash sein. Ein beliebter Fehler ist die Assembler-Option "Wrap raltive jumps" enabled zu lassen. Dann erzeugen rcall/rjmp keine Fehler und es werden allerdings falsche Adressen berechnet.
Hallo, ich simuliere den Ablauf durch einen Singelstepmodus im AVR Studio. Beim Assemblieren habe ich leider die Option Wrap relative jump nicht gefunden.. Übrigens ich verwende den ATmega32 Baustein Peter
Danke für Eure Hilfe, Problem beseitigt... Ursache: Falsche Version des AVRStudios.... Neuere Version eingespielt jetzt funktionierts ! Danke nochmal Peter
Eine Frage doch noch was wird durch die Assemblerfunktion Wrap relative Jump ausgelöst ?
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.