Forum: Mikrocontroller und Digitale Elektronik Tiny13 Stackpointer/subroutine


von GrinzPrinz (Gast)


Lesenswert?

Moin,moin.

Ich habe ein kleines Problem mit meinem Tiny13. Er springt nicht mehr 
aus einer subroutine zurück ins Hauptprogramm. Habe den StackPointer per 
Software initialisiert, so funktioniert es auch wunderbar in den 
90S2313. Warum hier nicht?
1
.include "tn13def.inc"
2
.def temp=r18
3
.ORG 0x00
4
ldi temp, RAMEND
5
out SPL, temp
6
ldi temp, 0xFF
7
out DDRB, temp
8
ldi temp, 0xFF
9
out PORTB, temp
10
rjmp loop
11
ldi temp, 0x00
12
out PORTB, temp
13
ende: rjmp ende
14
loop: nop
15
      ret

Was nun passiert ist folgendes: Die Ports sind alle gesetzt. Erwarten 
würde ich eigentlich, dass sie zum Ende nicht mehr gesetzt sind.

Ich hoffe, mir kann jemand helfen!!!

Lg GrinzPrinz

von Karl H. (kbuchegg)


Lesenswert?

GrinzPrinz wrote:

> rjmp loop

ein rjmp ist kein Unterprogrammaufruf

von GrinzPrinz (Gast)


Lesenswert?

Danke, mit rcall klappt das jetzt :)

Wo liegt denn genau der Unterschied zwischen rcall und rjmp für mich zum 
Verständnis?

Lg GrinzPrinz

von Karl H. (kbuchegg)


Lesenswert?

GrinzPrinz wrote:
> Danke, mit rcall klappt das jetzt :)
>
> Wo liegt denn genau der Unterschied zwischen rcall und rjmp für mich zum
> Verständnis?

Jmp    Sprung zu einer anderen Programmstelle.
       Die Programmausführung wird dort fortgesetzt

Call   Aufruf einer Subroutine
       Die Programmausführung wird an der angegebenen Stelle
       fortgesetzt. Zusätzlich wird aber die aktuelle Position
       im Programm zb. in einem Stack abgelegt, damit nach Beendigung
       der Subroutine wieder an die Stelle nach dem Call zurückgekommen
       werden kann (mittels 'ret')

von GrinzPrinz (Gast)


Lesenswert?

Danke, für die schnelle Hilfe!!!

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
Noch kein Account? Hier anmelden.