rezolut Napisano Lipiec 1, 2009 Udostępnij Napisano Lipiec 1, 2009 Czy ktoś na forum opanował obsługę UART (USART) i odbiór danych o nieznanej długości? Dotąd w swojej dłubance wykorzystywałem zawsze schemat: '- zmienne uart ---------------------------------------------------------------- Dim I As Byte Dim Buf(8) As Byte 'Bufor odbioru danych z rejestru UART Dim Index As Byte 'numer kolejnego bajtu odebranego przez uart Dim Odebrano As Boolean 'flaga ustawiana gdy odebrano przez uart 5 bajtów i zapisano do bufora Bufor() '- konfiguracja USART ---------------------------------------------------------- On Urxc Odbierz 'Ubrr = 207 '4800 bps przy U2X=0 'Ubrr = 51 '19200 bps przy U2X=0 'Usr = &B00100000 Ucr = &B10011000 'Ucsrc = &B10000110 Enable Urxc Enable Interrupts ... Odbierz: Buf(index) = Udr Incr Index 'zwiększamy licznik o jeden If Index = 6 Then Index = 1 Odebrano = 1 End If Return przy czym zawsze wiedziałem ile bajtów mam odebrać (tu akurat 5). Teraz mam odebrać dane o nieznanej długości, więc ustawienie flagi po odebraniu określonej, znanej liczbie danych odpada. Chciałbym to zrobić na mniej więcej na wyżej opisanej zasadzie, tzn. na przerwaniu i odbiorze do bufora wszystkich bajtów. Na szybko przychodzi mi sprawdzanie timeoutu między kolejnymi bajtami w celu wykrycia końca transmisji, ale może ktoś już ma lepsze działające rozwiązanie? Cytuj Link do komentarza Share on other sites More sharing options...
rasta Lipiec 1, 2009 Udostępnij Lipiec 1, 2009 A może zastosować jakiś zarezerwowany ciąg znaków określający koniec nadawanych danych? 1 Cytuj Link do komentarza Share on other sites More sharing options...
rezolut Lipiec 1, 2009 Autor tematu Udostępnij Lipiec 1, 2009 Faktycznie może to być rozwiązaniem pod warunkiem, że urządzenie odpowiada zawsze stałą końcówką i że końcówka ta nie wystąpi przypadkiem w "treści" pakietu. Muszę to obadać. Cytuj Link do komentarza Share on other sites More sharing options...
rasta Lipiec 1, 2009 Udostępnij Lipiec 1, 2009 Jeżeli masz kontrolę nad nadawcą, to to ma sens. Może coś w stylu: każdy bajt danych rozpoczynaj 0, natomiast ostatni bajt stopu puść same jedynki, lub coś podobnego. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
rezolut Lipiec 2, 2009 Autor tematu Udostępnij Lipiec 2, 2009 Nie mam kontroli nad nadawcą. Co będę ściemniał - chodzi o komórkę, C35 i obsługę sms. Zrobiłem projekt z komunikacją jednostronną, ale zachciało mi się czegoś więcej. Nie sprawdziłem przed montażem jak komórka gada (tzn. odpowiada) a teraz po ptokach bo została przykręcona i zalana we wtyczce silkonem. Po próbach i testach wiem już jednak, że kończy ona wiadomość zawsze jednakowym ciagiem, więc łatwo to rozpoznać. Układ działa w obie strony i czyta już zmienne łańcuchy. Natomiast patent z bajtami identyfikacyjnymi na początku i końcu pakietów stosuję przy obsłudze modułów radiowych dla minimalizowania wpływu śmieci z otoczenia. Cytuj Link do komentarza Share on other sites More sharing options...
abxyz Lipiec 2, 2009 Udostępnij Lipiec 2, 2009 Można np: tak: Niech wartości bajtów od 0 do 254 będą interpretowane zwyczajnie, natomiast wartość bajtu 255 będzie znacznikiem, i jeśli kolejne dwa odczytane bajty mają wartość 255, wtedy interpretujemy te daw bajty jako jeden o wartości 255. Każdej zaczynającej się od 255 parze bajtów można przypisać jakąś funkcję, np: 255 0 - początek ramki danych, 255 1 - koniec ramki danych Proste i oszczędne rozwiązanie. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!