Bonjour,
voila je réalise un projet avec un PIC18F4685, et je rencontre un petit problème :
j'envois en RS232 depuis l'hyperterminal de l'ordi des nombres compris entre 0 et 999 (ces valeurs n'ont pas d'importance car mon problème a lieu plus loin).
J'utilise un écran 2 lignes 16 caractères pour visualiser ce que je reçois, sur la première ligne les 3 caractères, et sur la deuxième une variable qui est le résultat de l'addition de ces 3 caractères. jusqu'à 255 je reçois bien ce que j'envois sur les deux lignes, mais si par exemple je passe à 300 ou plus les caractères sont toujours OK, mais la variable est fausse. voilà ce que j'ai comme code :
Je ne vois pas d'où vient le problème puisque ma variable est en 16 bits, et en fixant value1 à 500, value2 à 40 et value3 à 8 j'obtiens bien 548 donc pas de problème de dépassement, et j'ai bien fait la conversion caractère/décimal en enlevant 30 aux caractères (caractère '0') pour avoir des valeurs décimales correspondant : '6' => 6...Code:long value1; // variable 16 bits long value2; // variable 16 bits long value3; // variable 16 bits long value; // variable 16 bits value1 = (100 * (buffer_RS232 [0]-'0'); // centaines value2 = (10 * (buffer_RS232 [1]-'0'); // dizaines value3 = (buffer_RS232 [2]-'0'); // unités value = (value1 + value2 + value3); // valeur à afficher lcd_gotoxy (1, 1); // ligne 1 char. 1 LCD printf(lcd_putc, "%c%c%c", buffer_RS232 [0], buffer_RS232 [1], buffer_RS232 [2]);// affichage indépendant des caractères lcd_gotoxy (1, 2); // ligne 2 char. 1 LCD printf(lcd_putc, "%Lu", value); // affichage de la variable
Si quelqu'un pouvait m'aider ce serait sympa
merci!
-----





, sinon je viens d'essayer une autre formule qui a l'air de marcher, ça ne diminue pas le nombre de lignes mais j'espère que ça va fonctionner dans toutes les situations et que je vais pouvoir résoudre un autre problème moins important