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