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
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.
Man könnte die Adresse auf den Stack legen und dann ein Return from Subroutine ausführen
Mit Von-Neumann-CPUs kann man auch selbstmodifizierenden Code schreiben, aber in der Harvard-Struktur der AVRs geht das nicht mehr.
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
Jo, über IJMP und das Z-Register oder mit zweimal PUSH und einmal RET.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.