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.
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.
http://www.mikrocontroller.net/articles/AVR_Arithmetik#Addition_von_.2433 da habe ich das Verfahren schon mal erwähnt
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
aus der MATH32 von Andre Birua
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.
Ich danke Euch. Jetzt verstehe ich den Ablauf. LG Rudi
Entpacken von packed BCD ist doch keine große Aufgabe, z.B. mit AND $0F und SWAP, macht das so viel aus?
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.
Da sieht man, wie schnell etwas in Vergessenheit gerät. Zum Glück gibt's dieses Forum. LG Rudi
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.