Bare en liten 89s52 UART problem

G

garg29

Guest
Hei venner,
jeg prøver bare å gjøre kommunikasjonen mellom 2-89S52 microcontrollers.

En er å overføre "Hei"
og andre får det samme
og viser det på LCD (16x2).Den overfører punkt er OK som jeg har sjekket resultatet på HyperTerminal.Mottakersiden også vise "Hei", men med et lite problem, i første omgang ordet "Hei" vises riktig, men etter at den
er vist som "HHELLO"
dvs. tegnet "H" vises to ganger.I funksjonen "void uart_gets (char * s)" Jeg prøvde å sette en linje "s -;" dette vises "ELLO" ( "H" forsvant) første gangen, men "Hei" (riktig) continoulsy etter det.nedenfor er koden.
Takk alle sammen for å gi tid til å lese mitt problem.Hilsen.
Sist endret av garg29 på 04 juni 2009 10:36, endret 2 ganger totalt

 
Code:char uart_getc (void) / / Get Tegnstøtte fra UART

(

/ / SBUF = 0; / / hvorfor ?????

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

return SBUF;

)
 
Takk for at du svarer Kurenai_ryu.Jeg prøvde å sette SBUF = 0; men at did'nt gjort noen endringer.Jeg har også prøvd str [7], men som også hadde ikke hjulpet.

Her
er min kode for LCD
Code:void

lcd_puts (const char * s)

(

LCD_RS = 1; / / skrive tegn

while (* s)

lcd_write (* s );

)
 
The problem is not the ”extra” 'H' you see, but what you don't see! Jeg gjetter at senderen side sende et "Hei \ r \ n" (som
er en vanlig "Enter", eller en CR = 0x0D (13) etterfulgt av en LF = 0x0A (10)).
Din 'uart_gets ()' venter til det ser CR (13), det erstatter det med NULL og tilbake, men i UART
er motta buffer vil det være en LF (10) char igjen til neste gang du kaller 'uart_gets ()' , og at char vil bli hentet som første element i strengen, før H.
Du må håndtere all mottatt tegn, og skyll dem (og nei, SBUF = 0 vil ikke gjøre, må du gjøre en tilleggskonto lese stedet).

Please
don't mind meg si at koding stil bare begs for feil.Selv om det er riktig, du ønsker å navngi formelle parametre med samme navn som global de er veldig forvirrende, for å ikke nevne obfuscation av resten av koden.
Jeg håper du skjønner at dette bare fungerer i dette tilfellet, og på ingen måte bør du bruke denne koden som en mal for generelle formål.

Arthur

 

Welcome to EDABoard.com

Sponsor

Back
Top