Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C AVR - Funkcja pobierająca napis z RS232

asdf 15 Lip 2013 20:24 1602 3
  • #1 15 Lip 2013 20:24
    asdf
    Poziom 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

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 3
  • #2 16 Lip 2013 10:25
    mi14chal
    Poziom 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.

    0
  • #3 17 Lip 2013 21:47
    asdf
    Poziom 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).

    0
  • #4 17 Lip 2013 23:33
    BlueDraco
    Specjalista - Mikrokontrolery

    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.

    0