Die Uhrzeit ist in einem Register codiert. Bsp: 0 = 00:00 1 = 00:10 2 = 00:20 3 = 00:30 4 = 00:40 5 = 00:50 6 = 01:00 7 = 01:10 .. .. Frage: Wie kann man die Uhrzeit wieder decodieren? Bsp: 112 --> 18:40 Mit einer hinterlegten Tabelle ist es kein Problem... geht schnell, braucht aber viel Platz. Bernhard
minuten = wert * 10 stunden = minuten / 60 minuten = minuten % 60 Oder: stunden = wert / 6 minuten = (wert % 6) * 10
Und wer nicht multiplizieren oder dividieren will oder kann, der erinnert sich an Zeiten, in denen er das selbst auch noch nicht konnte, und zählt mit den Fingern. Addiert also so lange 10 unter Berücksichtigung des 60-er Überlaufs, bis der Intervallzähler durch ist. Das braucht sehr wenig Platz, dafür etwas Zeit.
:
Bearbeitet durch User
Hallo, Wert ist in 10 Minuten-Schritten, also Wert / 6 (als Ganzzahl) ergibt Stunden Wert - (Stunden * 6) -> Minuten Wo ist das Problem? ;-) PS: Stefan Us war schneller... Gruß aus Berlin Michael
:
Bearbeitet durch User
@Stefan Us
Kannst Du es mir bitte bei dem Registerinhalt von 112 mal vorrechnen.
@ A. K.
>....aber Geduld hat...
Ja, das wäre eine Alternative
Ich bin mir nicht ganz sicher, was Du denn speicherst. Bei: 0 0:00 1 0:10 2 0:20 3 0:30 4 0:40 5 0:50 6 1:00 7 1:10 könnten ein DIV 6 -> Std und MOD 6 -> Min (*10) helfen Also 7 DIV 6 = 1 7 MOD 6 = 1 (*10) = 10 oder so
Naja, 112 / 6 = 18 Rest 4 und die 4 mal 10 gibt 40 Minuten.
Die Quelle scheint ja eine Binärzahl zu sein, aber das Ziel? Zwei Binär- oder zwei BCD-Zahlen, oder ein fünfstelliger String?
Bernhard S. schrieb: > Kannst Du es mir bitte bei dem Registerinhalt von 112 mal vorrechne Kann ich auch :-)
> Naja, 112 / 6 = 18 Rest 4 und die 4 mal 10 gibt 40 Minuten.
In Assembler ist 112 / 6 nicht ganz einfach
> In Assembler ist 112 / 6 nicht ganz einfach
In Anlehnung an A.K.s Beitrag: solange 6 von 112 abziehen, bis ein Carry
auftritt. Ganz einfach, und die benötigte Zeit ist sicher auch
tolerierbar.
@Bernhard Basisoperationen sollten eigentlich Pipifax sein. Auch wenn sie nicht als Einzelbefehl "eingebaut" sind. Da Du aber ein Geheimnis um den verwendeten Prozessor machst, ist konkrete Hilfe nicht möglich. Jeder Chip bzw. jede Serie und vor allem jeder Hersteller kocht da sein eigenes Süppchen. Also: Assembler als Sprache gibt es eigentlich gar nicht.
Eine Lösungsvariante für den ATmega136 (Heikörperregler THERMOtronic) ATmega8 bzw. ATmega328p. Ich danke Euch sehr ! Vielleicht hat jemand noch eine weitere Variante
:
Bearbeitet durch User
.def temp1 = r20 .def temp2 = r21 wandeln: cpi temp1,143+1 brcs okay ldi temp1,24 ; Fehler ldi temp2,0 ret okay: mov temp2,temp1 ldi temp1,0 loop: inc temp1 subi temp2,6 brcc loop subi temp2,-6 ; ein Schritt zu weit, zurueck dec temp1 mov r0,temp2 ldi temp2,10 mul r0,temp2 mov temp2,r0 ret
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.