89S8252 seriële UART probleem

C

CMOS

Guest
Hoi,
Ik gebruik voor mijn AT89S8252 project dat gebruik maakt van seriële port@19.2kbps.Het probleem ben ik geconfronteerd met dit uC is dat elk teken ik uit uC op de seriële poort wordt gestuurd tweemaal.Ongeacht wat baudrate of configuratie ik.Bijvoorbeeld als ik 'x' stuurt 'xx' om pc.
Maar als ik dezelfde code op AT89S52, het werkt prima zonder problemen.Kan iemand me helpen alstublieft?
Hier is mijn code.Code:KNO-PCON, # 0x80; SET DOUBLE BAUD RATE

ANL TMOD, # 0x0F; CLEAR ALL TIMER1 bits in TMOD

KNO-TMOD, # 0x20; TIMER1 = 8 BIT AUTO RELOAD

CLR TR1; MAKE SURE TIMER1 is niet actief

CLR TF1

MOV A, # 253

MOV Th1, A; SET TIMER1 RATE

MOV TL1, A

MOV SCON, # 0x50; CONFIG Serial Port

SETB TR1; START TIMER1MOV A, # 'x'

LCALL HOF

SJMP *;************************************************* *************

; PRINTS AARD IN ACC op de seriële poort

;************************************************* *************

HOF: MOV SBUF, A

JNB TI, *

CLR TI; CLR TI NA VERZENDENDE

RET

 
Klinkt als echo voor me.Dit werkt voor mij, moet verandering van 300 baud aan je aanvraag.Hoop dat het helpt?.

void serial_init (void) (
TMOD = 0x20; / / Timer-1-modus 2: 8-Bit herlaadbeurt
Th1 = 0x98; / / Reload waarde 300 baud
SCON = 0x52; / / Mode 1: 8-bit UART,
schakelt de ontvanger TI blijft ingesteld
TR1 = 1; / / Timer 1 run
ES = 0; / / Disable seriële poort onderbreken
EA = 0 / / Disable
)

 
Nee dat is geen echo, omdat de data wordt verstuurd vanaf 89S8252 tot pc.Zelfs met uw code, Ik krijg dubbele tekens.

 
Hi CMOS,

Probeer het wijzigen van uw COUNT routinematige als volgt:
; test if SBUF is free, so you can load the next byte

COUNT: JNB TI, COUNT;
testen of SBUF is gratis, dus u kunt de volgende byte; load next byte

MOV SBUF, A;
belasting volgende byte; Clears TI to start sending...

CLR TI;
Wist TI om te beginnen met het verzenden ...

RETWanneer de byte is verzonden de UART hardware zal de TI vlag die aangeeft dat SBUF is gratis voor u te verzenden de volgende byte ...

Hoop dat het helpt!

 
Ik gewist TI en YDQ vlaggen tijdens het opstarten.en veranderde de HOF code.Het opgelost mijn probleem.Bedankt

 
__JR__ Schreef:Hi CMOS,
Probeer het wijzigen van uw COUNT routinematige als volgt:
COUNT: JNB TI, COUNT; testen of SBUF is gratis, dus u kunt de volgende byteMOV SBUF, A; belasting volgende byteCLR TI; Wist TI om te beginnen met het verzenden ...RET
Wanneer de byte is verzonden de UART hardware zal de TI vlag die aangeeft dat SBUF is gratis voor u te verzenden de volgende byte ...
Hoop dat het helpt!Transmition wordt gestart wanneer de CPU schrijft aan SBUF, niet wanneer u iets TI.Een beter HOF routine is:

HOF: JNB TI, HOF
CLR TI
MOV SBUF, A; begin verzenden
RET

In previus HOF, indien een interrupt gebeurt tussen MOV SBUF, A en CLR TI, is het mogelijk dat TI blijft voorgoed gewist.In dit geval, als u belt naar de rechter, de CPU zal uitvoeren altijd de instructie

HOF: JNB TI, HOF

 

Welcome to EDABoard.com

Sponsor

Back
Top