Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

communication PC-PIC par USB-UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#31 Message par paulfjujo » lun. 21 déc. 2015 20:10

Voici le code que j'ai utilisé , mais avec ma carte en cours .. un Click 18F47J53 !
Il y a donc quelques differences , minimes..
Mon BP est à 1 au repos , 0 su appuyé
J'utilise l'UART2 au lieu de l'UART1
j'utilise le LCD 2119 I2C .. donc syntaxes differentes , mais reconnaissable..
j'utilise buffer2 au lieu de buffer

Attention si on envoie LF (10)+ CR(13) en fin de message .. en retour sur le LCD ..la ligne LCD disparait à cause du LF (10)
il vaut mieux envoyer CR + LF .. ou simplement CR dans ce cas de figure.

RAZ_UART2 nettoie le buffer et reinuitialise le poineteur index
Je stoppe l'interrupt RC2IE_bit=0 sur reception /validation de message .. et le rearme apres traitement du buffer
j'utilise aussi 2 index pour le buffer
i2 qui est local à l'interrupt .. non visible dans le main
et Index2 qui est l'image de I2 ,mais non mis à zero sur reception de CR .. il contient donc le nb de caracteres recus
peut etre utile ! mais non indispensable.
Traitement des erreurs OERR et FERR.. qui sont bloquantes si non traitees.
J'ai rajouté un compteur de message simpliste de 0 à 9 qui apparait en haut à droite de la 1ere ligne LCD
ce qui permet de "voir " une raffale d'envoi de message identique par incrementation dudit compteur..

Testé OK à 38400 bds et à 115200 bds
nota PIC à 48MHz!

Code : Tout sélectionner




void interrupt
() iv 0x0008 ics ICS_AUTO
{  
    static int i2
=0;
  if((RC2IF_bit==1) && (RC2IE_bit==1))
    {
        c2 = RCREG2 ; 
      
//if(OERR_bit)  //
      if(RCSTA2.B1)  // OERR de RCSTA2
      {
         CREN2_bit = 0;
         _asm nop;
         _asm nop;
         CREN2_bit = 1;
         _asm nop;
      }
      if(FERR2_bit)
      {
        RCREG2=0;
        _asm nop;
         c2 = RCREG2;// UART2_Read(); //c2 = RCREG2;
      }
      if ((c2==13) || (c2==10) || (i2 >=16))   // terminaison par CR  ou LF ou buffer plein
      {
         Flag_data_OK=1;
        buffer2[i2]=;
        c2=0;
        Index2=i2;    // Index pouvant etre utilisé dans le main
        i2=0;            // index local à l'interrupt
         RC2IE_bit=;   // pour blocage reception
       }
        else
       
{
          buffer2[i2]=c2;
          i2++;
          Index2=i2;
       }
    }
}



#define MAXLEN2  16 

void RAZ_UART2()
{
      RC2IE_bit=;
// nettoie le buffer 
      for (i=0;i<MAXLEN2;i++) buffer2[i]=0;
      Index2=0;
      c2=RCREG2; // vide buffer UART
      c2=0;
      Flag_data_OK=0;
      RC2IE_bit=;
}


 ..... main ................

 RAZ_UART2();
  Index=0;
  RC2IE_bit = 1;        // Enable UART_Remappable RX interrupt
  PEIE_bit = 1; // Enable Peripheral interrupt
  GIE_bit = 1; // Enable Global interrupt
   LCD_CLS();
    LCD_Write_CText(1,1,"Test RX Interrupt");
     k=0;
    while (1)
    {
     if (BP==0)
//    if ((BP==1) && (UART1_Tx_Idle() == 1))  // Check le BP et le buffer
       {    //  Attention : UART2 utilisé ici au lieu de UART1 !
            UART2_Write_Text("Hello World !");  // Envoie du texte
           UART2_Write(13);                    // envoie un CR    // invertion CR et LF, sinon le mesg sur LCD peut disparaitre !
            UART2_Write(10);                    // Envoie un LF
           // while (BP==1);                      // Anti rebond
            while (BP==0);                      //car  mon BP est à 1 au repos et donc BP==0 si appuyé
       }
    if (Flag_data_OK==1)  // Si la drapeau de fin de trame, on affiche le mot stocker dans le buffer
       {
          // echo sur terminal
          LCD_Write_CText(1,1,"Rx buffer=      ");
          //Lcd_out (1, 1, "Rx_buffer=" );
          LCD_Write_Chr_at(1,15,k+48);   // numero de  message 0 à 9
          buffer2[16]=0;    // Verouilage à 16 car maxi affichable sur LCD
          LCD_RAZ_Ligne(2);
          LCD_Write_Text(2,1,buffer2);
          // Lcd_out (2, 1, Rx_buffer );  // On l'affiche
          Flag_data_OK=0;         // On RAZ le flag
          Index2=0; // car Je ne RAZ pas l'index dans l'interrupt
          k++;
          if (k>9) k=0;
          RC2IE_bit=;
       }
   }
Aide toi, le ciel ou FantasPic t'aidera

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#32 Message par Jérémy » lun. 21 déc. 2015 20:36

Ton code envoie du lourd paul, comme d'hab . Je vais y aller piano, pour arriver jusqu'au tiens .
Déjà obtenir une fiabilité d'émission et de recepetion , serait un plus :oops:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#33 Message par Jérémy » lun. 21 déc. 2015 22:23

Bon voila un truc qui fonctionne très bien, inspiré de celui de Paul .
Frequence OSCà 8Mhz si je change , il ecrit n'importe quoi ??
Vitesse à 115200 bauds impeccable pas un bug

J'ai télécharger realterm pour dialoguer entre le PIC et le PC , car avec l'outil de MikroC j’avais des bugs incessants , quand je reprogrammais mon pic .

pensez vous qu'il est bien structuré ?

EDIT: j'ai rajouté les codes pour traiter les erreurs

Code : Tout sélectionner

/*##################################################################################
Programme de test pour liaison UART-USB sur carte EasyPIC_V7 avec PC
Fait par Jérémy pour FantasPic.fr
- Version du "22-12-2015"
- MikroC version 6.6.2
- PIC 18F46K22 FOSC à 8MHZ, Quartz extrene de 8Mhz, PLL désactivée
- Data-Shit du PIC : http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
- manuel et schéma de la carte : http://www.mikroe.com/downloads/get/1711/easypic_v7_manual_v104c.pdf
#################################################################################*/

#define BP PORTD.B0

// Connections de l'écran LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Fin connections LCD

// Déclaration des  variables utilisées  -------------------------------------------
char Rx_buffer[16] ;
int RegistreFlag_Data_OK=0i=0;

// Fin des varaibles----------------------------------------------------------------

// Prototypes  ---------------------------------------------------------------------
// FIN Prototypes

// Début Interruption---------------------------------------------------------------
void interrupt (){
   if ((
PIR1.RC1IF) && (RC1IE_bit)) // On check le FLAG de l'INT et si elle est autorisée
      
{
        
Registre=RCREG1;     // On enregsitre le buffer, qui a pour effet de RAZ le flag RC1IF

        
if (OERR1_bit)       // Gestion des erreurs ici over run erreur est traité
           
{                 // saturation du buffer. 2 bit stockées une 3ieme recue.
              
CREN1_bit 0// Remise à zéro de CREN1 pour effacer l'erreur
              
_asm nop;
              
_asm nop;
              
CREN1_bit 1;
              
_asm nop;
           }

        if (
FERR1_bit)       // Framing Error
           
{                // Il s'agit du temps ecoulé trop long pour recevoir le bit de stop
             
RCREG1='*';
             
_asm nop;
              
Registre RCREG1// On indique une erreur par l'afficahge d'une '*'
           
}

        if ((
Registre == 13) || (i>=16)) // Si on recoit "CR" ou qu'on dépasse la taille du buffer
           
{
             
RC1IE_bit 0;   // On interrompt la recetpion le temps de l'affichage
             
Flag_Data_OK=1;  // On léve le drapeau pour indiqué que le mot est fini
           
}
           else
           {
             
Rx_buffer[i]= Registre// On enregistre la lettre à l'emplacement de l'index dans le buffer
             
i++;                    // On incremente l'index pour la lettre suivante
            
}

      }
}
// Fin Interruption ----------------------------------------------------------------

//##################################################################################
//#########################      PROGRAMME PRINCIPAL       #########################
//##################################################################################
void main() {

    
ANSELB 0x00;            // Configure le PORTB en digital pour le LCD
    
ANSELC 0x00;            // PORTB en digital
    
ANSELD 0x00;            // PORTB en digital

    
TRISB 0x00;             // PORTB en sortie
    
TRISC 0x00;             // PORTC en sortie
    
TRISD 0xFF;             // PORTD en entrée

//----- config. interrutpion ------------------------------------------------------
    
INTCON.GIE 1;           // Activation Global des INT
    
INTCON.PEIE 1;          // Active l'INT sur periphérique
    
PIE1.RC1IE 1;           // Active l'INT sur reception EUSART
    
PIR1.RC1IF 0;           // bit=0 --> buffer vide
  //PIE1.TX1IE = 0;           // Active l'INT sur l'émission EUSART
  //PIR1.TX1IF = 1;           // bit=0 --> buffer plein
//---------------------------------------------------------------------------------

    
UART1_Init(57600);          // Initialisation de l'UART
    
delay_ms(100);            // Petite pause

    
Lcd_Init();               // Initialisation du LCD
    
Lcd_Cmd (_LCD_CLEAR);     // On efface l'écran
    
Lcd_Cmd (_LCD_CURSOR_OFF);// On arrete le clignotement du curseur
    
delay_ms(100);            // Petite pause

//#######################    BOUCLE INFINIE     ####################################
 
while (1)
 {
    if (
Flag_data_OK==1)      // Si la drapeau de fin de trame, on affiche le mot stocker dans le buffer
       
{
         for (;
i<=15;i++)     // On comble le reste de la ligne avec des espaces
           
Rx_buffer[i] = ' ';

        
Lcd_Out (21Rx_buffer); // on ecrit sur le LCD
        
Flag_data_OK 0;            // on reame notre drapeau
        
0;                       // on raz l'index
        
RC1IE_bit 1;              // On autoriser l'INT
       
}


    if ((
BP==1) && (UART1_Tx_Idle() == 1))  // Check le BP et le buffer
       
{
            
UART1_Write_Text("Hello World !");  // Envoie du texte
            
UART1_Write(13);       // envoie un CR
            
UART1_Write(10);       // Envoie un CL
            
while (BP==1);         // Anti rebond
            
i=0;                   // Pour le test l'appui sur l'emission efface l'ecran
            
Lcd_Cmd (_LCD_CLEAR);
       }


  }
}

//##################################################################################
//#########################      PROGRAMME SECONDAIRE       #########################
//##################################################################################  
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#34 Message par Jérémy » mar. 22 déc. 2015 09:04

Question :
Pourquoi quand je ne suis pas connecté à mon port COM ( realterm éteint), Il y a des bugs à l'envoi ? j' entend par la , que ma led d'indication d'envoi sur ma carte , ne s'allume qu'une fois sur 10/15 grosso modo quand j’appuie sur le BP? ( idle ?)
Quand je connecte le PORT impeccable , 1 appui => 1 envoi

Question :
Therefore, the FERR bit must be read before reading the RCREG.x

le fait de faire le test sur le bit ( if (FERR1_bit)) est-il interprété comme une lecture ? Sinon ne devrait pas le lire e l"enregistrant dans une variable ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#35 Message par paulfjujo » mar. 22 déc. 2015 11:03

:D On s'intruit tous les jours davantage !

Au niveau MCU, je ne pense pas qu'on fasse un equivalent de LECTURE entiere du registre RCSTAx
avec un Test bit à bit ... quoique au niveau microcode interne MCU ?
voir d'autres avis ....

Neammoins la lecture de RCREG efface au moins le premier byte fautif ..
le probleme est si le caractere suivant est aussi en FERR
d'ou peut etre l'usage d'un while , en cas d'erreurs successives.
et de la solution drastique via RCSTA1.SPEN
// If all receive characters in the receive FIFO have framing errors, repeated reads
// of the RCREGx will not clear the FERR bit.

En principe RCREG ne peut etre que lu ?
:?: à confirmer

sauf que sur mon dernier PIC18F47J53 datasheet:
bit 2 FERR: Framing Error bit
1 = Framing error (can be updated by clearing the RCREGx register and receiving the next valid byte)
0 = No framing error

----
alors que pour le PIC18F45K22
bit 2 FERR: Framing Error bit
1 = Framing error (can be updated by reading RCREGx register and receive next valid byte)
0 = No framing error

-----
à moins que ce soit une erreur datasheet
:?: .. à confirmer ?

format classique 8 bits ,N (sans parite) ,1 stop
on peut forcer l'erreur OERR et FERR en mettant le format d'envoi terminal 7,N,1 .. on a alors sur le terminal *@*@....
on peut forcer l'erreur FERR seule en mettant le format d'envoi terminal 7,N,2... on a alors sur le terminal @@@@....

Code : Tout sélectionner


 if 
(OERR1_bit)       // Gestion des erreurs ici over run erreur est traité
           {                 // saturation du buffer. 2 bit stockées une 3ieme recue.
              TXREG1='@';  // echo sur terminal pour signaler  erreur Overrun OERR 
              CREN1_bit = 0; // Remise à zéro de CREN1 pour effacer l'erreur
              _asm nop;
              _asm nop;
              CREN1_bit = 1;
              _asm nop;
           }
    while (FERR1_bit)       // Tant qu'on a  Framing Error
           { 
             
// Il s'agit du temps ecoulé trop long pour recevoir le bit de stop
            // RCREG1='*';    on ne peut pas ecrire dans RCREG  !
            // par contre on peut dans TXREG  '*' en echo sur terminal
             TXREG1='*'; /// echo sur terminal pour signaler erreur Frame   FERR
             _asm nop;
              //It is not necessary to clear the FERR bit. Reading the next character from the FIFO buffer will
             //  advance the FIFO to the next character and the next corresponding framing error.
           Registre = RCREG1; // lecture du reguistre pour effacer le defaut
          // The FERR bit can be forced clear by clearing the SPEN   bit of the RCSTAx register which resets the EUSART.
           // why not ! mais c'est peut etre un peu trop VIRULENT ! .. à mon avis 
           RCSTA1.SPEN=0;
           _asm nop;
          RCSTA1.SPEN=1;
           _asm nop;
          }
 


corrigé whilef par while
Modifié en dernier par paulfjujo le mar. 22 déc. 2015 14:17, modifié 1 fois.
Aide toi, le ciel ou FantasPic t'aidera

communication PC-PIC par USB-UART
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#36 Message par Guest » mar. 22 déc. 2015 12:35

Bonjour

Paul je ne vois rien.Pour:
Oerr débordement du buffer, tu passes bien de 0->1 CREN
Ferr erreur de synchronisation (bit stop a zéro au lieu de 1) pour ce bit ainsi que rx9d il faut bien sur les lire avant de lire RCREG puis revalidation du port.

Pour l’écriture du RCREG je ne peux pas sur un 184552 écrire dans ce registre

A+

communication PC-PIC par USB-UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#37 Message par paulfjujo » mar. 22 déc. 2015 14:23

maï a écrit :Bonjour
Paul je ne vois rien.Pour:
Oerr débordement du buffer, tu passes bien de 0->1 CREN

OUI !

Pour l’écriture du RCREG je ne peux pas sur un 184552 écrire dans ce registre
A+


Pour mon PIC18F47J53
En mode debug MikroC on peut ecrire dans RCREG2 .. mais je pense que c'est juste dans une case memoire du debugger et non dans l'UART
car le test suivant, en reel avec le hardware , me donnes en retour RCREG=0 ..donc l'ecriture ne passe pas
=> erreur Datasheet !

Code : Tout sélectionner



 txt
=&TEXTE[0];
  Etat= UART2_Assign_To_PPS() ;
  if (Etat==2) Drapeaux.PPS=1; else Drapeaux.PPS=0;
   UART2_Init(115200);
  Delay_ms(200);
  UART2_Write(CLS);
  Delay_ms(500);
   c3=RCREG2; // vide buffer
   c3=RCREG2;

    RCREG2=99;   // test ecriture dans RCREG2
   _asm nop;
   c3=RCREG2;   // et relecture
    _asm nop;
    RCREG2=12;   // test ecriture dans RCREG2
     _asm nop;
     c4=RCREG2;    // et relecture
     _asm nop;

  UART2_Write_CText("\r\nRecupere c3 et c4  pour affichage contenu : ");
  ByteToStr(c3,txt);
  UART2_Write_Text(txt);
  UART2_Write(TAB);
  ByteToStr(c4,txt);
  UART2_Write_Text(txt);
  CRLF2();



14:16:20.093> Recupere c3 et c4 pour affichage contenu : 0 0
Aide toi, le ciel ou FantasPic t'aidera

communication PC-PIC par USB-UART
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#38 Message par Guest » mar. 22 déc. 2015 15:27

paulfjujo a écrit :OUI !



quel cri :lol: ce n’était qu'une affirmation exit

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#39 Message par Jérémy » mar. 22 déc. 2015 17:55

Bon la simulation d'erreur est bizarre . J'ia pas trop compris à mon avis .

je suis passé en mode 7N1 . et j'envoie des caractères * quand j'en envoie 18 ça me mes le message d'erreur sur le LCD ; mais la réaction est plutôt aléatoire !

Voici mon code:

Code : Tout sélectionner

/*##################################################################################
Programme de test pour liaison UART-USB sur carte EasyPIC_V7 avec PC
Fait par Jérémy pour FantasPic.fr
- Version du "21-12-2015"
- MikroC version 6.6.2
- PIC 18F46K22 FOSC à 8MHZ, Quartz extrene de 8Mhz, PLL désactivée
- Data-Shit du PIC : http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
- manuel et schéma de la carte : http://www.mikroe.com/downloads/get/1711/easypic_v7_manual_v104c.pdf
#################################################################################*/

#define BP PORTD.B0

// Connections de l'écran LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Fin connections LCD

// Déclaration des  variables utilisées  -------------------------------------------
char Rx_buffer[16] ;
int RegistreFlag_Data_OK=0i=0Flag_Erreur=0;

// Fin des varaibles----------------------------------------------------------------

// Prototypes  ---------------------------------------------------------------------
// FIN Prototypes

// Début Interruption---------------------------------------------------------------
void interrupt (){
   if ((
PIR1.RC1IF) && (RC1IE_bit)) // On check le FLAG de l'INT et si elle est autorisée
      
{
        
Registre=RCREG1;     // On enregsitre le buffer, qui a pour effet de RAZ le flag RC1IF

        
if (OERR1_bit)       // Gestion des erreurs ici over run erreur est traité
           
{                 // saturation du buffer. 2 bit stockées une 3ieme recue.
              
CREN1_bit 0// Remise à zéro de CREN1 pour effacer l'erreur
              
Flag_Erreur 1;
              
_asm nop;
              
CREN1_bit 1;
              
_asm nop;
           }

        while (
FERR1_bit)       // Framing Error
           
{                // Il s'agit du temps ecoulé trop long pour recevoir le bit de stop
             
TXREG1='*';    // On indique une erreur par l'affichage d'un echo '*'
             
Flag_Erreur 1;
             
Registre RCREG1;
           }

        if ((
Registre == 13) || (i>=16)) // Si on recoit "CR" ou qu'on dépasse la taille du buffer
           
{
             
RC1IE_bit 0;   // On interrompt la recetpion le temps de l'affichage
             
Flag_Data_OK=1;  // On léve le drapeau pour indiqué que le mot est fini
           
}
           else
           {
             
Rx_buffer[i]= Registre// On enregistre la lettre à l'emplacement de l'index dans le buffer
             
i++;                    // On incremente l'index pour la lettre suivante
            
}

      }
}
// Fin Interruption ----------------------------------------------------------------

//##################################################################################
//#########################      PROGRAMME PRINCIPAL       #########################
//##################################################################################
void main() {

    
ANSELB 0x00;            // Configure le PORTB en digital pour le LCD
    
ANSELC 0x00;            // PORTB en digital
    
ANSELD 0x00;            // PORTB en digital

    
TRISB 0x00;             // PORTB en sortie
    
TRISC 0x00;             // PORTC en sortie
    
TRISD 0xFF;             // PORTD en entrée

//----- config. interrutpion ------------------------------------------------------
    
INTCON.GIE 1;           // Activation Global des INT
    
INTCON.PEIE 1;          // Active l'INT sur periphérique
    
PIE1.RC1IE 1;           // Active l'INT sur reception EUSART
    
PIR1.RC1IF 0;           // bit=0 --> buffer vide
  //PIE1.TX1IE = 0;           // Active l'INT sur l'émission EUSART
  //PIR1.TX1IF = 1;           // bit=0 --> buffer plein
//---------------------------------------------------------------------------------

    
UART1_Init(57600);          // Initialisation de l'UART
    
delay_ms(100);            // Petite pause

    
Lcd_Init();               // Initialisation du LCD
    
Lcd_Cmd (_LCD_CLEAR);     // On efface l'écran
    
Lcd_Cmd (_LCD_CURSOR_OFF);// On arrete le clignotement du curseur
    
delay_ms(100);            // Petite pause

//#######################    BOUCLE INFINIE     ####################################
 
while (1)
 {
    if (
Flag_data_OK==1)      // Si la drapeau de fin de trame, on affiche le mot stocker dans le buffer
       
{
         for (;
i<=15;i++)     // On comble le reste de la ligne avec des espaces
           
Rx_buffer[i] = ' ';

        
Lcd_Out (21Rx_buffer); // on ecrit sur le LCD
        
Flag_data_OK 0;            // on reame notre drapeau
        
0;                       // on raz l'index
        
RC1IE_bit 1;              // On autoriser l'INT
       
}


    if (((
BP==1) && (UART1_Tx_Idle() == 1)))  // Check le BP et le buffer
       
{
            
UART1_Write_Text("Hello World !");  // Envoie du texte
            
UART1_Write(13);       // envoie un CR
            
UART1_Write(10);       // Envoie un CL
            
while (BP==1);         // Anti rebond
            
i=0;                   // Pour le test l'appui sur l'emission efface l'ecran
            
Lcd_Cmd (_LCD_CLEAR);
       }

       if (((
Flag_Erreur==1) && (UART1_Tx_Idle() == 1)))  // Check le BP et le buffer
       
{
            
UART1_Write_Text("Erreur");  // Envoie du texte
            
Lcd_Out (11"Erreur");
            
UART1_Write(13);       // envoie un CR
            
UART1_Write(10);       // Envoie un CL
            
Flag_Erreur=0;
            
delay_ms(1000);
            
Lcd_Cmd (_LCD_CLEAR);
       }

  }
}

//##################################################################################
//#########################      PROGRAMME SECONDAIRE       #########################
//################################################################################## 
C'est en faisant des erreurs, que l'on apprend le mieux !!!

communication PC-PIC par USB-UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#40 Message par Jérémy » mar. 22 déc. 2015 18:21

Sinon voyez vous d'autres choses à connaitre sur cette liaison, que je pourrais testé ? ou améliorer ?

Merci !
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités