Le résultat est en binaire.
Pour passer en décimal je te propose une routine de conversion :
(Pour que ça marche, justifie à droite)
char s[6]; // on défini un tableau...
for (i = 0; i<6; i++)
{
s[i] = 0; // tableau à zero
}
Cette routine est optimisée, ne la modifie qu'en connaissance de cause.
void unslongtoa(unsigned long u16)
{
char i,temp;
s[5] = '\0';
for (i = 4; ;i--)
{
temp = u16 % 10;
temp += '0';
s[i]=temp;
if (i==0) break;
u16 /= 10;
}
}
Tu appelles la routine, en général dans le MAIN,
Il ne reste plus qu'à "récupérer" le résultat, par exemple :
for (i = 0; i < 5; i++)
{
putchar(s[i]); // vers un lcd ou rs232 etc..
}
Bonne prog, mictour
Et pourquoi veux-tu le résultat en décimal ?
Tu peux comparer un nb binaire avec un nb décimal.
Dernière modification par marc2009 ; 23/04/2009 à 20h34.
je vais voir si j'arrive a utiliser le nombre en binaire déjà. Par contre, je vois pas comment intégrer ta méthode dans le programme :sLe résultat est en binaire.
Pour passer en décimal je te propose une routine de conversion :
(Pour que ça marche, justifie à droite)
char s[6]; // on défini un tableau...
for (i = 0; i<6; i++)
{
s[i] = 0; // tableau à zero
}
Cette routine est optimisée, ne la modifie qu'en connaissance de cause.
void unslongtoa(unsigned long u16)
{
char i,temp;
s[5] = '\0';
for (i = 4; ;i--)
{
temp = u16 % 10;
temp += '0';
s[i]=temp;
if (i==0) break;
u16 /= 10;
}
}
Tu appelles la routine, en général dans le MAIN,
Il ne reste plus qu'à "récupérer" le résultat, par exemple :
for (i = 0; i < 5; i++)
{
putchar(s[i]); // vers un lcd ou rs232 etc..
}
Bonne prog, mictour
Tu peux aussi convertir 531 en binaire.
531 = 1000010011b = 213h
attends. Tu as le résultat en binaire dans tmp, nous sommes d'accord. Mais dans le if, je dois mettre une valeur en décimale ou une valeur en binaire ? ( if (tmp==213h) ...ou if (tmp==valeur binaire) ) le programme ne convertit pas la valeur dans le if en binaire/décimale ... ?
++
C'est toi qui te poses des questions, à mon avis, dans le if tu mets tmp==531.
Quelle est la notation par défaut bin, dec, hex pour les nombres ?
En Proton+, sans rien, c'est en décimal.
bah si tu mets rien, c'est en décimal. Quand tu mets 0b, c'est binaire et 0x c'est hexa.
sinon, le compilateur "traduit" lui même le 531 ? ( étant donné que tmp est une variable 16 bits en binaire )
++
OK, je voulais juste attirer ton attention, ce n'est pas valable pour tous les compilateurs.
Il me semble que MPLAB travaille par défaut en hex. (à confirmer)
Je pense que oui.
mais je pense que c'est une histoire de compilateur, car pour bu décimale, j'ai pas encore vu de préfixe à mettre.
sinon, je vais essayer.
Est ce que tu travailles avec MPLAB ?
Si oui, tu peux simuler et tu verras l'évolution de tes variables.
oui, mplab et cc5x.
Euh...je sais pas comment simuler Enfin, si je vois comment mais où je dois regarder... qu'est ce que je dois faire pour que ça évolue ( enfin tu vois ce que je veux dire )
++
Bonjour à vous deux,
Bien sur chaque compilateur a sa propre syntaxe, si non ça serait trop simple !
pour CC5X :
tmp = 531; // décimal
tmp = 0x213; // hexa
tmp = 0b.1000010011; ou, plus lisible : 0b.10.0001.0011; // binaire
Quant à l'appel de la routine il suffit de faire
unslongtoa(tmp);
avec le résultat dans s[i];
sauf que ... "uns long to a" comme son nom l'indique converti en ASCII !!!
Donc la routine :
for (i = 0; i < 5; i++)
{
putchar(s[i]); // vers un lcd ou rs232 etc..
}
envoie le 1, puis le 3, enfin le 5 codé en ASCII.
Avec toutes mes excuses pour vous avoir "enduit" d'erreur.
Sans autre précision (0b, ou 0x) le compilateur est en décimal.
donc je pourrais faire if (tmp==531) {...} ? OUI.
De même que if (tmp==0x213) etc...
Bonne fin de nuit ... mictour.
Bonjour mictour ,
donc je pourrai faire if (tmp==513) si j'utilise ta routine, c'est ça ? Ou ce n'est pas nécessaire de l'utiliser ( cc5x comprend ? )
Bonjour marc2009,
Tu utilises simplement le petite note du #29 :
uns16 tmp;
Puis faire cette affectation :
tmp.high8 = ADRESH;
tmp.low8 = ADRESL;
...Et tu oublies la routine unslongtoa, inutile pour ton test
comme je te le dis en #44.
Bonne prog, mictour.
Merci beaucoup pour ton aide mictour, on verra si c'est bon
--> je retourne à l'autre post
euh juste avec ta méthode ( de #46), faut que je justifie à droite ou à gauche ?
Merci
Bonjour marc2009,
A droite toutes !
Décaler à gauche sert surtout à ne garder que les 8 bits de poids fort.
Bonne journée, mictour.
Bonjour marc2009,
Pas si difficile :
par rapport au convertisseur A/D :
poids fort : ADRESSH
poids faible :ADRESSL
Dans une variable : poids faible : le ou les bits les plus à "droite"
poids fort : le ou les bits les plus à "gauche" selon le contexte ...
Bonne prog ... mictour.
oui mais je veux dire pourquoi par exemple avec ta méthode justifier a droite et pas à gauche ?
Et... que fais exactement? Je pensais que si l'on essayait "d'additionner" les 2 variables de 8 bits au sein d'une variable 16bits, ça ferait n'importe quoi ... ou ta méthode est différente ?!Code:tmp.high8 = ADRESH; tmp.low8 = ADRESL;
Merci
Je te joint un petit tableau ... j'espére que ça passe !
Bonne soirée, mictour
ah ok, car les 0 à gauche ne compte pas dans la conversion binaire/décimale/hexa etc .. c'est ca ?
Mais alors, comment fonctionne ta méthode ? car on dit que ça fait n'importe quoi si on "additionne" 2 variables 8 bits au sein d'une variable 16 bits ...
Merci
... Mais qui t'a parlé d'addition ?
Le pic place les bits 0 à 7 dans ADRESL,
et ceux de poids fort (Lol) dans ADRESH.
Dans l'exemple du tableau ça donne
(en supposant qu'il s'agisse du résultat d'une conversion) :
ADRESL (bit0 à bit7) = 19 en décimal
ADRESH bit8 et bit9) = 2 ....
Total, après avoir reconstitué le résultat : 2*256 + 19 = 531.
Alors ? mictour.
Pourquoi 2*256+19 ?
... Regarde le tableau, en même temps que le petit calcul du #55,
tu devrais y arriver tout seul. souviens-toi du principe de la numération de position.
Si tu un peu oublié voici un lien :
http://www.elektronique.fr/cours/cod...exadecimal.php
http://www.elektronique.fr/cours/cod...re-decimal.php
Bonne soirée, mictour.
Le cours 1 de Bigo traite des conversions bin/dec/hex.
ah c'est ça
oui moi et la conversion ... xD
0000 0010 0001 0011 donne bien après conversion 531
La calculatrice de Windows fait les conversions (en mode affichage scientifique).