Hallo, Kann mir jemand erklären wie der folgende Code-Abschnitt funktioniert bzw was $42 bedeutet? Danke ;Pause nach jeder Übertragung delay50us: ;50us Pause ldi temp1, $42 delay50us_:dec temp1 brne delay50us_ ret ;wieder zurück
hi, es ist nur eine einfache Warteschleife. $42 bedeutet 42 in der hexadezimalen Darstellung, also 66 dezimal. Vielleicht ist es klarer wenn Du die Zeilen mal anders siehst: delay50us: ; Unterprogramm ldi temp1,$42 ; lade mit konst. Wert 42h delay50us_: dec temp1 ; temp1=temp1-1 brne delay50us_ ; bleibe in Schleife, solange Ergebnis ungleich 0 rts ; Unerprogramm beendet hilft das? Reiner
oh, schade ich hatte extra alles ordentlich eingerückt. Ich hab's nochmal angehängt Reiner
Das $42 hexadezimal ist habe ich auch schon gedacht aber es wären ja dann nur 66 taktdurchläufe. wie kommt man dann auf 50 µs. Ein Takt dauert bei 4 MHz nur 0,00000025 Sekunden, das sind 25 Nanosekunden (soweit ich weiss). 66 25 2 (weil pro schleife 2 Befehle stattfinden) = 3300 Nanosekunden = 3,3 µs oder?
Hi! Falsch: 4MHz = 250ns dec = 1 Takt brne = 2 Takte (wenn nicht 0) Das sind bei mir 3 Takte je Durchlauf. rcall = 4 Takte ret = 4 Takte ldi-Takt weggelassen weil letztes brne nur 1 Takt 3 x 66 x 250ns + 8 x 250ns = 51,5us Nicht exakt aber soweit richtig. Gruss Uwe
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.