Forum: Mikrocontroller und Digitale Elektronik BCD zu ASCII wandeln?!


von Jan.H (Gast)


Lesenswert?

Hallo Freunde ;)

Wie wandelt man am besten in "C" BCD zu ASCII?!
Ich habe ein Byte von einer RTC was im BCD Format kommt & das brauche 
ich jetzt als ASCII?!

jemand einen Vorschlag?

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

addiere 0x30

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan.H schrieb:
> Ich habe ein Byte von einer RTC was im BCD Format kommt & das brauche
> ich jetzt als ASCII?!
Mal angenommen, es sind 2 BCD-Ziffern im "wert" enthalten:
1
char zehner = (wert>>4)&0xf+'0';
2
char einer  =  wert    &0xf+'0';

: Bearbeitet durch Moderator
von Yamoto (Gast)


Lesenswert?

Einfach die BCD Zahl Binär nehmen und 48 dazu addieren?

von Nico S. (longri)


Lesenswert?

na wenn es im Byte vorliegt einfach 0x30 addieren

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Auch wenn ich hier offenbar in der Minderheit bin:
Ich bin der Meinung, dass in 8 Bit 2 BCD-Zahlen passen... ;-)

: Bearbeitet durch Moderator
von Detlev S. (drahtbruecke)


Lesenswert?

Öhm,

BCD ist doch der Binärwert der Zahlen 0-9.

0 = 0000
1 = 0001
...
9 = 1001

Alles was zu tun wäre ist eine Addition einer ASCII-"0" (= 48?) und 
deines BCD-Wertes. Achte darauf sie vorher auf gleiche Typen zu bringen 
sonst
wird bei jeder deiner Additionen zuerst der Typ konvertiert und dann 
erst addiert. Das kostet CPU-Zeit und führt zu unerwünschten 
Nebeneffekten.

Oder meinst du EBCDIC?

von Karl H. (kbuchegg)


Lesenswert?

Detlev S. schrieb:
> Öhm,
>
> BCD ist doch der Binärwert der Zahlen 0-9.

Dann würde man es Binärwert nennen.

Wenn du aber von einer RTC die Minuten als BCD Wert in einem Byte 
bekommst, ist die Sache sonnenklar.
Das Low-Nibble enthält eine Ziffer (0-9) und das High-Nibble enthält 
eine Ziffer (0-9)

Die Aussage: wir haben BCD-Zahlen macht nur dann Sinn, wenn beide Nibble 
eine Ziffer halten können. Ansonsten hat man einfach nur Binärzahlen im 
Wertebereich von 0 bis 9

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> Auch wenn ich hier offenbar in der Minderheit bin:
> Ich bin der Meinung, dass in 8 Bit 2 BCD-Zahlen passen... ;-)

Das wird dann als packed BCD bezeichnet (und dürfte das sein, was die 
RTC hier liefert).

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


Lesenswert?

Lothar Miller schrieb:
> Auch wenn ich hier offenbar in der Minderheit bin:
> Ich bin der Meinung, dass in 8 Bit 2 BCD-Zahlen passen... ;-)

Das nennt man dann typischerweise packed BCD

Aber ich folge dir gern dahingehend, daß die RTC ziemlich sicher packed 
BCD ausgibt und dem TE beim Formulieren seiner Frage nicht so ganz klar 
war, daß das Adjektiv packed hier wichtig ist.


XL

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Das wird dann als packed BCD bezeichnet
Ich lasse da der Einfachheit halber das packed immer weg und schließe 
mich der Meinung von Karlheinz an: wenn nur tatsächlich nur 1 BCD Zahl 
im Byte ist, dann habe ich einfach nur eine übliche Binärzahl im Bereich 
von 0..9. Erst wenn das obere Nibble auch verwendet wird und sich dessen 
Wertebereich von 0..9 bewegt, ist es eine BCD-Zahl.
Insofern gilt also "BCD = packed BCD"...

> (und dürfte das sein, was die RTC hier liefert)
Das machen die üblichen RTC, die ich so kenne...
http://electronics.stackexchange.com/questions/12606/why-do-real-time-clock-chips-use-bcd

von Peter D. (peda)


Lesenswert?

Lothar Miller schrieb:
> Das machen die üblichen RTC, die ich so kenne...

Bei BCD-RTCs haben die oberen Bits oft Sonderfunktionen (12/24Mode) oder 
sind undefiniert. Man muß sie daher ausmaskieren.

Ich nehme am liebsten RTC im 32Bit-Mode, die laufen 136 Jahre, danach 
muß man die Startzeit neu festlegen.

von Hannes L. (hannes)


Lesenswert?

Peter Dannegger schrieb:
> die laufen 136 Jahre, danach
> muß man die Startzeit neu festlegen.

Machst Du das selbst?

Duck&weg...

...

von Dieter B. (Gast)


Lesenswert?

Hannes Lux schrieb:
> Peter Dannegger schrieb:
>> die laufen 136 Jahre, danach
>> muß man die Startzeit neu festlegen.
>
> Machst Du das selbst?
>
> Duck&weg...
>
> ...

Wie würdest du es denn machen ?!

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.