89S8252 Serial UART ongelma

C

CMOS

Guest
Hei,
I am using AT89S8252 minun hanke, joka käyttää serial port@19.2kbps.Ongelma olen edessään tämän UC on, että jokainen merkki I lähettää UC on sarjaportti lähetetään kahdesti.Ei ole väliä mitä baudinopeus tai kokoonpanon saan.Esimerkiksi jos voin lähettää "x" se lähettää xx tietokoneeseen.
Kuitenkin jos esitin saman koodin AT89S52, se toimii vain kauniita ilman mitään ongelmia.Voiko kukaan auta minua?
Tässä on koodi.Code:ORL PCON, # 0x80; SET KAKSINKERTAISEN baudinopeus

ANL TMOD, # 0x0F; CLEAR ALL TIMER1 bittien TMOD

ORL TMOD, # 0x20; TIMER1 = 8 BIT AUTO Päivitä

CLR TR1, VARMISTA, ETTÄ TIMER1 ei ole käynnissä

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 TUOMIOISTUIN

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

; Tulostaa merkin ACC TO SERIAL PORT

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

TUOMIOISTUIN: MOV SBUF, A

JNB TI, *

CLR TI; CLR TI lähettämisen jälkeen

RET

 
Kuulostaa echo minulle.Tämä sopii minulle, on muuttamatta 300 baudia, jotka sopivat sinulle hakemuksen.Hope se auttaa?.

mitätön serial_init (void) (
TMOD = 0x20; / / Ajastin 1 tila 2: 8-Bit reload
TH1 = 0x98; / / Reload arvo 300 baudia
SCON = 0x52; / / Mode 1: 8-bittinen UART, jotta vastaanotin TI pysyy päällä
TR1 = 1; / / Ajastin 1 aikavälillä
ES = 0; / / Poista sarjaportti keskeyttää
EA = 0; / / Poista
)

 
N: o thats ei kaiku, koska tiedot lähetetään 89S8252 tietokoneeseen.Vaikka koodistasi, Saan kaksinkertainen merkkiä.

 
Hi CMOS,

Yritä muuttaa COUNT rutiini seuraavasti:
; test if SBUF is free, so you can load the next byte

COUNT: JNB TI, COUNT;
testi jos SBUF on vapaa, joten voit ladata seuraavan byte; load next byte

MOV SBUF, A;
kuorma ensi byte; Clears TI to start sending...

CLR TI;
Tyhjentää TI alkaa lähettämään ...

RETKun tavu on lähettänyt UART laitteisto asettaa TI lippu käy ilmi, että SBUF on ilmainen voit lähettää seuraavaan byte ...

Hope se auttaa!

 
I selvitetty TI ja RI liput käynnistyksen aikana.ja vaihtanut TUOMIOISTUIN koodi.It solved my ongelma.Kiitos

 
__JR__ Wrote:Hi CMOS,
Yritä muuttaa COUNT rutiini seuraavasti:
COUNT: JNB TI, COUNT; testi jos SBUF on vapaa, joten voit ladata seuraavan byteMOV SBUF, A; kuorma ensi byteCLR TI; Tyhjentää TI alkaa lähettämään ...RET
Kun tavu on lähettänyt UART laitteisto asettaa TI lippu käy ilmi, että SBUF on ilmainen voit lähettää seuraavaan byte ...
Hope se auttaa!Transmition aloitetaan kun CPU kirjoittaa SBUF, eikä silloin, kun tyhjennät bittinen TI.Parempi TUOMIOISTUIN rutiini on:

TUOMIOISTUIN: JNB TI, TUOMIOISTUIN
CLR TI
MOV SBUF, A; alkaa lähettämään
RET

Vuonna previus TUOMIOISTUIN, jos keskeyttää tapahtuu välillä MOV SBUF, A-ja CLR TI, on mahdollista, että TI vielä selvitetty lopullisesti.Tässä tapauksessa, kun soittaa TUOMIOISTUIN suorittimen tulee suorittaa aina ohje

TUOMIOISTUIN: JNB TI, TUOMIOISTUIN

 

Welcome to EDABoard.com

Sponsor

Back
Top