Bascom i obsługa przerwania od UART'a troche dlugie

Nov 03, 2005 0 Replies

Witam Napisalm sobie taki prosty programi komunikujacy sie z telefonem i pokazujacy akutalny stan sygnalu.



tak wyglada fragnet programu z procedura:



$crystal = 11059200 $baud = 9600 Config Serialin = Buffered , Size = 100 Config Lcd = 16 * 2



......



I = 0 Watch = 0 Enable Interrupts Odczyt Disable Interrupts Waitms 10 Loop


Sub Odczyt: Print "AT+CSQ" Cls While I <> &H4B I = Inkey() If I > 32 Then ' Lcd Chr(i); Napis = Napis + Chr(i) End If ' Incr Watch ' If Watch > 200 Then I = &H4B Wend End Sub


Niestety program czasmi potrafi sie zgubic ... i znika wtedy wszystko z LCD. Wydaje mi sie ze przyczyna lezy w fakcie takim ze nie zawsze procedura zdazy wylapac cos w buforze UART'a i w zwiazku z tym program sie zapetla czekajac na znak &HB4 (K czyli na OK od telefonu) a nic nie znajduje i kreci sie w kolko w petli.



Probowalem dorobic prosty mechanizm wychodzenia z tej petli po przekroczeniu pewnego stanu licznika watch ... niestety za kazdym razem zmienna watch ma inny stan kiedy program wychodzi z petli while ...wend ... tak jak by dane wylapywane przez RS'a byly w roznych miejsach w tym buforze i trzeba bylo je wyszukac ....



Pytanie jak sobie poradzic z takim problemem ?



Drugia sprawa .. nie wiem czemu kiedy nie zablokuje przerwan przed uzyciem komendy wait albo waitms , waitus to program pojdzie w kosmos ... mam wraznie jak by wait'y byly robione na licznikach a owe liczniki zglaszaly przerwania i stad ten kosmos ... jak ustawic maske przerwan aby dzialalo tylko to od uart'a ?



Dla formalnosci procek to Mega8535 taktowana zewnetrznym kwarcem 11,059 Mhz , kondziory przy kwarcu 27pF ustawienia fuse bitow od zegara 1011


Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required