Forum: Mikrocontroller und Digitale Elektronik RTC HEX in DEZ


von Lissi (Gast)


Lesenswert?

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!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

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
}

von Joachim B. (jar)


Lesenswert?

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
}

von Lissi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.