hi zusammen, ich möchte eine 10 bit zahl in eine BCD zahl (3-stellen)
umwandeln, kann mir da jemand helfen?
habe bisher nur 8-Bit-Zahlen in BCD umgewandelt.
ich programmiere in Assembler (8051).
Gruss und danke
Am besten unterteils du die 10 Bit in Gruppen: (2 + 4 + 4) Bit. Dann
kriegst du x = a2 * 256 + a1 * 16 + a0.
Daraus machst du dir vier Bytes, die die einzelnen Stellen enthalten: x
= 1000 * d3 + 100 * d2 + 10 * d1 + d0. Daraus ergibt sich
b0 = a0 + 6 * (a1 + a2)
b1 = a1 + 5 * a2 + s * a3 + (b0 / 10)
b2 = 2 * a2 + (b1 / 10)
b3 = 0 + (b2 / 10)
und daraus dann:
d0 = b0 % 10
d1 = b1 % 10
d2 = b2 % 10
d3 = b3 % 10
Ziemlich trickreich, das Ganze! Wenn du die ai mit 2, 5, oder 6
multiplizierst, dann kommen höchstens 6 * 15 = 90 raus. Spielt sich also
in einem Byte ab - und ist damit problemlos auf uC zu implementieren.
virtuPIC
@ Peter Dannegger
Hast du wirklich schön programmiert.
Ich würde nur gerne mal wissen, wie rufe ich dieses Unterprogramm
"formal" richtig auf, wie übergebe ich Daten, wie bekomme ich Daten
zurück.
Du magst die Frage vieleicht dämmlich finden, sie hat aber durchaus ihre
Berechtigung.
Tagträumer wrote:
> @ Peter Dannegger>> Hast du wirklich schön programmiert.> Ich würde nur gerne mal wissen, wie rufe ich dieses Unterprogramm> "formal" richtig auf, wie übergebe ich Daten, wie bekomme ich Daten> zurück.
Steht eigentlich oben drüber:
1
;input: R6, R7= 16 bit value 0 ... 65535
2
;output: R3, R4, R5, R6, R7 = 5 digits (ASCII)
D.h. der 16Bit-Wert muß in R6 und R7 übergeben werden.
Üblicher Weise schreibt man das höherwertige Register links
(wie bei Zahlen auch).
Also R6 mit dem High-Byte laden und R7 mit dem Low-Byte
Und dann: