Forum: Mikrocontroller und Digitale Elektronik Umrechnung von ASCII zu Hex


von Matthias (Gast)


Lesenswert?

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

von thkais (Gast)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

Soweit, sogut.
Aber ich hab doch nur 8 bit register. wie teile ich die Zahl denn auf?

Matthias

von crazy horse (Gast)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

So, jetzt funktioniert die Sache
Danke!

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
Noch kein Account? Hier anmelden.