Bawiłem się trochę transmisją przez 232 i od strony PC skorzystałem z gotowej klasy (C++) ze strony:
CodeGuru
Na pierwszy rzut oka może się wydawac skomplikowane, ale jak się wgryziesz, to da się to strawić. Całkiem fajna pomoc. Ja wprowadziłem tylko nieliczne zmiany i dzięki niej można bezproblemu transmitować nie tylko pojedyńcze bajty, ale także serie danych.
Jeśli chodzi o uC, to korzystałem z ATmega16 i posiłkowałem się książką wydawnictwa BTC - "Mikrokontrolery AVR ATmega w praktyce". Trzeba było się nieźle nakombinować niestety, dodatkowo szukałem po necie, ale się udało. Stworzyłem bardzo prosty protokolik transmisji, typu:
- Komp. wysyła bajt (o pewnej umówionej wartości) do uC.
- Jesli uC rozpozna, że jest to ten ustalony bajt, to go odsyła i czeka na następne dane.
- PC wysyła 3-bajtowy nagłówek, w którym znajduje się informacja o tym, czy uC ma wysyłać, czy odbierać dane oraz ile tych danych ma być.
- uC odbiera nagłówek przechodzi odpowiednio do pętli wysyłającej lub odbirającej i wysyła/obiera dokładnie tyle danych ile 'chce' PC.
Tak w skrócie ja to rozwiązałem, Wymagało to nieco gimnastyki, ale działa pięknie, można z powodzeniem wysyłać nawet kilka KB danych.
Zacznij najpierw od wysyłania/odbierania pojednynczego bajtu, potem jakaś żonglerka tym bajtem (wysyłamy go do uC i uC po chwili odsyła z powrotem), potem to samo na 2ch bajtach.
Uwaga powyżej 3-ch bajtów musisz uważać na bufor (bo właśnie mieści tylko 3bajty - w ATmega) i trzeba potem w programie sprawdzać, czy został on już opróżniony i czy jest gotowy do wysyłania/odbierania.
Tyle ode mnie, powodzenia