Bonjour,
J'ai un projet scolaire avec un PIC16F1459, je suis sous MPLAB IDE.
En gros le code ci-dessous permet d'envoyer des données envers un écran LCD de chez 4D System. Elle modifie la valeur d'un objet de l'écran.
La communication vers l'écran est une communication UART avec une trame spécifique, la trame doit être envoyé en hexadécimal.
Code:#include <16F1459.h> #fuses INTRC_IO,NOWDT,NOPROTECT, #use delay(clock=16000000) #use rs232(baud=9600, xmit=PIN_B7,rcv=PIN_B5) //------DECLARATION FONCTION------// void checksum(); //--------------------------------// int aff[6]; int i = 0; int check; int msb; int lsb; int temp = 30; #define BP PIN_C6 void main (void) { setup_oscillator(OSC_16MHZ); // Tableau pour la trame aff[0] = 0x01; aff[1] = 0x0F; aff[2] = 0x00; aff[3] = msb; //Donnée msb aff[4] = lsb; //Donnée lsb aff[5] = check; //Checksum while (1) { if (input(BP)) // Test si bouton poussor enfoncé { msb = 0x19; lsb = 0x8F; checksum(); for(i=0; i<6; i++) { putchar(aff[i]); // Envoi de la trame hexadécimal } delay_ms(200); } } void checksum(void) { check = aff[0]^aff[1]^aff[2]^aff[3]^aff[4]; }
Dans mon projet un module de température sera ajouté, la valeur que j'obtiens est en DÉCIMAL.
Ici je simule cette valeur par la variable temp = 30;
Là ou j'arrive pas c'est de convertir cette valeur en hexadécimal sur 16bit > LSB ET MSB
Donc pour 30 j'aimerai obtenir 0x1E ou pour une valeur en décimal comme 30.01 > 0x0BB9
Voilà si quelqu'un aurait une idée comment faire je serai reconnaissant.
Cdt
-----