www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8 BCD in 4 Bytes umwandeln


Autor: H. B. (communicator9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

suche für ein PIC18 Projekt folgende Routine (Microchip Assembler).

Ich habe 8 BCD Stellen (jede von 0-9) in je einem Register.
1. Stelle = 1er, 2. Stelle = 10er, 3. Stelle = 100er usw.
Ich möchte nun die Zahl, die sich daraus ergiebt, z.B. Dezimal 25 120 
367
in ein 32 Bit Register schreiben, das auf 4 8 Bit Register aufgeteilt 
ist.

Hat dafür jemand eine Lösung oder einen Denkansatz?


viele Grüße

: Verschoben durch Moderator
Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wert in 4 Byte-Variable =1.Stelle + 2.Stelle * 10 + 3.Stelle * 100

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und so weiter und so fort... ;-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willst du aus den 8 BCD-Stellen einen binären 4-Byte-Long machen, oder 
ein Packed-BCD-Format (also 2 BCD-Stellen in jeweils 1 Byte)?

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin


nennt sich glaub ich packed BCD
4bit für eine Zahl von 0-9 = 2 Zahlen in einem Byte

also wenn du schon BCD vorliegen hast must du doch nur noch die 4Bit 
ausmaskieren und dann in der richtigen reihenfolge zusammen setzen.

schau mal ins wicki
http://en.wikipedia.org/wiki/Binary-coded_decimal

mfg

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: H. B. (communicator9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten,

Lothar Miller schrieb:
> Willst du aus den 8 BCD-Stellen einen binären 4-Byte-Long machen, oder
> ein Packed-BCD-Format (also 2 BCD-Stellen in jeweils 1 Byte)?

Ich brauche einen binären 4-Byte-Long den ich dann auf 26-Bit "verkürze" 
um damit bei einem DDS-Chip die Frequenz einszustellen.

Gruß

Autor: Thorsten S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispiel:

du hast:     9    3    5    6    7    1    2    3 in bcd
also      1001 0011 0101 0110 0111 0001 0010 0011 als bcd ziffern

und du willst:

00000101 10010011 10111000 10010011

binär daraus machen!?

kann dein Pic hardware multiplikation?

was spricht dagegen dies durch multiplikation zu erlagen? ansonsten mit 
shiften und addieren die multiplikation nachbauen, oder wenn nicht 
zeitkritisch ist, aufaddieren...

Gruß,
Thorsten

Autor: H. B. (communicator9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thorsten,

genau das will ich machen.

Der PIC18 hat 8x8Bit Hardwaremultiplikation, werde mir dazu was 
überlegen, oder gibts dafür evtl. bereits fertige Routinen?

Vielen Dank für die Hilfe.


viele Grüße

Autor: Thorsten S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

1)für eine Multipliation gibt es ganz sicher funktionen und beispiele
2)für dein Probem auch, ist ja nun nichts aufregendes und vor allem 
nichts neues (wer suchet der findet)
3)ich würde mir eine Testversion eines C-Compilers runterladen und den 
kram in c ausmultiplizieren, den asm code dann einfach kopieren...

Gruß,
Thorsten

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.