Hallo, ich habe eine RTC Clock implementiert bzw. ein Demo Projekt und versuch jetzt die Sekunden auf dem Display anzugeigen. Die Darstellung über die Funktion void sek_display(int zahl) gibt jedoch immer nur den HEX-Wert aus. D.h. tm.sec wird von 0x00 bis 0x59 ausgegeben sek_display(0x59) gibt jedoch 89 zurück. Ich bräuchte also eine Funktion die den von tm.sec zurückgegebenen HEX-WERT direkt fälschlicherweise als DEZ-Wert zurückgibt!
Das ist kein "Hexwert". Das Format nennt sich "packed BCD". Gib einfach jedes Nibble einzeln aus, oder verwende eine Funktion, die einen Wert hexadezimal ausgibt.
Ein µC kennt keine Dezimalzahlen, nur binäre. Falls es "normale" Binärzahlen und nicht BCD sein sollen könnte man das in C so machen:
1 | uint8_t bcdToBin(uint8_t bcd) |
2 | {
|
3 | return (((bcd & 0xF0) >> 4) * 10) + (bcd & 0x0F); |
4 | }
|
aus der CT
1 | // Uhr Reg lesen
|
2 | uint8_t bcdtoint( uint8_t bcd ) |
3 | { return ((uint8_t)(((bcd>>4)*10)+(bcd&15))); |
4 | }
|
5 | |
6 | // Uhr Reg schreiben
|
7 | uint8_t int2bcd( uint8_t integer ) |
8 | { return ((uint8_t)(((integer/10)<<4)+(integer%10))); |
9 | }
|
Joachim B. schrieb: > aus der CT > // Uhr Reg lesen > uint8_t bcdtoint( uint8_t bcd ) > { return ((uint8_t)(((bcd>>4)*10)+(bcd&15))); > } > > // Uhr Reg schreiben > uint8_t int2bcd( uint8_t integer ) > { return ((uint8_t)(((integer/10)<<4)+(integer%10))); > } TIPTOP Funktioniert genau so!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.