BASCOM 8051: Rozwiązania problemów z obsługą transmisji szeregowej 9600 bps

BASCOM - transmisja szeregowa





Poprzedni Następny
Wiadomość
Spis treści
From: "Jarek" <jarek_a_at_nospam_interia.pl>
Subject: BASCOM - transmisja szeregowa
Date: Sun, 30 Jul 2000 23:25:25 GMT


Witam
Mam następujący problem:
W Bascom'ie 8051 muszę odbierać dane poprzez port szeregowy
z prędkością 9600. W związku z tym, że pętla główna programu
wykonuje się dość długo stosując INKEY lub INPUT występuje
efekt gubienia niektórych znaków. Jedyna rozsądna alternatywa
to obsługa w przerwaniu. Działa odbieranie w przerwaniu,
ale przy próbie wysłania czegokolwiek przez PRINT z pętli głównej
program się "zawiesza". Właściwie to jest ciagle wywoływane
przerwanie od TxD. Może ktoś wie jak to rozwiązać ???
Z góry dzięki za odpowiedzi.
Poniżej przykład (bez deklaracji itd..)

Pozdrawiam
Jarek

***************************************
On Serial Wykonaj_przerwanie
Priority Set Serial
Enable Interrupts
Enable Serial

Do
Print "*"
Wait 2
Loop



Wykonaj_przerwanie:

If SCON.1 = 1 Then 'czy przerwanie od flagi TI - nadawanie
clr SCON.1 'zeruj flage i czekaj na nast. przerwanie
Else 'gdy cos odebrano
Abc = Inkey() 'odczytaj z SBUF
Lcd Abc 'wyslij na LCD
clr SCON.0 'zeruj flage RI
End If

Return
***************************************



Poprzedni Następny
Wiadomość
Spis treści
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: BASCOM - transmisja szeregowa
Date: Mon, 31 Jul 2000 04:07:40 GMT


W Bascom'ie 8051 muszę odbierać dane poprzez port szeregowy
z prędkością 9600. W związku z tym, że pętla główna programu
wykonuje się dość długo stosując INKEY lub INPUT występuje
efekt gubienia niektórych znaków. Jedyna rozsądna alternatywa
to obsługa w przerwaniu. Działa odbieranie w przerwaniu,
ale przy próbie wysłania czegokolwiek przez PRINT z pętli głównej
program się "zawiesza". Właściwie to jest ciagle wywoływane
przerwanie od TxD. Może ktoś wie jak to rozwiązać ???

W takich jezykach "wyzszych" zwykle generowany kod jest do d.... Zapewne
obliczenia matematyczne sa o wiele prostrze i zabawa w wyliczanie
czegokolwiek jest banalna, kosztem wydajnosci. Niestety do transmisji musisz
zasiasc do assemblera.
Procek 51 jest tak wolny, ze ledwo sie wyrabia na 57600. Na 115200 juz sa
dziury miedzy znakami. I nie ma chyba Tx bufora, dodatkowo kasowanie TI i RI
jest podle.

Moze to i dobrze, ze ludzie siegaja po Bascoma :-) Bedzie mniej konkurencji
-)
Programowanie takich prockow to nie zabawa na pececie. W takich procesorkach
nie mozna mowic o petlach glownych czy nie. Czasem wlasnie ta petla glowna
tylko zawadza, bo wszystko chodzi na przerwaniach :-)... a zapisujesz ja

loop: jmp loop :-)

Proponuje zaczac od assemblera i zrozumienia jak dziala taki procesor, ile
dana operacja zajmuje czasu i generalnie co trzeba zrobic aby nadac czy
odebrac znak. Dalej co trzeba zrobic aby dale lecialy ciurkiem. Jak
wyczaisz, to odpowiesz sobie na wlasne pytanie :-) Ja odpowiedzi nie znam,
bo bascoma nie dotykam, ale czuje w czym jest problem :-)
Problem w tym, ze nie zdajesz sobie sprawy co robisz :-)

Juliusz