Hallo. Ich habe folgendes Problem. Mein 2313 empfängt 5 ASCII Zeichen vom PC. In diesen Zeichen stehen immer Zahlen. Nun soll aus den 5 ASCII Zeichen, z.B. 63593 einen 16 Bit Hex Wert gemacht werden. Beim diesem Beispiel müsste also F869 herauskommen. Kann mir jemand weiterhelfen. PS. Ich programmiere in Assembler. Gruß Matthias
Du brauchst eine Multiplikation * 10, und zwar (16bit-Wert)*Konstante10 = (16Bit-Wert) und eine 16-Bit Addition. 6*10 = 60 +3 = 63 63*10= 630 +5 = 635 635*10=6350 +9 = 6359 6359*10=63590 + 3 = 63593 Anschließend steht das Ergebnis als Binäre Zahl in zwei Bytes, die einfach in Hex umgewandelt werden können.
Soweit, sogut. Aber ich hab doch nur 8 bit register. wie teile ich die Zahl denn auf? Matthias
indem du 2 Register zu einer einer Variable zusammenfasst. .def input_low=r16 .def input_hi=r17 Natürlich mußt du für alle Operationen 16bit-Arithmetik anwenden, du es selbstverständlich zu einem Übertrag zwischen den Registern kommen kann. Da der AVR keine 16bit-Arithmetik kann, muß das per Software erledigt werden, Beispiele für Mul/Div in der Beispieldatei AVR200.asm von Atmel. Binär/Hex-Umwandlung: das ist eigentlich gar keine, 4Binärziffern ergeben eine HEX-Ziffer. Und die binäre Welt wäre für uns viel leichter zu verstehen, hätten wir nur 4 Finger statt 5. Das Dezimalsystem gäbe es nur theoretisch, das normale wäre das Oktalsystem, und das passt bekanntlich prima zum Binärsystem.
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.