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.