IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec USART pour liaison RS232


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut Problème avec USART pour liaison RS232
    Bonjour à tous!
    J'ai un problème depuis ce matin. Je programme en C sous mplab pour un pic 18f252. Je dois communiquer avec un appareil par le biai d'un liaison RS232. Pour cela j'utilise la bibliotheque USART.h. Mais dans celle ci, j'ai un pépin!
    Voilà je veux utiliser la fonction:

    Elle marche et j'arrive a communiquer sans problème avec mon appareil lorsque je lui envoi comme parametre une chaine entre guillemets directement.
    Mais je voudrais pouvoir lui envoyer une chaine de caractères directement un peu de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char start[]= "start\n";
    putrsUSART(start);
    Mais là ça marche pas quelqu'un pourrait-il m'aider ?Merci par avance

    PS: Voilà la description de la fonction:
    putrsUSART Write a string from program memory to the USART.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /**********************************************************************
    *    Function Name:  putrsUSART                                       *
    *    Return Value:   void                                             *
    *    Parameters:     data: pointer to string of data                  *
    *    Description:    This routine transmits a string of characters    *
    *                    in ROM to the USART including the null.          *
    **********************************************************************/
    void putrsUSART(const rom char *data)

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par conico Voir le message
    Bonjour à tous!
    J'ai un problème depuis ce matin. Je programme en C sous mplab pour un pic 18f252. Je dois communiquer avec un appareil par le biai d'un liaison RS232. Pour cela j'utilise la bibliotheque USART.h. Mais dans celle ci, j'ai un pépin!
    Voilà je veux utiliser la fonction:

    Elle marche et j'arrive a communiquer sans problème avec mon appareil lorsque je lui envoi comme parametre une chaine entre guillemets directement.
    Mais je voudrais pouvoir lui envoyer une chaine de caractères directement un peu de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char start[]= "start\n";
    putrsUSART(start);
    Mais là ça marche pas quelqu'un pourrait-il m'aider ?Merci par avance

    PS: Voilà la description de la fonction:
    putrsUSART Write a string from program memory to the USART.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /**********************************************************************
    *    Function Name:  putrsUSART                                       *
    *    Return Value:   void                                             *
    *    Parameters:     data: pointer to string of data                  *
    *    Description:    This routine transmits a string of characters    *
    *                    in ROM to the USART including the null.          *
    **********************************************************************/
    void putrsUSART(const rom char *data)
    C'est pourtant clair. Cette fonction utilise une lecture de type 'code' (chaine de caractèree en PROM, par exemple), et n'accepte pas de données de type variable (RAM). C'est une caractéristique liée à l'utilisation du PIC. C'est assez étrange, mais c'est comme ça. Je suppose qu'il existe une autre fonction qui accepte des adresse 'mémoire'. (A vue de nez writeUSART() )

    http://www.mp3rrychristmas.com/files/microcontroller.c

    NOTA : le 'rs' de *putrs() signifie ROM String...

    Rien de tout cela n'a à voir avec le langage C.

  3. #3
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut,

    Je ne m'avance pas de trop, mais n'est-il pas possible de déclarer directement la chaîne en rom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const code char *cmdRS232[NBCOMMANDES] =
    {
    "start\n", "commande#2\n", "commande#3\n", "commande#4\n", "commande#5\n",
    }
     
    putrsUSART(cmdRS232[0]) ;
     
    writeUSART(cmdRS232[x]) ;
    Sur un µC à coeur 51 et SDCC cela marche bien.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Elijha Voir le message
    Salut,

    Je ne m'avance pas de trop, mais n'est-il pas possible de déclarer directement la chaîne en rom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const code char *cmdRS232[NBCOMMANDES] =
    {
    "start\n", "commande#2\n", "commande#3\n", "commande#4\n", "commande#5\n",
    }
     
    putrsUSART(cmdRS232[0]) ;
     
    writeUSART(cmdRS232[x]) ;
    Sur un µC à coeur 51 et SDCC cela marche bien.
    Ce serait parfaitement logique, mais peut être voulait-il un tableau de char modifiable...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut
    Bonjour! Désolé de ne pas avoir répondu plus tôt mais quelques petits soucis avec le net...
    Je tiens d'abord à vous remercier car je n'avais pas vu mon erreur! J'était partit pour utiliser la fonction putsUSART() et j'ai dû m'embrouiller car j'ai utilisé la fonction putRsUSART(). Sinon, en effet j'avais besoin d'une chaine modifiable! Je fesais du debug avec des chaines non modifiable à la base donc ça marchait sans problèmes!
    Enfin merci beaucoup pour l'aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/02/2006, 18h31
  2. Petit problème avec GCC pour l'Unicode...
    Par Nico*3-3 dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 29/01/2006, 17h12
  3. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08
  4. Réponses: 5
    Dernier message: 27/08/2003, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo