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


von Der D. (derdaniel)


Lesenswert?

Servus,

bräuhcte bitte kurz ein bischen Hilfestellung.

Es geht um folgenden Code
1
.include "m48def.inc"
2
 
3
.def temp = r16
4
.def cnt = r17
5
 
6
.org 0x0000
7
        rjmp    main
8
.org OVF0addr
9
        rjmp    t0_ovf
10
 
11
main:
12
        ; Stackpointer initialisieren
13
        ldi     temp, HIGH(RAMEND)
14
        out     SPH, temp
15
        ldi     temp, LOW(RAMEND)     
16
        out     SPL, temp
17
18
        ldi temp, (1<<COM0A0) | (1<<WGM01)
19
        out TCCR0A, temp
20
21
;        ldi temp, (1<<CS01) | (1<<CS00)
22
        ldi temp, (1<<CS00)
23
        out TCCR0B, temp
24
25
        ldi temp, 83
26
        out OCR0A, temp
27
28
        ldi temp, (1<<OCIE0A)
29
        sts TIMSK0, temp
30
31
        sei
32
33
loop:   rjmp    loop
34
35
t0_ovf:
36
        tst cnt
37
        breq langerloop
38
        inc cnt
39
        reti
40
41
langerloop:
42
        ldi temp, 111
43
        out OCR0A, temp
44
        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!!!

von Peter (Gast)


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.

von Peter R. (gelb)


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:
1
t0_ovf:
2
  tst cnt
3
  brne noloop
4
    ldi temp, 111
5
    out OCR0A, temp
6
  noloop:
7
  inc cnt
8
reti

Grüße, Peter

von Der D. (derdaniel)


Lesenswert?

>
1
> t0_ovf:
2
>   tst cnt
3
>   brne noloop
4
>     ldi temp, 111
5
>     out OCR0A, temp
6
>   noloop:
7
>   inc cnt
8
> reti
9
>


Danke Peter,

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

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.