Forum: Mikrocontroller und Digitale Elektronik bin to BCD Umwandlung


von Rudi D. (rulixa)


Lesenswert?

http://www.cade.utah.edu/~nmcdonal/Tutorials/BCDTutorial/BCDConversion.html

FIND DAS GUT, aber ich verstehe es noch nicht. Verwende es jedenfalls 
als Bin4BCD mit Erfolg.

Hat diesen Code schon jemand durchgedacht?
Außer dem Erfinder meine ich.

von Karl H. (kbuchegg)


Lesenswert?

Rudi D. schrieb:
> http://www.cade.utah.edu/~nmcdonal/Tutorials/BCDTutorial/BCDConversion.html
>
> FIND DAS GUT, aber ich verstehe es noch nicht. Verwende es jedenfalls
> als Bin4BCD mit Erfolg.
>
> Hat diesen Code schon jemand durchgedacht?

Die Idee ist gut. Die hab ich so auch noch nie gesehen.

Der springende Punkt sind die 'Columns'. Damit ist offenbar ein Nibble 
gemeint, in dem dann die BCD Stellen erzeugt werden. Und da wird die 
originale Binärzahl von rechts nach links reingeschoben. Allerdings mit 
einer kleinen Modifikation: Das ist die Sache mit dem 'wenn größer 5, 
addiere 3". Am Anfang konnte ich nicht viel damit anfangen, bis mir in 
den Sinn kam, dass 1-mal nach links schieben ja nichts anderes als eine 
Multiplikation mit 2 ist. Wann müssen wir im Dezimalsystem einen 
Übertrag in die nächste Stelle machen? Na, wenn das Ergebnis der 
Multiplikation größer als 9 ist. Das ist genau dann der Fall, wenn eine 
Stelle größer/gleich 5 ist. Dann wird die nachfolgende Multiplikation 
mit 2 ein Ergebnis liefern, das größer als 9 ist. In der Systematik 
berücksichtigt der Algo das dadurch, dass zuvor die 3 addiert werden, 
die zusammen mit der nachfolgenden Multiplikation mit 2 das BCD richtige 
Ergebnis liefert.

Nette Idee. Wirklich nette Idee.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR_Arithmetik#Addition_von_.2433
da habe ich das Verfahren schon mal erwähnt
1
  binbcd_loop:                          subi  tBCD0,-0x33  ;add 0x33 to digits 1 and 0
2
                                        sbrs  tBCD0,3   ;if bit 3 clear
3
                                        subi  tBCD0,0x03  ;  sub 3
4
                                        sbrs  tBCD0,7   ;if bit 7 clear
5
                                        subi  tBCD0,0x30  ;  sub $30
6
                                        subi  tBCD1,-0x33  ;add 0x33 to digits 3 and 2
7
                                        sbrs  tBCD1,3   ;if bit 3 clear
8
                                        subi  tBCD1,0x03  ;  sub 3
9
                                        sbrs  tBCD1,7   ;if bit 7 clear
10
                                        subi  tBCD1,0x30  ;  sub $30
11
                                        subi  tBCD2,-0x33  ;add 0x33 to digits 5 and 4
12
                                        sbrs  tBCD2,3   ;if bit 3 clear
13
                                        subi  tBCD2,0x03  ;  sub 3
14
                                        sbrs  tBCD2,7   ;if bit 7 clear
15
                                        subi  tBCD2,0x30  ;  sub $30
aus der MATH32 von Andre Birua

von Peter D. (peda)


Lesenswert?

Man multipliziert einmal binär und einmal dezimal mit 2.
Dann wird der binäre Übertrag zum Dezimalwert addiert.
Nach 8 Durchgängen ist dann das binäre Byte in den Dezimalwert geschoben 
worden.
Die dezimale Multiplikation *2 kann man auch durch dezimale Addition mit 
sich selbst darstellen.
Manche MCs (8051) haben dafür einen dezimal Adjust Befehl. Wenn nicht, 
dann muß man den Übertrag von Bit 3 bzw. 7 selber korrigieren.

Die Methode wird heutzutage kaum noch verwendet, da man mit packed-BCD 
wenig anfangen kann.
Man will lieber einzelne Digits (LCD oder 7S-Anzeige) und dann ist die 
Subtraktionsmethode kleiner und schneller.

von Rudi D. (rulixa)


Lesenswert?

Ich danke Euch. Jetzt verstehe ich den Ablauf.
LG Rudi

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Entpacken von packed BCD ist doch keine große Aufgabe, z.B. mit AND $0F 
und SWAP, macht das so viel aus?

von Axel S. (a-za-z0-9)


Lesenswert?

Karl Heinz schrieb:
> Nette Idee. Wirklich nette Idee.

Vor allem eine alte Idee. Unter der Bezeichnung "Dreierkorrektur" finde 
ich den Algorithmus in zwei mittlerweile antiquarischen Standardbüchern 
zum Thema. Einmal "Arithmetische Algorithmen der Mikrorechentechnik" und 
auch im Vorgänger "Algorithmen der Mikrorechentechnik" von jeweils 
Jorke, Lampe, Wengel. VEB Verlag Technik Berlin 1983/1989.

von Rudi D. (rulixa)


Lesenswert?

Da sieht man, wie schnell etwas in Vergessenheit gerät. Zum Glück gibt's 
dieses Forum.

LG Rudi

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.