16 Bit BCD Addition

Gast #53884
Suche für Pic16Fxx Controller eine Routine zur Addition von 2
4-stelligen BCD Zahlen.
Genau genommen ist das zu allgemein In meinem speziellen Fall reicht
es, wenn ich eine 2-stellige zu einer 3-stelligen addieren kann. Das
Ergebnis wird also nie größer als 999.
Irgendwie will mir keine einfache Lösung einfallen...
Gast
Lösung? Warst Du nicht in der Schule?

Du fängst mit der Einerstelle an und addierst sie. Wenn das Ergebnis >=
10 ist, mußt Du bei der Addition der Zehnerstelle zusätzlich noch eine
1 aufaddieren. Für das Ergebis der Einerstelle mußt die 10 dann
abziehen. usw...
Meine Erfahrung geht dahin, das es wesentlich einfacher ist, intern
immer im Binärsystem zu rechen und nur zur Eingabe bzw. Ausgabe in das
Dezimalsystem umzurechen.

Der PIC hat soweit ich weiß, ja nicht mal einen DAA Befehl wie der
8051, d.h. Du würdest ihn nur quählen, wenn Du ihm Dezimalzahlen
aufzwingst.

Wie man Zahlensysteme umwandelt, hast Du doch in der Schule gelernt.

Da ein MC üblicher Weise Divisionen nicht so mag, nimmt man da einfach
die Subtraktionsmethode. Max 10 Subtraktionen je Digit gehen ja immer
noch schneller als eine Division /10 mit Rest.



Peter
Gast
Hätte ja sein können, jemand kennt eine bequeme Methode zur BCD-Addition
mit dem PIC.

Meine Zahlen, die ich addieren will, liegen nun mal in BCD vor und die
Summe soll angezeigt werden, natürlich nicht in binär.

Da es einen DAA Befehl eben nicht gibt, ist die Addition von gepackten
BCD-Zahlen nicht gerade trivial, wenngleich ich den zugrundeliegenden
Algorithmus durchaus in der ersten oder zweiten Klasse gelernt habe.

Also werde ich ein wenig hin und her wandeln, ist wohl doch das
Einfachste...

Uwe
Gast
Morgen Uwe,
bequem ist es nur, wenn man gar nichts macht. Ist Dir schon mal
aufgefallen, daß alles, was der Mensch haben möchte, ungemein schwierig
zu bekommen ist?

Entschuldige mein Geschwafel am Morgen, ich sitze wieder in der Fa.
Seit 7 Tagen kloppe ich 15 Stunden-Tage.

Wenn die BCDs gepackt sind, mußt Du halt das ausblenden (z.B. AND
0x0F), was Du nicht brauchst. Und oder das Dir hinschieben, was Du
brauchst.
Wie man das bei einem PIC macht, kann ich Dir allerdings nicht sagen.
Ich hatte das Glück, von Anfang an mit einem AVR arbeiten zu dürfen.

Grüße
Oliver

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.