mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Von SubSubroutine zurück in Subroutine


Autor: Der Daniel (derdaniel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

bräuhcte bitte kurz ein bischen Hilfestellung.

Es geht um folgenden Code
.include "m48def.inc"
 
.def temp = r16
.def cnt = r17
 
.org 0x0000
        rjmp    main
.org OVF0addr
        rjmp    t0_ovf
 
main:
        ; Stackpointer initialisieren
        ldi     temp, HIGH(RAMEND)
        out     SPH, temp
        ldi     temp, LOW(RAMEND)     
        out     SPL, temp

        ldi temp, (1<<COM0A0) | (1<<WGM01)
        out TCCR0A, temp

;        ldi temp, (1<<CS01) | (1<<CS00)
        ldi temp, (1<<CS00)
        out TCCR0B, temp

        ldi temp, 83
        out OCR0A, temp

        ldi temp, (1<<OCIE0A)
        sts TIMSK0, temp

        sei

loop:   rjmp    loop

t0_ovf:
        tst cnt
        breq langerloop
        inc cnt
        reti

langerloop:
        ldi temp, 111
        out OCR0A, temp
        reti

Hier soll nach dem Ausführen von langerloop zurück in t0_ovf zu der 
zeile inc cnt gesprungen werden und nicht (wie es aktuell tut) zurück 
ins Hauptprogramm. Welcher Befehl is dafür nötig?

Danke für Hilfe!!!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann darst du langerloop nicht mit reti beenden sondern nur mit ret. 
Außerdem darst du es nicht nur anspringen sonder musst es mit (r)call 
aufrufen.

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Steffen schrieb:
> t0_ovf:
>         tst cnt
>         breq langerloop
>         inc cnt
>         reti
>
> langerloop:
>         ldi temp, 111
>         out OCR0A, temp
>         reti

Wozu überhaupt langerloop als Funktion? Wird doch eh nur 1x aufgerufen 
und kann gleich integriert werden:
t0_ovf:
  tst cnt
  brne noloop
    ldi temp, 111
    out OCR0A, temp
  noloop:
  inc cnt
reti

Grüße, Peter

Autor: Der Daniel (derdaniel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
> t0_ovf:
>   tst cnt
>   brne noloop
>     ldi temp, 111
>     out OCR0A, temp
>   noloop:
>   inc cnt
> reti
> 


Danke Peter,

sowas hatte ich eigentlich vor, da ich aber noch n ASM neuling bin 
wusste ich nicht wie...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.