www.mikrocontroller.net

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


Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/attachment/41628/tf...
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.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

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

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

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

Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Beitrag "Zyklengenaues abfragen von Pin B1"

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

Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

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.