Bonjour,
au bout de mon troisième post j'ai compris qu'il ne fallait pas demander d'aide donc j'ai travailler tout seul. Je demande juste un verification du code source. J'utilise toujours un PIC18F452, un compilateur MCC18, un écran LCD commander en 4 bits et le module GPS.
Le but de se code est de recvoir une trame nmea et de l'afficher.
Merci d'avance pour la vérification.
Code:/*fonction detection_reception et fonction lecture_trame*/ #include <p18f452.h> #include <delays.h> #include <usart.h> //Déclaration des ports #define DATA_PORT PORTD #define TRIS_DATA_PORT TRISD #define RS_PIN PORTDbits.RD2 /* ligne RS */ #define TRIS_RS DDRDbits.RD2 /* config ligne RS */ #define E_PIN PORTDbits.RD3 /* ligne E */ #define TRIS_E DDRDbits.RD3 /* config ligne E */ #define lecture RCREG /*registre de reception USART*/ //Variables globales char comp[]="$GPGGA,"; char minute[]="min"; char recept[43]; char u; int i; //Prototypes des fonctions utilisateur void detect (void); //déclaration fonction Commande initialisation void init (unsigned char cmdinit); void init2 (void); //déclaration des fonctions Commande et d'Ecriture d'une donnée void WriteCmdXLCD(unsigned char cmd); void WriteDataXLCD(char data); void main (void) { //initilisation USART SPBRG = 25; /* configure la vitesse à 9600 BAUD N 8 1*/ //Enable Usart Receiver interrupt: RCSTA = 0x90; /* active la reception de l'USART*/ //dectection for(i=0;i<6;i++) { while(PIR1bits.RCIF==0){ } if(comp[i]==lecture) i=i+1; else i=0; } //lecture for(i=0;i<43;i++) { while(PIR1bits.RCIF==0){ } if(*recept=lecture); } //décodage et affichage init2(); u=0; for(i=0;i<7;i++) { if (i=3) WriteDataXLCD('H');//ecriture du caractère 'H' if (i=6) WriteDataXLCD(minute[u]);u++;//ecriture de la chaine 'min' if (i=12) WriteDataXLCD('s');//ecriture du caractère 's' WriteDataXLCD(recept[u]);u++; } } void init2 (void) { init (0x30);// mode 8 bits sur interface 8 bits init (0x30);// mode 8 bits sur interface 8 bits init (0x30);// mode 8 bits sur interface 8 bits init (0x20);// mode 4 bits sur interface 8 bits WriteCmdXLCD(0X28);//mode 4 bits et 2 lignes WriteCmdXLCD(0X0F);//afficheur en fonction D=1 Le curseur C=1 et le clignotement B=1 WriteCmdXLCD(0X01);//efface la mémoire de donnée et ramène le curseur à l'@0x00 WriteCmdXLCD( 0X06);//le curseur se déplace vers la droite I/D=1 //l'affichage n'accompagne pas le curseur dans son déplacement S=0 } //fonction Commande d'initialisation on envoie que les 4 bits de poids fort void init (unsigned char cmdinit) { TRIS_RS=0; TRIS_E=0; RS_PIN = 0; TRIS_DATA_PORT &= 0x0f; DATA_PORT &= 0x0f;//envoi des bits de poids fort DATA_PORT |= cmdinit&0xf0; E_PIN = 1; Delay10TCYx(1);//5us E_PIN = 0; Delay10KTCYx (10);// 50ms } //fonction Commande on envoie les 4 bits de poids fort puis les 4 bits de poids faible void WriteCmdXLCD(unsigned char cmd) { TRIS_RS=0; TRIS_E=0; RS_PIN = 0; TRIS_DATA_PORT &= 0x0f; DATA_PORT &= 0x0f;//envoi des bits de poids fort DATA_PORT |= cmd&0xf0; E_PIN = 1; Delay10TCYx(1);//5us E_PIN = 0; DATA_PORT &= 0x0f; //envoi des bits de poids faible DATA_PORT |= (cmd<<4)&0xf0; E_PIN = 1; Delay10TCYx(1);//5us E_PIN = 0; Delay10KTCYx (10);//50ms remplace la lecture du BusyFlag } //fonction Ecriture on envoie les 4 bits de poids fort puis les 4 bits de poids faible void WriteDataXLCD(char data) { TRIS_RS=0; TRIS_E=0; RS_PIN = 1; TRIS_DATA_PORT &= 0x0f; DATA_PORT &= 0x0f; //envoi des bits de poids fort DATA_PORT |= data&0xf0; E_PIN = 1; Delay10TCYx(1);//5us E_PIN = 0; DATA_PORT &= 0x0f; //envoi des bits de poids faible DATA_PORT |= ((data<<4)&0xf0); E_PIN = 1; Delay10TCYx(1);//5us E_PIN = 0; Delay10KTCYx (10);//50ms remplace la lecture du BusyFlag }
-----