Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

C AVR - Funkcja pobierająca napis z RS232

asdf 15 Jul 2013 20:24 1788 3
  • #1
    asdf
    Level 12  
    Witam wszystkich mam następujący problem, otóż chciał bym stworzyć funkcję która pobiera z portu rs232 cały napis, który następnie mógł bym przekonwertować do postaci integer, czy double lub inne zmiennej liczbowej.
    Próbowałem to zrobić w oparciu o własną funkcje uart_get_string ale funkcja pobiera tylko jeden znak. Powyższe potrzebne mi jest do np. do pobrania danych z RS w celu ustawienia zegar RTC lub konfiguracji ustawień (z RS). Poniżej kod pliku rs23.c,

    Ps. Jestem początkujący w zagadnieniach mikrokontrolerów i C dlatego proszę o wyrozumiałość. Na pewno błędy będą więc dlatego pytam mądrzejszych.
    Ps2. Kod w większości oparty jest na książce mikrokontrolery AVR p. Kardaśa

    Code: c
    Log in, to see the code
  • #2
    mi14chal
    Level 28  
    Tylko, że funkcja uart_get_string() pobiera string, a nie jeden znak, ALE pod warunkiem, że po pierwszym znaku nie ma nulla, albo nowej linii itp jak to masz w warunku while. Pewnie z komputera wysyłasz jeden znak, a nie jakiś string i tu leży pewnie problem.
  • #3
    asdf
    Level 12  
    Chciał bym, aby funkcja mogła pobierać znak po znaku i tworzyć stringa ale w przerwaniu, którego mogę później przekonwertować. Przepraszam że tego nie dopisałem. Owszem funkcja działa jeśli jest w pętli while(1).
  • #4
    BlueDraco
    MCUs specialist
    Twoja funkcja get_string zapisuje łańcuch do bufora, który przestaje istnieć z chwilą zakończenia funkcji i zwraca pierwszy znak tego łańcucha. Z tego, co piszesz, działa ona całkiem nieźle.
    Jeśli potrzebujesz całego łańcucha - zadeklaruj bufor poza funkcją.

    Usuń też obsługę przełączania kierunku nadajnika RS486, którego nie używasz, no i oczywiście nie odblokowuj przerwania TXC, którego nie potrzebujesz.

    Oryginalną wersję kodu z sygnaturą jego prawdziwego autora znajdziesz tu:
    http://homepage.hispeed.ch/peterfleury/uartlibrary.zip

    Kod jest na licencji GPL, więc usuwanie sygnatury nie jest zgodne z prawem.