char i=1; //variable globale bit test_GGA=0; bit ordre_depart=0; unsigned char nom[3]; //nom de la trame unsigned char heure[9] ; //heure unsigned char latitude[10]; //latitude unsigned char indicNS; //indicateur N/S unsigned char longitude[10]; //longitude unsigned char indicEO; //indicateur E/O unsigned char fiabilite; //indic de fiabilité unsigned char altitude[5]; //altitude void main() { USART_init(4800); LCD_Init(&PORTB); // Initialize LCD connected to PORTB LCD_Cmd(LCD_CLEAR); // Clear display LCD_Cmd(LCD_CURSOR_OFF); // Turn cursor off LCD_Out(1,1, "hello"); // Print text to LCD, 2nd row, 1st column } void SWserial_Shift_R_Data() { if(SWserial_Count & 0x0F == 0x08)// bit de stop: arrêter la lecture { Swserial_Status.0 = 0; // pas de lecture en cours; SWserial_count &= 0xF0; // RAZ compteur lecture t0con.TIMER0ON = 0; // Désactivation du timer intcon.INT0IE = 1; // Autoriser à nouveau les interruptions Rx lecture_GGA(SWserial_RX_Byte); //on traite SWserial_RX_Byte avant la prochaine réception } else { SWserial_RX_Byte.7 = SW_RX; // Placement du bit dans SWserial_RX_Byte SWserial_RX_Byte >>= 1; // Décalage d'un bit à droite SWserial_Count++; // Incrément du compteur lecture } } void lecture_GGA(char SWserial_RX_Byte){ if (SWserial_RX_Byte=='$'){ i=-1; ordre_depart=1; } if (ordre_depart){ i++; charRead=SWserial_RX_Byte; switch(i){ /* Enregistrement du nom de la trame*/ case 3: nom[0]=charRead; break; case 4: nom[1]=charRead; break; case 5: nom[2]=charRead; break; } if (nom[0]='G' && nom[1]='G' && nom[2]='A' ){ test_GGA=1; } else{ ordre_depart=0; } if (test_GGA){ switch (i){ /* Enregistrement de l'heure*/ case 7: if (charRead==','){// si virgule, on passe i=16; // au bloc suivant } else{ heure[0]=charRead; } break; case 8: if (charRead==','){ i=16; } else{ heure[1]=charRead; } break; case 9: if (charRead==','){ i=16; } else{ heure[2]=charRead; } break; case 10: if (charRead==','){ i=16; } else{ heure[3]=charRead; } break; case 11: if (charRead==','){ i=16; } else{ heure[4]=charRead; } break; case 12: if (charRead==','){ i=16; } else{ heure[5]=charRead; } break; case 13: if (charRead==','){ i=16; } else{ heure[6]=charRead; } break; case 14: if (charRead==','){ i=16; } else{ heure[7]=charRead; } break; case 15: if (charRead==','){ i=16; } else{ heure=charRead; } break; /* Enregistrement de la latitude*/ case 17: if (charRead==','){ i=27; } else{ latitude[0]=charRead; } break; case 18: if (charRead==','){ i=27; } else{ latitude[1]=charRead; } break; case 19: if (charRead==','){ i=27; } else{ latitude[2]=charRead; } break; case 20: if (charRead==','){ i=27; } else{ latitude[3]=charRead; } break; case 21: if (charRead==','){ i=27; } else{ latitude[4]=charRead; } break; case 22: if (charRead==','){ i=27; } else{ latitude[5]=charRead; } break; case 23: if (charRead==','){ i=27; } else{ latitude[6]=charRead; } break; case 24: if (charRead==','){ i=27; } else{ latitude[7]=charRead; } break; case 25: if (charRead==','){ i=27; } else{ latitude=charRead; } break; case 26: if (charRead==','){ i=27; } else{ latitude[9]=charRead; } break; /* Enregistrement de l'indicateur N/S*/ case 28: if (charRead==','){ i=29; } else{ indicNS=charRead; } break; /* Enregistrement de la longitude*/ case 30: if (charRead==','){ i=40; } else{ longitude[0]=charRead; } break; case 31: if (charRead==','){ i=40; } else{ longitude[1]=charRead; } break; case 32: if (charRead==','){ i=40; } else{ longitude[2]=charRead; } break; case 33: if (charRead==','){ i=40; } else{ longitude[3]=charRead; } break; case 34: if (charRead==','){ i=40; } else{ longitude[4]=charRead; } break; case 35: if (charRead==','){ i=40; } else{ longitude[5]=charRead; } break; case 36: if (charRead==','){ i=40; } else{ longitude[6]=charRead; } break; case 37: if (charRead==','){ i=40; } else{ longitude[7]=charRead; } break; case 38: if (charRead==','){ i=40; } else{ longitude=charRead; } break; case 39: if (charRead==','){ i=40; } else{ longitude[9]=charRead; } break; /* Enregistrement de l'indicateur E/O*/ case 41: if (charRead==','){ i=42; } else { indicEO=charRead; } break; /* Enregistrement de la fiabilité*/ case 43: if (charRead==','){ i=44; } else { fiabilite=charRead; } break; /* nombre de satellites (non enregistré)*/ case 45: if (charRead==','){ i=47; } case 46: if (charRead==','){ i=47; } /* dilution horizontale (non enregistrée)*/ case 48: if (charRead==','){ i=53; } case 49: if (charRead==','){ i=53; } case 50: if (charRead==','){ i=53; } case 51: if (charRead==','){ i=53; } case 52: if (charRead==','){ i=53; } /* Enregistrement de l'altitude*/ case 54: if (charRead==','){ i=60; } else { altitude[0]=charRead; } break; case 55: if (charRead==','){ i=60; } else { altitude[1]=charRead; }; break; case 56: if (charRead==','){ i=60; } else { altitude[2]=charRead; } break; case 57: if (charRead==','){ i=60; } else { altitude[3]=charRead; } break; case 58: if (charRead==','){ i=60; } else { altitude[4]=charRead; } break; case 59: if (charRead==','){ i=60; } else { altitude[5]=charRead; } break; case 61: ordre_depart=0; test_GGA=0; break; } } }