logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C/ATM8 - USART nie działa odbieranie znaku, funkcja odbierania (USART_receive)

Modecom601 24 Lis 2012 17:35 1275 2
REKLAMA
  • #1 11569210
    Modecom601
    Poziom 13  
    Witam!
    Przed napisaniem tematu znalazłem coś takiego
    Cytat:
    Twoja funkcja USART_Receive() sprawdzi, czy flaga RXC jest ustawiona i - jeśli nie - zakończy działanie, zwracając właściwie trudno mi określić co. Trudno określić, bo funkcja zwraca niezainicjowaną zmienną, której - w przypadku, gdy RXC=0 - nie przypisujesz żadnej wartości. Nie wiem też co z tym kodem zrobi optymalizacja. W zasadzie definiowanie zmiennej lokalnej data wewnątrz funkcji nie jest konieczne. Wystarczy return UDR;
    Istotą pętli while() wewnątrz funkcji USART_Receive() jest oczekiwanie na ustawienie flagi RXC i dopiero później zwrócenie zawartości rejestru UDR, więc powinna ona wyglądać tak, jak zaproponowałem.

    z linku https://www.elektroda.pl/rtvforum/topic1953588.html
    I w istocie myślałem, ze dopisanie linijki kodu zaproponowanej przez użytkownika Andrzeja_S pomoże, niestety nie przyniosło to oczekiwanego rezultatu.

    Chcę wysłać do medzi z Terminala znak i wyświetlić go na LCD.
    Rzecz jasna z noty katalogowej wykorzystałem instrukcje nadawania i odbierania + wysyłanie ciągu znaków do PC.

    Naskrobałem coś takiego:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I sądziłem, że program "zatrzyma się" w pętli oczekując na znak z PC i dioda podłączona do PD5 się nie zaświeci, jednak jest inaczej, pozostałe diody się zapalają, na LCD wyświetla sie krzak, a w terminalu <0> ASCII lub 00 hexem.

    KIlka godzin wcześniej doszedłem do momentu, w którym uC czekał, aż przypisze do zmiennej c znak wysłany z PC, ale pomimo wpisania znaku w terminalu szesnastkowo lub ASCII program "nie poszedł" dalej, a na wyświetlaczu LCD pusto.

    Kwarc 16 Mhz, fusy OK wysłanie znaku/ciągu znaków do terminala przebiega prawidłowo, kabel ca-42 rx/tx/masa do medzi.

    Problem jest na pewno obity wiele było tematów, nie znalazłem konkretnego oprócz w/w linku.

    Proszę o pomoc gdzie popełniłem błąd

    Pozdrawiam
  • REKLAMA
  • #3 11583959
    xamrex
    Poziom 28  
    Ja znalazłem tam taki błąd:
    Zamiast:
    lcd_puts(c);

    Powinno być
    lcd_put_CHAR(c);

    Ale to raczej nie pomoże :)
REKLAMA