Forum: Mikrocontroller und Digitale Elektronik Welcher befehl ist zum Springen da?


von R--- S. (rene66)


Lesenswert?

Hallo,

blöd ausgedückt aber hier meine Frage.

Ich möchte mit mehreren nop Zeitdifferenzen ausgleichen.

Im Timer1 Compare IR lese ich die Register ICR1H und L und TCNT1L und H 
aus
die Beiden subtrahiere ich dann die Differenz möchte ich dann zum PC 
addieren und dann zu einer Reihe nop springen.

Wie heist der Sprungbefehl?

PC + Differenz = Sprungadresse

(welcher Befehl und wie einlesen welche Register müssen geladen werden)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP

von Benedikt K. (benedikt)


Lesenswert?

http://www.mikrocontroller.net/attachment/41628/tfttext_direkt.zip
Schau dir darin mal die .S Datei an, da mache ich sowas.
Da ich allerdings nicht prüfe, ob die Adresse innerhalb des NOP Bereichs 
liegt, führt es zu einem bösen Absturz, wenn die Zeit mal etwas größer 
ist.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Man könnte die Adresse auf den Stack legen und dann ein Return from 
Subroutine ausführen

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Mit Von-Neumann-CPUs kann man auch selbstmodifizierenden Code schreiben, 
aber in der Harvard-Struktur der AVRs geht das nicht mehr.

von R--- S. (rene66)


Lesenswert?

Hallo,

so inetwa?


                          in    templ1,TCNT1L
                          in    tempH1,TCNT1H

                          in    templ,ICR1L
                          in    tempH,ICR1H

                    sub   templ1,templ
                    sbc   temph1,temph
                          ldi   Templ,low(PC)
                    ldi   Temph,high(PC)
                    add   templ1,templ
                    adc   temph1,temph
        mov   ZH,tempH1
        mov   ZL,tempL1
        ijmp
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop

von Sven P. (Gast)


Lesenswert?

Jo, über IJMP und das Z-Register oder mit zweimal PUSH und einmal RET.

von Gast (Gast)


Lesenswert?

>Beitrag "Zyklengenaues abfragen von Pin B1"

Wozu das Gewürge? Immer noch das gleiche Problem?

von R--- S. (rene66)


Lesenswert?

Hallo,

ja ich würge immer noch aber jetzt mit dem ICP Interrupt und jetzt ist 
alles gut.

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.