2017-08-12 1 views
0

Je suis en train d'écrire une bibliothèque pour Module RTC dans Arduino où les données sont stockées dans BCD. Je sais comment le nombre décimal est converti en BCD mais a un problème en l'écrivant par programme. Après avoir cherché sur Internet, j'ai eu deux formules qui sont comme suit et fonctionnent parfaitement mais ne peuvent pas comprendre comment cela se calcule.BCD à décimal et décimal BCD

1. Formule 1

décembre DCB

(value/10 * 16) + (value % 10) 

Exemple

décembre -> 40 qui converti en en BCD qui est encore égal à 64.

Donc si je mets dans la formule, j'obtiens le même résultat.

(40/10 * 16) + (40%10) 
= (4*16) + 0 
= 64 

BCD à décembre

(value/16 * 10) + (value % 16) 

2. formula2

DEC BCD

val + 6 * (val/10) 

BCD à décembre

val - 6 * (val >> 4) 

Si quelqu'un peut l'expliquer dans les détails, il sera utile.

Merci à tous à l'avance.

Répondre

1

Les fonctions de conversion sont correctes:

byte bcdToDec(byte val) 
{ 
    return((val/16*10) + (val%16)); 
} 

byte decToBcd(byte val) 
{ 
    return((val/10*16) + (val%10)); 
} 

Pourquoi ce travail? Prenons un seul chiffre 5. En binaire, il est

0101 = 5 

Maintenant, nous allons prendre le même chiffre, le déplacer quatre places vers la gauche en ajoutant quatre zéros à droite:

0101 0000 = 50 BCD 

Voilà comment BCD travaux. Comme il faut quatre chiffres binaires pour représenter les chiffres décimaux 0 à 9, chaque chiffre décimal est représenté par quatre bits. La clé est que déplacer quatre places dans les multiplicateurs binaires ou divise par 16, c'est la raison pour les valeurs 16 dans les formules.

Donc, nous allons prendre 96:

0110 = 6 
1001 = 9 
1001 0110 = 96 BCD