Seul un petit problème 89s52 uart

G

garg29

Guest
Salut les amis,
je suis tente de faire la communication entre les 2-89S52 microcontrôleurs.

La première est la transmission de "BONJOUR"
et autres est le même récepteur
et l'afficher sur l'écran LCD (16x2).La transmission est OK comme je l'ai vérifié le résultat sur Hyperterminal.Réception de fin est également l'affichage "BONJOUR", mais avec un petit problème, lors de la première instance, le mot «BONJOUR» est affiché correctement, mais après
qu'il est affiché en tant que "HHELLO" c'est-à-dire le caractère «H» est affiché deux fois.Dans la fonction «void uart_gets (char * s)"
J'ai essayé de mettre une ligne "s -," ce affichés "ELLO" ( "H" a disparu), premier temps, mais "BONJOUR" (bon) continoulsy après.ci-dessous est le code.
Merci à tous pour donner le temps de lire mon problème.Observe.
Dernière édition par garg29 le 04 juin 2009 10:36, édité 2 fois au total

 
Code:char uart_getc (void) / / Obtention de caractères à partir de l'UART

(

/ / SBUF = 0; / / pourquoi ?????

while (RI == 0); RI = 0;

retour SBUF;

)
 
Merci pour la réponse Kurenai_ryu.Je viens d'essayer de mettre SBUF = 0; mais que did'nt fait aucun changement.J'ai aussi essayé str [7], mais qui
n'a pas aidé.

Voici mon code pour LCD
Code:void

lcd_puts (const char * s)

(

LCD_RS = 1; / / écriture des caractères

while (* s)

lcd_write (* s );

)
 
Le problème
n'est pas la
mention "extra", "H" vous voyez, mais ce que vous ne voyez pas!
Je devine votre côté émetteur d'envoyer un "BONJOUR \ r \ n" (c'est un "Enter", ou d'un CR = 0x0D (13) suivi d'un LF = 0x0A (10)).
Votre "uart_gets () 'attend
jusqu'à ce
qu'il voit un CR (13), il le remplace par NULL et les rendements, mais dans l'UART
du tampon de réception, il y aura un LF (10) char à gauche pour la prochaine fois que vous appelez" uart_gets ()' , et que char seront récupérés comme le premier élément de votre chaîne, avant le H.
Vous aurez à traiter avec tous les caractères reçus, et rincez-les (et non, SBUF = 0 permet de ne pas faire, vous aurez à faire une maquette de lire la place).

S'il vous plaît ne pas me dire que l'esprit de votre style de pose simplement des erreurs.Bien que correctes, votre choix pour le nom officiel des paramètres avec le même nom que mondiales est très confus, de ne pas citer le faux-fuyants du reste du code.
J'espère que vous vous rendez compte que cela ne fonctionnera que dans ce cas particulier, et en aucune façon, si vous utilisez ce code comme un modèle d'usage général.

Arthur

 

Welcome to EDABoard.com

Sponsor

Back
Top