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 envoie de caractère par µC 8051 sur port serie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Par défaut Problème envoie de caractère par µC 8051 sur port serie
    Bonjour,

    Actuellement je développe mes programmes pour µC 8051 (AT89S52) en assembleur.

    Je souhaite aussi développer en C mes programmes pour µC. Afin de réduire les temps de développement.
    J'utilise le logiciel KEIL µVision 3.
    Ma carte hardware est la suivante :
    µC : Atmel 89S52 à 11.059 MHZ
    Max232E

    Le programme que je souhaite écrire est très simple. Envoyer en permanence "HELLO WORLD"

    En assembleur pas de problème, je récupère sur mon logiciel (ecrit en labview) ou sur l'hyperterminal, "Hello world". Je peux faire n'importe qu'elle manipulation sur la carte (reset, on/off), ou sur le logiciel (on/off), j'ai toujours les HELLO WORLD.

    Maintenant avec le programme écrit en C, je peux recevoir les HELLO WORLD, mais je perd des caractères parfois.
    Si je fais des resets sur la carte ou des on/off, parfois je ne reçois pas les bon caractères. Même soucis avec des manipulations équivalente sur le logicel du PC.

    Ça fais 3 jours que je regarde partout et je ne trouve pas le problème. La seul solution que j'ai trouvé pour l'instant, c'est de faire une boucle de tempo d'environ 2000 itération entre chaque" printf " afin de retrouver en permanence les bons caractères.

    Je vous joint le code en C.
    Merci de votre aide car la solution que j'ai trouvé n'est pas viable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    /*------------------------------------------------------------------------------
    HELLO.C
     
    Copyright 1995-2005 Keil Software, Inc.
    ------------------------------------------------------------------------------*/
     
    #include <REG52.H>                /* special function register declarations   */
                                      /* for the intended 8051 derivative         */
     
    #include <stdio.h>                /* prototype declarations for I/O functions */
     
     
    #ifdef MONITOR51                         /* Debugging with Monitor-51 needs   */
    char code reserve [3] _at_ 0x23;         /* space for serial interrupt if     */
    #endif                                   /* Stop Exection with Serial Intr.   */
                                             /* is enabled                        */
     
     
    /*------------------------------------------------
    The main C function.  Program execution starts
    here after stack initialization.
    ------------------------------------------------*/
    void main (void) {
     
    /*------------------------------------------------
    Setup the serial port for 1200 baud at 16MHz.
    ------------------------------------------------*/
    #ifndef MONITOR51
        SCON  = 0x50;		        /* SCON: mode 1, 8-bit UART, enable rcvr      */
        TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
        TH1   = 0xFD;               /* TH1:  reload value for 9600 baud @ 11.059MHz   */
        TR1   = 1;                  /* TR1:  timer 1 run                          */
        TI    = 1;                  /* TI:   set TI to send first char of UART    */
    #endif
     
    /*------------------------------------------------
    Note that an embedded program never exits (because
    there is no operating system to return to).  It
    must loop and execute forever.
    ------------------------------------------------*/
      while (1) {
        P1 ^= 0x01;     		    /* Toggle P1.0 each time we print */
        printf ("Hello World\n");   /* Print "Hello World" */
      }
    }

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Je ne pense pas que le problème soit au niveau purement "C". Peut être une constante mal définie genre vitesse d'horloge, configuration des bits de stop ou autre. Le premier truc à faire, c'est de regarder la ligne tx à l'oscilloscope et de mesurer très précisément le temps d'un bit, ça éliminera une grosse partie de causes d'erreurs possibles. Une erreur de quelques pourcents a un comportement indéfini. Des fois ça passe, des fois ça ne passe pas. Le pire étant les oscillateurs internes qui dérivent avec la température.

    A+

    Pfeuh

Discussions similaires

  1. [Débutant] envoi de data directement en hexa sur port com
    Par stratus65 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/07/2013, 23h11
  2. [AJAX] envoi de mail par ajax
    Par freak999 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/02/2009, 15h56
  3. Réponses: 2
    Dernier message: 07/02/2008, 10h28
  4. problème de réception sur port serie
    Par thunderpat dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 27/12/2007, 17h19
  5. [VBA Excel]Envoie de données sur port serie
    Par Farbin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2006, 08h05

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