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.