Bin2bcd, Bcd2bin dringend nötig (c code)

Gast #2557913
Lesenswert?

Hallo,
brauche mal dringend hilfe.
Ich bin grad dabei eine RV3029 Uhr zu Programmieren (in C) und dabei 
habe ich festgestellt, dass die werte beim einlesen der uhr in bcd 
umgewandelt, werden müssen, da die Uhr nur bcd format lesen kann und 
dann aus der uhr auszulesen und weiter zu verarbeiten müssen die bcd 
werte in binär umgewandelt werden, da c programm mit binär werten 
arbeitet.

Hat da jemand einen code für bin2bcd und bcd2bin.

Danke für euere Hilfe.
Gast #2557953
Lesenswert?

Hab zwar noch einbißchen Zeit, muss aber das ganze Programm auf Funktion 
testen, erst wenn ich dies eingebaut habe kann ich weiter machen,

Ich hab zwar einen code gefunden lediglich tut er nicht das was es 
machen soll
1
uint8_t bintobcd (uint8_t bin)
2
{
3
    uint8_t bcds=0;
4

5
    while(bin>=10000)
6
    {
7
        bin-=10000;
8
    }
9
    while(bin>=1000)
10
    {
11
        bcds+=0x1000;
12
        bin-=1000;
13
    }
14
    while(bin>=100)
15
    {
16
        bcds+=0x100;
17
        bin-=100;
18
    }
19
    while(bin>=10)
20
    {
21
        bcds+=0x10;
22
        bin-=10;
23
    }
24
    bcds+=bin;
25
    return bcds;
26
    UARTprintf("BCD: %d\n", bcds);
27
}

Ist hier vielleicht ein Fehler drin.Danke.
Persönliche Seite #2557982
Lesenswert?

Mauer schrieb:
> Na gut, dann entferne ich die letzten 2 Zeilen, zum testen will ich
> trotzdem den BCD wert ausgeben, wo kommt dann der Aufruf der Funktion
> printf() dann hin.

Wenn du das noch nicht mal weisst, solltest du woanders anfangen. Back 
to the basics, oder besser gleich zu BASIC.
http://www.google.de/search?q=c%2B%2B+f%C3%BCr+dummies&hl=de&prmd=imvnsb&source=univ&tbm=shop&tbo=u&sa=X&ei=DEhCT6DUD8Oy0QXms4SQDw&ved=0CFQQrQQ

Erinnert mich irgendwie an mein ETechnikstudium, wo einige im Labor aus 
zusammengestückelten Lösungen versuchten, irgendwas zum Laufen zu 
bringen. Sind dann bei der mündlichen Abnahme alle durchgefallen.

Meine (Zweier-)Gruppe hat der damals genau 3Minuten abgefragt, für ein C 
und ein ASM Projekt. Gruppen, die nur gestückelt und zusammengesucht 
haben, wurden ne Viertelstunde oder länger gequält, und durften das 
Labor wiederholen...
Gast #2558016
Lesenswert?

Also ich habe den code aus diesem Beitrag übernommen, hatte doch dazu 
nur den printf hinzugefügt, in diesem beitrag hat keiner gesagt, dass 
durch return bedingt ein fehler entsteht. Wie sieht der code dann nun 
richtig aus.

PS: Ja schön, solche Aussagen bringen nunmal keinen weiter, entweder man 
hilft jemanden oder lässt es einfach
Gast #2558137
Lesenswert?

ja da hab ich sowas gefunden gehabt, aber dies ist doch für dezimal 
zahlen geeignet, jedoch will ich doch eine binärzahl in bcd umwandeln, 
oder sollte ich erst eine binär in dezimal umwandeln und dann in bcd und 
umgekehrt.

1
void Convert_Int_Bcd ( unsigned long int Zahl)           //7-stellig
2
        {
3
    unsigned long BCD_Numb[7];
4
        BCD_Numb[1] = Zahl % 10;
5
        Zahl = Zahl/10;
6
        BCD_Numb[2] = Zahl % 10;
7
        Zahl = Zahl/10;
8
        BCD_Numb[3] = Zahl % 10;
9
        Zahl = Zahl/10;
10
        BCD_Numb[4] = Zahl % 10;
11
        Zahl = Zahl/10;
12
        BCD_Numb[5] = Zahl % 10;
13
        Zahl = Zahl/10;
14
        BCD_Numb[6] = Zahl % 10;
15
        Zahl = Zahl/10;
16
        BCD_Numb[7] = Zahl % 10;
17

18
        }
(Firma: EleLa - www.elela.de) #2558161
Lesenswert?

1
unsigned long Convert_Int_Bcd ( unsigned long int Zahl)           //7-stellig
2
        {
3
    unsigned long BCD_Numb;
4
        BCD_Numb = Zahl % 10;
5
        Zahl = Zahl/10;
6
        BCD_Numb |= ((Zahl % 10) << 4);
7
        Zahl = Zahl/10;
8
        BCD_Numb |= ((Zahl % 10) << 8);
9
        Zahl = Zahl/10;
10
        BCD_Numb |= ((Zahl % 10) << 12);
11
        Zahl = Zahl/10;
12
        BCD_Numb |= ((Zahl % 10) << 16);
13
: :
14
        return BCD_Numb;
15
        }

Geschicktes Anwenden der Operatoren führen zu gewünschten Ergebnissen. 
Kapitel 1 in jedem C Buch mal durchlesen (oder google mal nach 
Operatoren für C)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren