Décodage d'une chaine de caractères, PIC 16F en C
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Décodage d'une chaine de caractères, PIC 16F en C



  1. #1
    marvinl

    Décodage d'une chaine de caractères, PIC 16F en C


    ------

    Bonjour à tous,

    je viens vers vous pour quelques conseils concernant le décodage d'une chaine de caractère envoyée par port série.
    Mon application est pilotée par un soft en vb qui envoie une série de byte vers une carte électronique contrôlée par un pic.
    Pour chaque commande une trame de 5 Bytes est envoyée au pic ex: /A123.

    Je les décodes de la manière suivante:


    Char bufin[5];

    for ( i<6){
    if (UART1_Data_Ready()) { // If data is received,
    bufin[i] = UART1_Read(); // read the received data,
    i++;
    }
    }

    Je me demande si il est possible de faire une comparaison du genre if bufin=/A123 alors on fait ceci...
    Compilateur C de mikroe utilisé.

    Merci pour vos conseils...

    -----
    Dernière modification par marvinl ; 02/07/2012 à 12h41.

  2. #2
    PA5CAL

    Re : Décodage d'une chaine de caractères, PIC 16F en C

    Bonjour

    Il y a 0% d'électronique dans ce sujet, qui aurait plutôt sa place sur le forum « Programmation et langages, Algorithmique ».

    Pour une meilleure lisibilité, il est conseillé d'indenter le code et d'utiliser les balises [CODE]...[/CODE] (bouton # en mode d'édition avancé) afin de conserver l'indentation.


    Concernant la réponse au problème posé, en C on ne fait pas de test sur des chaînes de caractères avec un opérateur d'égalité (==) comme on le ferait par exemple en Pascal ou en Basic. On est obligé de tester tous les caractères, ou de faire appel à une fonction prévue à cet effet.

    Les fonctions standard strcmp() et strncmp() permettent de faire une telle comparaison (elles font partie de la librairie C_String fournie dans la version PRO du compilateur). Elles retournent une valeur nulle si l'égalité entre les deux chaînes comparées est constatée (attention, ce n'est pas vraiment naturel, puisqu'un résultat « faux » correspond alors à une égalité). La fonction strncmp() permet de spécifier le nombre de caractères à tester, et peut être utilisée sur des chaînes sans zéro terminal :

    Code:
    #include <string.h>
    
    ...
    
       if ( !strncmp(bufin, "/A123", 5) ) {
          // Si la sequence attendue est arrivee
          ...
    
       }
    
    ...
    Dernière modification par PA5CAL ; 02/07/2012 à 13h01.

  3. #3
    marvinl

    Re : Décodage d'une chaine de caractères, PIC 16F en C

    Merci c'est ça que je cherchais.

    Pour l'emplacement du message j'ai hésiter mais je l'ai placer dans la section électronique.

    Merci pour l'aide.

  4. #4
    PA5CAL

    Re : Décodage d'une chaine de caractères, PIC 16F en C

    Si les fonctions indiquées ne sont pas disponibles, il est très facile d'en coder un équivalent :

    Code:
    int strncmp( const char *s1, const char *s2, int n )
    {
       while (n--) {
          if (*s1 == *s2) {
             if (*s1 == '\0')
                return 0;
             s1++;
             s2++;
             continue;
          }
          if ((unsigned char)*s1 > (unsigned char)*s2)
             return 1;
          return -1;
       }
       return 0;
    }
    Dernière modification par PA5CAL ; 02/07/2012 à 13h11.

  5. A voir en vidéo sur Futura
  6. #5
    PA5CAL

    Re : Décodage d'une chaine de caractères, PIC 16F en C

    ... ou alors de réaliser un test simple :
    Code:
    const char seq1[] = "/A123";
    char *p, *q;
    int i;
    
    ...
    
       p = seq1;
       q = bufin;
       for (i=0; i<5; i++) {
          if (*p++ != *q++)
             break;
       }
       if (i==5)  {
          // Si la sequence attendue est arrivee
          ...
       }
    Dernière modification par PA5CAL ; 02/07/2012 à 13h21.

  7. #6
    marvinl

    Re : Décodage d'une chaine de caractères, PIC 16F en C

    Merci pour les infos.
    J'ai trouvé mon bonheur

Discussions similaires

  1. Transformation d'une chaine de caractères
    Par anthony_unac dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 11/10/2011, 17h35
  2. PIC 16F: synthèse d'une liaison série 16bit
    Par maximilien dans le forum Électronique
    Réponses: 5
    Dernier message: 08/11/2009, 16h27
  3. comment passer des pic 16F au pic 18F ?
    Par MorpheusPic dans le forum Électronique
    Réponses: 5
    Dernier message: 13/08/2008, 22h04
  4. PIC : Chaine de caractères
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2006, 17h49
  5. PIC: Gestion de chaîne de caractères.
    Par invite4c7a167b dans le forum Électronique
    Réponses: 1
    Dernier message: 24/05/2004, 14h13
Découvrez nos comparatifs produits sur l'informatique et les technologies.