Witam,
chce dorobić do swojego procesora komunikacje po RS-232. Można powiedzieć że udało mi się to w 90%. Transmisja działa, aczkolwiek nie dostaje tego czego mógłbym oczekiwać.
Skonfigurowałem rejestry:UCSRB i UCSRC. Procesor taktuje wewnętrznym oscylatorem 8MHz ( defaultowe ustawienie fusebitów, sprawdziłem je ), Baud Rate ustawiłem na 38400 ( wpisałem odpowiednią wartość do UBRRH = 0 i UBRRL = 12), ramkę danych ustawiłem w UCSRC na 8 bit danych ,1 bit stopu , bez parzystości. Odblokowałem przerwania globalne jak i te od UARTU. Korzystam ze standardowych funkcji ATMELA
a mimo to otrzymuje na wyjściu głupoty... Wysyłając np znak 'a' powinienem otrzymać
Zauważyłem że przy próbie wykonania poniższego kodu
[code]
program przyjmuje daną i wysyła odpowiedź, ale za drugim razem tak jakby zawiesza się ( nie przyjmuje nowego znaku ) i wysyła znak który dostał za pierwszym razem. Czy ktoś mógłby nakierować mnie w której części mogłem popełnić błąd ? Mogłem coś pomieszać w obsłudze przerwań ? Byłbym wdzięczny za pomoc.
Pozdrawiam
chce dorobić do swojego procesora komunikacje po RS-232. Można powiedzieć że udało mi się to w 90%. Transmisja działa, aczkolwiek nie dostaje tego czego mógłbym oczekiwać.
Skonfigurowałem rejestry:UCSRB i UCSRC. Procesor taktuje wewnętrznym oscylatorem 8MHz ( defaultowe ustawienie fusebitów, sprawdziłem je ), Baud Rate ustawiłem na 38400 ( wpisałem odpowiednią wartość do UBRRH = 0 i UBRRL = 12), ramkę danych ustawiłem w UCSRC na 8 bit danych ,1 bit stopu , bez parzystości. Odblokowałem przerwania globalne jak i te od UARTU. Korzystam ze standardowych funkcji ATMELA
Kod: C / C++
a mimo to otrzymuje na wyjściu głupoty... Wysyłając np znak 'a' powinienem otrzymać
Cytat:, a otrzymujeDec 97 Hex 61 AscII a
Cytat:Dec 39 0 Hex 27 00 AscII '
Zauważyłem że przy próbie wykonania poniższego kodu
[code]
Kod: C / C++
program przyjmuje daną i wysyła odpowiedź, ale za drugim razem tak jakby zawiesza się ( nie przyjmuje nowego znaku ) i wysyła znak który dostał za pierwszym razem. Czy ktoś mógłby nakierować mnie w której części mogłem popełnić błąd ? Mogłem coś pomieszać w obsłudze przerwań ? Byłbym wdzięczny za pomoc.
Pozdrawiam
