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" */
  }
}