Dzień dobry, to mój pierwszy wpis na forum więc jeżeli mogę to proszę o wyrozumiałość.
Piszę w sprawie dość nietypowego jak dla mnie błędu, który występuje w moim kodzie: podczas komunikacji między dwoma procesorami (z AtMega324p na AtMega16a) kiedy chcę wysłać wartość funkcja usart_send nie zawsze zostaje wykonana (chociaż powinna). Przy otrzymaniu kodu powinna się zmienić wartość na wyświetlaczu led i zostaje jednocześnie zmieniony znak na diodzie(dioda została dołączona by wykluczyć możliwość, że kod zostaje wysłany a to LCD nie reaguje), kod z mikrokontrolera zostaje wysłany przy naciśnięciu przycisku (na pewno przycisk działa dobrze i uwzględniłem drganie styków, oprócz wysłania kodu przez usart gasi również wszystkie diody (co powinien robić) więc można założyć że problem nie leży po stronie przycisku). Kod który jest wysyłany przez usart jest zawsze tego samego typu w zasadzie testowałem na dwóch wartościach.
Poniżej wstawiam kod inicjalizacji USART:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
przerwanie które odczytuje wartość wysłaną: value jest typu volatile uint8_t i jest zmienną globlaną
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Kod wysłania wartości przez USART - mój faworyt jeżeli chodzi o możliwych sprawców zamieszania
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
fragment funkcji main w którym wysyłam kod (coin typu uint8_t
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
funkcja w której dostaję informacje z USART (czasami się wykonuje przy naciśnięciu przycisku a czasami nie)
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zmienne są w zasadzie nie używane ponieważ przerobiłem tą funkcję na potrzeby testów.
Bardzo proszę o jakiekolwiek podpowiedzi co może być nie tak
------------------------ [ Dodano po: 2 minutach ]Odbieranie jest w funkcji while bo nie byłem pewien czy w czasie wysłania kod nie ulega zniekształceniu- jeżeli by uległ wtedy kod został by zawieszony w nieskończonej pętli, to okazało się nie być problemem