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.
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
Mauer schrieb:> Ist hier vielleicht ein Fehler drin.Danke.
bestimmt, sonst würde es ja das tun was du willst.
der code nach einen return wird selten erreicht.
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.
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...
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
Mauer schrieb:> PS: Ja schön, solche Aussagen bringen nunmal keinen weiter, entweder man> hilft jemanden oder lässt es einfach
Ich bin für lassen, denn das "Problem" solltest du selbst lösen können!
Beim Z80 Prozessor gibt es einen Assembler-Befehl der das macht, ich
weiß nur nicht mehr wie der hieß. (Doku lesen)
Ansonsten:
EinerStelle = Zahl % 10;
Zahl /= 10;
ZehnerStelle = Zahl % 10;
Zahl /= 10;
: : :
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.
char *p, buf[11];
sprintf( buf, "%010d", zahl);
for ( p=buf; *p; p+=2)
printf( "%.2s ", p);
Zu einfach ... ;)
Trennt das schon mal auf. Dann jeweils die Nibble schieben.
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)
Irgendwie hab ich das Gefühl, dir ist überhaupt nicht bewusst, was BCD
eigentlich ist.
Denn für ein einzelnes Byte ist das wirklich Pipifax. Da muss man noch
nicht einmal dividieren. 1 mal maskieren, 1 Vergleich und 1 Addition,
und die Chose ist gegessen.