Assembler: Warteschleife von 1000 Takten

Gast #131949
Lesenswert?

ldi r16, 250   ; 1 takt

loop:
  nop          ; 250 takte ==> jeder befehl 1 takt
  dec r16      ; 250 takte ==> jeder befehl 1 takt
  brne loop    ; 499 takte ==> bei sprung 2 takte, sonst 1er

==> zusammen 1000 takte

oder du lädst mit 248 oder 249 und dann kannste noch nen müll wie ret
und so einbauen...

sollteste aber selbst nochmal durchrechnen

dave
Gast #131950
Lesenswert?

Hallo Klaus und Dave,

danke für Eure Code-Fragmente. Hatte zuerst in Codesammlungen gefragt,
weil mir das logisch vorkam. Beim herumsuchen und lesen hatte ich dann
mehrmals gelesen, dass Fragen dort wohl nicht hinein gehören. Also
hatte ich dann noch mal im Microcontroler gefragt und sehr gute
Antworten bekommen und gleich erflogreich ausprobiert.

Aber Eure Lösungen zeigen mal wieder, dass viele Wege nach Rom
führen:-)

Viele Grüsse
Karl
Gast #1023425
Lesenswert?

Hi,

ich hatte mal einen Doppelwürfel mit asm programmiert.
Für die Würfelzahlen hatte ich einen Timer laufen, der im 
schnellstmöglichen Takt von 0..5 gezählt hat (bzw. 1..6). Wenn einer 
eine Taste gedrückt hat, hab ich die aktivierende Flanke der Taste 
genutzt um Würfel 1 mit dem derzeitigen Counterwert zu laden und die 
deaktivierende Flanke (Taste loslassen) holt den Counterwert für für den 
2. Würfelwert. Die Ausgabe über LEDs erfolgte erst, nach dem die Taste 
wieder losgelassen wurde. Somit lag der Zufallsfaktor bei Nutzer, bzw. 
wann man die Taste drückt und loslässt.
Hat prima funktioniert und keiner trifft mit gezieltem Drücken einen 
bestimmten Counterwert, wenn der Counter mit paar MHz rennt. Auch wenn 
es viele versucht haben :-)

Gruß
RoK

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren