Dziękuje za odpowiedź. Port przekazałem jako wartość stałą za pomocą dyrektywy #define. Wykonuję warstwę fizyczną programowego UARTA wg. noty AVR305. Funkcję do nadawania znaków już wykonałem i działa mi można powiedzieć rewelacyjnie. Natomiast mam problem z funkcją odbierania znaków. Nie ukrywam, że już dobry tydzień się z tym męczę.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Powyższa funkcja wywoływana jest w przerwaniu PCINT4 (od dowolnego zbocza); uznałem, że nie ma sensu wywoływania jej w pętli głównej ze względu na ważne zależności czasowe. Prześledziłem funkcję wiele razy niestety jest z nią jakiś problem (baudrate 9600, kwarc 7.3728 MHz). Mianowicie odczytuje mi ona zbyt wiele bitów (przynajmniej tak wynika z analizatora):
Nie jestem w stanie zweryfikować dlaczego tak się dzieje. Jeżeli usunę testowe ustawianie i czyszczenie bitu i zastąpie je domyślnym ustawianiem i czyszczeniem znacznika przepełnienia zmienna "data" zawsze wychodzi 0. Proszę o pomoc, pewnie błąd jest prosty natomiast jestem początkującym w asemblerze.Pozdrawiam.
------------------------ [ Dodano po: 49 minutach ]Edit: Powyższe szpilki powstają ze względu na drugie zbocze (narastające) po już zakończonej funkcji; do funkcji dodałem opóźnienie tak żeby przerwanie nie powtórzyło się. Natomiast dalej wartość "data":
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
po wykonaniu funkcji jest równa '\0'.