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

Sposoby transmisji danych w RS232

Tomek_AZ 17 Cze 2010 11:47 2107 3
REKLAMA
  • #1 8199426
    Tomek_AZ
    Poziom 2  
    Witam, Jestem początkującą osobą w tych zagadnieniach.
    Nie do końca rozumiem pewną rzecz, byłby wdzięczny gdyby ktoś zechciał mnie oświecić, a więc:
    w transmisji po RS232 wysyłamy liczby binarne, od 7 do 9 bitów, dobrze rozumiem?
    Jeśli odpale program, którego fragment kodu wygląda tak:
    
    char *liczba = "100";
    char *liczba2 = "1";
    
    write (fd_rs, liczba, strlen(liczba));
    write (fd_rs, liczba2, strlen(liczba2));
    

    to rozumiem, że zostaną wysłane po RS w przypadku:
    "liczba": 0x31 0x30 0x30
    "liczba2": 0x31
    no i ewentualne dodatkowe bity startu, stopu, parzystości itp, dobrze myślę?

    A czy jest jakiś sposób, aby liczby całkowite wysyłać wprost w części danych ramki binarnie? Jeśli tak, to w jakim typie powinienem przechowywać liczbę, np 100, i w jaki sposób ją wysłać, aby została ona wysłana w postaci 0x64?
  • REKLAMA
  • #2 8200321
    szelus
    Poziom 34  
    Funkcja write() ma cztery argumenty, więc Twój kod nie jest poprawny, ale jeżeli to poprawisz, to zadziała jak napisałeś.
    Żeby wysłać dane binarne, trzeba mieć oczywiście dane binarne, nie tekstowe. Dla funkcji write() to obojętne.
    
    unsigned char liczba = 100;
    
    write( fd_rs, &liczba, sizeof(liczba), 1 );
    


    Dziewięciu bitów chyba nie ma w standardzie (to rozszerzenie udostępniane przez niektóre kontrolery), więc dla takiego przypadku nie ma standardowej odpowiedzi "jak".
  • REKLAMA
  • #3 8200860
    Tomek_AZ
    Poziom 2  
    Dzięki, poszlo:) Jesli chcialbym przesylac floaty, to rozumiem, że powinienem sobie skonstruować już jakąś ramkę i np w pierwszym bajcie przesyłać część całkowitą, w kolejnych pozostałą część.
    Co do funkcji write, to miałem na myśli funkcje write unixową, ona ma 3 argumenty
  • #4 8202762
    szelus
    Poziom 34  
    Fakt, z tym write coś mi się pokręciło - miałem ciężki tydzień :)
    Co do floatów - chcesz je przesyłać binarnie?
    Liczby float są zwykle zapisane w pamięci w formacie IEEE-754 na 4 bajtach. Tu masz kalkulator i więcej informacji.
    Można zrobić tak samo, jeżeli po obu stronach jest taka sama konwencja LSB/MSB (endianness):
    
    float liczba;
    
    write( fd_rs, &liczba, sizeof(liczba) );
    

    Oczywiście, jakaś ramka jest wskazana, aby było wiadomo, gdzie dane się zaczynają i kończą przy odbiorze.
REKLAMA