Verification
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Verification



  1. #1
    invitef97198f3

    Verification


    ------

    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
    }

    -----

  2. #2
    invite03481543

    Re : Verification

    Bonjour,

    je vois quelques erreurs.
    Notamment dans les if.
    On écrit if(x==y) pas if(x=y)

    par exemple vous écrivez: if(*recept=lecture);

  3. #3
    invite03481543

    Re : Verification

    for(i=0;i<43;i++)
    {
    while(PIR1bits.RCIF==0)
    {
    }
    if(*recept=lecture);
    }

    De manière plus général ça n'a aucun sens.

Discussions similaires

  1. Verification PC
    Par benji17 dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 4
    Dernier message: 07/09/2009, 19h57
  2. un vérification
    Par inviteaf3c03b7 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 22/09/2008, 21h18
  3. Verification
    Par invite52469444 dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 30/09/2007, 16h09
  4. Verification
    Par invite47810f95 dans le forum Chimie
    Réponses: 2
    Dernier message: 27/05/2006, 21h36
  5. verification
    Par invite319e33a2 dans le forum Chimie
    Réponses: 8
    Dernier message: 09/12/2004, 17h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.