89S8252 szeregowy UART problem

C

CMOS

Guest
Cześć,
Ja jestem przy użyciu AT89S8252 do mojego projektu, który wykorzystuje port@19.2kbps seryjny.Problem mam z tym stoi uC jest to, że każdy znak wysłać z uC do portu szeregowego jest wysyłane dwukrotnie.Bez względu na szybkość lub konfiguracji ustawić.Na przykład, jeśli mogę wysłać "x" wysyła "xx" do komputera.
Jednak jeśli mogę umieścić tego samego kodu na AT89S52, to działa dobrze, bez żadnych problemów.Czy ktoś proszę mi pomóc?
Tu jest mój kod.Kod:ORL PCON, # 0x80; SET DOUBLE szybkość

ANL TMOD, # 0x0F; Wyczyść wszystko TIMER1 bitów w TMOD

ORL TMOD, # 0x20; TIMER1 = 8 bitów AUTO RELOAD

CLR TR1; MAKE SURE TIMER1 nie jest uruchomiony

CLR TF1

MOV A, # 253

MOV TH1, A; SET TIMER1 WALUT

MOV TL1, A

MOV scon, # 0x50; CONFIG Serial Port

SETB TR1; START TIMER1MOV A, # 'x'

LCALL TRYBUNAŁU

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

; PRINTS postać W ACC DO Serial Port

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

SĄD: MOV SBUF A

JNB TI, *

CLR TI; CLR TI po wysłaniu

RET

 
Brzmi jak echo do mnie.Działa to dla mnie potrzeby zmiany od 300 bodów, aby spełnić potrzeby klientów wniosku.Hope it helps?.

void serial_init (void) (
TMOD = 0x20; / / Timer 1 Tryb 2: 8-Bit reload
TH1 = 0x98; / / Przeładuj wartości 300 bodów
Scon = 0x52; / / Tryb 1: 8-bitowy UART,
włącz odbiornik TI pozostaje ustawić
TR1 = 1; / / Timer 1 uruchomić
ES = 0, / / Wyłącz port szeregowy przerwania
EA = 0, / / Wyłącz
)

 
Nr thats nie echa, gdyż dane są przesyłane do komputera z 89S8252.Nawet w kodzie, jestem coraz podwójnych znaków.

 
Hi CMOS,

Proszę spróbować zmienić COUNT rutynowych następująco:
; test if SBUF is free, so you can load the next byte

COUNT: JNB TI, COUNT;
SBUF sprawdzić czy jest wolna, więc można załadować następnego bajtu; load next byte

MOV SBUF A;
obciążenia następnego bajtu; Clears TI to start sending...

CLR TI;
Czyści TI, aby rozpocząć wysyłanie ...

RETGdy bajt został wysłany UART sprzęt będzie TI flagi wskazujące, że SBUF jest bezpłatne, aby wysłać następnego bajtu ...

Hope it helps!

 
I TI i RI usunięciu flagi podczas uruchamiania.i zmienił TRYBUNAŁU kodu.Należy rozwiązać mój problem.Dzięki

 
__JR__ Napisał:Hi CMOS,
Proszę spróbować zmienić COUNT rutynowych następująco:
COUNT: JNB TI, COUNT; SBUF sprawdzić czy jest wolna, więc można załadować następnego bajtuMOV SBUF A; obciążenia następnego bajtuCLR TI; Czyści TI, aby rozpocząć wysyłanie ...RET
Gdy bajt został wysłany UART sprzęt będzie TI flagi wskazujące, że SBUF jest bezpłatne, aby wysłać następnego bajtu ...
Hope it helps!Transmisji jest inicjowana podczas procesora pisze do SBUF, nie jest jasne, kiedy bit TI.Lepsze TRYBUNAŁU rutynowych jest:

SĄD: JNB TI, TRYBUNAŁ
CLR TI
MOV SBUF A; rozpocząć wysyłanie
RET

W previus TRYBUNAŁ, jeśli dzieje się między przerwać MOV SBUF A i CLR TI, możliwe jest, że TI pozostaje zawsze wyczyszczone.W tym przypadku, gdy wezwanie do sądu, procesor będzie wykonywać zawsze instrukcja

SĄD: JNB TI, TRYBUNAŁ

 

Welcome to EDABoard.com

Sponsor

Back
Top