Gast
#218598
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?