Salut à tous ! J'appelle à votre !
J'ai fais un programme avec un PIC mais je veux convertir une valeur hexadécimal en décimal, comment fait-on ?????????
-----
Salut à tous ! J'appelle à votre !
J'ai fais un programme avec un PIC mais je veux convertir une valeur hexadécimal en décimal, comment fait-on ?????????
Bonjour,
c'est pour quoi faire?
car théoriquement ya rien à convertir...
t'as une valeur (une variable byte)...
disons :
varbyte = 0xFF
et ben c'est égal à :
varbyte = 255
et surtout égal à :
varbyte = 0b11111111
(le seul format que le pic "gère" réellement)
vede
;O]
______________
...
varbyte = 0xFF
Tu divises 0xFF par 100 (0x64 en héxa)
Résultat : 2 reste égal 0x37 en héxa
Tu divises 0x37 par 10 (0x0A en héxa)
Résultat : 5 reste égal 0x05 en héxa
Le reste est plus petit que 0x0A ? fin du traitement
La valeur décimal de 0xFF est donc 2 5 5
sur la carte du pic, les bcd, c'est en héxa, alors comment on fait pour les convertir ?
Merci, excuse moi j'avais répondu en reetardBonjour,
c'est pour quoi faire?
car théoriquement ya rien à convertir...
t'as une valeur (une variable byte)...
disons :
varbyte = 0xFF
et ben c'est égal à :
varbyte = 255
et surtout égal à :
varbyte = 0b11111111
(le seul format que le pic "gère" réellement)
vede
;O]
______________
...
je suis désolé mais je ne vois pas comment tu fais ?
varbyte = 0xFF
Tu divises 0xFF par 100 (0x64 en héxa)
Résultat : 2 reste égal 0x37 en héxa
Tu divises 0x37 par 10 (0x0A en héxa)
Résultat : 5 reste égal 0x05 en héxa
Le reste est plus petit que 0x0A ? fin du traitement
La valeur décimal de 0xFF est donc 2 5 5
Si tu veux convertir un octet hexa (de 0x00 à 0xFF) en décimal, tu appliques mon algorithme. J'ai pris l'exemple de convertir l'Héxa 0xFF en valeur décimal (soit 255)
non, ça j'avais compris, mais comment tu fais pour trouver que 0xFF/100=0x64
Ah, OK, je pensais à un autre truc, désolée, Merci
Excusez, si je n'ai pas tout compris :
La représentation d'un nombre est soit Binaire (=Hexa) soit BCD et je ne vois pas comment on peut passer simplement de l'un à l'autre.
J'ai déjà eu l'occasion de faire ça en assembleur pour 0<N<9999 et cela ne m'a pas paru particulièrement simple.
JP
En fait, un nombre est toujour stocké en base 2. Mais si on veut visualiser 0xFF sur un afficheur LED ou LCD alphanumérique, on préfère voir 255 plutôt que FF Donc on utilise un algorithme (du genre de ma réponse #3) et on récupère successivement les valeurs (dans un octet) 0x02 0x05 0x05
Affichage LED 7 segments
L'octet (entre 0x00 et 0x09) est transcodé en 7 segments par une table LUT (solution soft) ou un 7447 (solution hard) et on attaque les LEDs
Affichage LCD alphanumérique
L'octet (entre 0x00 et 0x09) est transcodé en ASCII en lui rajoutant 0x30 . Donc on a un octet entre 0x30 et 0X39 qui est envoyé sur le LCD.
PS : si le µC ne possède pas la division comme instruction, il faut la refaire par des soustractions successives
Pour un nombre ente 0 et 9999, on soustrait "X" fois la valeur décimal 1000 (0x3E8) jusqu'à temps que le résultat soit négatif. On rajoute 1000. Le premier chiffre (entre 0x00 et 0x09) est alors la valeur de "X-1"
On recommence avec soustraction successive de 100 (0x64)
On recommence avec soustraction successive de 10 (0xA)
CQFD
Salut,
Quelques sites à connaitre pour trouver des "moulinettes" et des utilitaires tous faits dans différents langages pour éviter de réinventer la roue:
1/ http://www.programmersheaven.com/
2/ http://www.sourcecodeonline.com/
3/ http://www.developpez.com/
4/ http://www.planet-source-code.com/
J'en oublie certainement
a+
Voui, et ce n'est pas une critique car on en trouve une grande variété sur le Web.
Ici par exemple :
http://www.piclist.com/techref/micro...adix/index.htm
On trouve une multitude de méthode dont certaines sont très performantes :
Par exemple celle ci :
http://www.piclist.com/techref/micro...b2bu-16b5d.htm
qui fonctionne en testant les bits 1 par 1.
JP