Bonjour j'ai besoin d'un peu d'aide.
J'ai un morceau de programme qui me parait bizare.
Mon professeur me la donner comme sa mais il n'est pas bon pour mon PIC.
J'utilise un PIC 18F452, un compilateur MCC18 et j'écrit en C.
voici le code à traduire pour mon PIC. Car je n'y arrive pas.
Merci d'avanceCode:#include<delays.h> #include <memory.h> // Pour les memcpy entre autres #include <p18f452.h> // Pour le pic #include <stdio.h> // Pour le FILE #include <stdlib.h> // Pour les conversions #include <string.h> // strstr #include <sw_uart.h> #include <timers.h> // Pour les Timers #include <usart.h> // Pour la liaisons série #include <xlcd.h> #define MAXSIZE 256 void main (void) { char stringRead[MAXSIZE]; // buffer pour recevoir les trames FILE *gpsFile; // Handle de fichier gpsFile = fopen("Log.TXT","r"); // Ouverture du ficher if(gpsFile == NULL) { printf("Erreur d'ouverture du fichier\n"); return -1; } while(fgets(stringRead,MAXSIZE,gpsFile) !=NULL) // Lecture d'une trame ccomplète { if(memcmp(stringRead,"$GPGGA",6)==0) // Est-ce une GGA ? { decode_GPGGA(stringRead); } } fclose(gpsFile); // Fermeture du fichier return (0); } //fin main // **************************** // * Decodage de la trame GGA * // **************************** void decode_GPGGA(char *stringRead) { char *debut, *med,*fin, tmpbuff[32]; int l; latitude maLatitude; temps monTemps; memset(tmpbuff,0x00,32); // Initialisation de tmpbuff à 0x00h debut = strstr(stringRead,",")+1; // On cherche la première "," // Décodage de l'heure fin = strstr(debut,","); // On cherche la première "," l = fin - debut; med = strstr(debut,"."); // On cherche le point "." memcpy(&tmpbuff,debut,2); // On l'heure (2 chiffres) monTemps.heure = atoi(tmpbuff); // On converti en numérique memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes monTemps.minut = atoi(tmpbuff); // Idem memcpy(&tmpbuff,debut+4,2); // Idem pour les secondes pas de centièmes monTemps.secon = atoi(tmpbuff); // Convertion en numérique // Puis en affiche le tout printf("Heure %2d:%2d:%2d - ",monTemps.heure,monTemps.minut,monTemps.secon); // Décodage Latitude debut = strstr(debut,",")+1; // On cherche la première "," med = strstr(debut,"."); // On cherche le point "." fin = strstr(debut,","); // On cherche la suivante "," memcpy(&tmpbuff,debut,2); // Récupération des degés maLatitude.degre = atoi(tmpbuff); // On converti en numérique memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes maLatitude.minut = atoi(tmpbuff); // ASCII => Numérique l = (fin - med); // Nombre de décimales pour les secondes (en degés) memcpy(&tmpbuff,debut+4,l); // On les récupère maLatitude.secon = (atof(tmpbuff))*60.0; // ASCII => Numérique => en secondes debut = strstr(debut,",")+1; // On cherche la première "," // On affiche le tout (y compris N/S) printf("Latitude %2d-%2d-%2.3f %1.1s\n",maLatitude.degre,maLatitude.minut,maLatitude.secon,debut); // Décodage Longiture ici debut = strstr(debut,",")+1; // On cherche la première "," med = strstr(debut,"."); // On cherche le point "." fin = strstr(debut,","); // On cherche la suivante "," memcpy(&tmpbuff,debut,2); // Récupération des degés maLatitude.degre = atoi(tmpbuff); // On converti en numérique memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes maLatitude.minut = atoi(tmpbuff); // ASCII => Numérique l = (fin - med); // Nombre de décimales pour les secondes (en degrés) memcpy(&tmpbuff,debut+4,l); // On les récupère maLatitude.secon = (atof(tmpbuff))*60.0; // ASCII => Numérique => en secondes debut = strstr(debut,",")+1; // On cherche la première "," // On affiche le tout (y compris N/S) printf("Latitude %2d-%2d-%2.3f %1.1s\n",maLatitude.degre,maLatitude.minut,maLatitude.secon,debut);
-----