Problem bei AtMega128 mit RET-Befehl

Gast #218598
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren