Ich versuche zur Zeit einen ATMEGA128 zu programmieren. Doch Leider komme ich mit den Befehlen "rcall" und "ret" nicht klar. Hab jetzt erstmal Testweise nur ein kleines Programm geschrieben. Es soll eigentlich am PortB zwischen 0xAA und 0x55 hin- und hergesprungen werden. Hierzu wird das Unterprogramm "wait" benötigt, welches eine Zeitschleife beeinhaltet: .DEVICE ATmega128 .EQU var1=$AA .EQU var2=$55 LA: ldi r17,var1 out $18,r17 rcall wait ldi r17,var2 out $18,r17 rcall wait rjmp LA wait: clr r19 ldi r21,$FF next2: ldi r20,$FF next1: cp r19, r20 breq equal1 dec r20 rjmp next1 equal1: cp r19,r21 breq equal2 dec r21 rjmp next2 equal2: ret Leider Funktioniert es nicht. Ich hab jetzt schon in verschiedenen Foren gelesen das dies mit dem "M103C" Fuse-Bit zusammenhängt. Aber egal wie ich es setze bleibt mein Problem. Bei der Simulation mit AVR-Studio4 sieht man, dass beim Befehl "rcall" der Stackpointer von 0x0000 auf 0xFFFE springt?!? Beim Anschließenden RET-Befehl bleibt er dann hängen. Weis jemand, wie ich die Fuse-Bits setzen muss, damit es Funktioniert?
Ich würde er sagen, es hängt mit dem nicht initialisierten Stackpointer zusammen...
Klingt logisch. Und wie mach ich das? Auf welche Adresse muss der Pointer am Anfang stehen?
ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp Quelle: http://www.mikrocontroller.net/tutorial/stack
Hi und dann setz auch gleich die M103C-Fuse noch so das der Mega128 auch im Mega128 Modus läuft. Sonst wirds auch nix mit dem RET. Matthias
Danke, es war echt nur der Stack-pointer. Ist mein erster AtMega128. Bei meinen bisherigen MC's war das initialisieren nicht nötig...
Bei meinen bisherigen MC's war das initialisieren nicht nötig... Bei AVRs eigentlich schon, außer man nimmt solche mit Hardwarestack.
Das waren bis jetzt 80x51-Derivate. Bei denen wurde der Stackpointer nach restart initialisiert.
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.