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

Eine eigene Frage? Dieser Thread ist über 14 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.