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
    inviteb2a95bac

    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...

    -----

  2. #2
    invite936c567e

    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
          ...
    
       }
    
    ...

  3. #3
    inviteb2a95bac

    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
    invite936c567e

    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;
    }

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

    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
          ...
       }

  7. #6
    inviteb2a95bac

    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 invitefd4e7c09 dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 11/10/2011, 18h35
  2. PIC 16F: synthèse d'une liaison série 16bit
    Par invite2de7076a dans le forum Électronique
    Réponses: 5
    Dernier message: 08/11/2009, 17h27
  3. comment passer des pic 16F au pic 18F ?
    Par invitee5da1686 dans le forum Électronique
    Réponses: 5
    Dernier message: 13/08/2008, 23h04
  4. PIC : Chaine de caractères
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2006, 18h49
  5. PIC: Gestion de chaîne de caractères.
    Par invite4c7a167b dans le forum Électronique
    Réponses: 1
    Dernier message: 24/05/2004, 15h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...