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
Gast
#5219556
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.
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
@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.
Gast
#5219592
Die Quelle scheint ja eine Binärzahl zu sein, aber das Ziel? Zwei Binär- oder zwei BCD-Zahlen, oder ein fünfstelliger String?
Gast
#5219593
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
Gast
#5219686
> 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
Gast
#5219827
.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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

