Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

RS232 [BASCOM] Odbiór danych

krystii 02 Oct 2009 14:00 4696 2
  • #1
    krystii
    Level 16  
    Mam problem z transmisją danych. Na PC mam uruchomiony terminal (terminal v1.9b), i jak wysyłam treść z AVR do portu RS232 to terminal poprawnie odczytuje wysłaną treść. Natomiast problem tkwi w transmisji w drugą stronę. Żeby sprawdzić czy poprawnie AVR odbierze dane wysłane z RS232, napisałem tak program żeby po odebraniu treści wysłanej z terminala odesłał ją z powrotem do niego. I jak wyśle z terminalu np. treść "TEST" to w terminalu zobacze tylko jedną litere "T", zauważyłem, że jak wysyłam jedną treść po drugiej czyli klikam szybko w terminalu przycisk "send" to zdaży się że otrzymam dwie litery "TE". W czym tkwi problem?
    Poniżej zamieszczam treść kodu:

    Code:

    $regfile = "attiny2313.dat"
    $crystal = 12000000


    $baud = 19200

    Config Serialin = Buffered , Size = 30

    '-----------------------KONFIGURACJA_PORTÓW--------------------------------
    Config Portd.2 = Input
    Config Portd.3 = Output
    Config Portd.4 = Output
    Set Portd.2
    Set Portd.3
    Set Portd.4


    Enable Interrupts                                           'Włączenie przerwań

    '------------------------DEKLARACJA PODPROGRAMÓW------------------------
    Declare Sub Oproznij_bufor

    '------------------------DEKLARACJA ZMIENNYCH-----------------------------------
    Dim Kod As String * 1
    Dim Bufor As Byte
    Dim Dane As String * 10


    '------------------------START--------------------------------------------------



    Dane = ""

    Do

       Bufor = Ischarwaiting()                      'Sprawdz czy cos jest w buforze
       If Bufor = 1 Then
       Gosub Odczytaj_sprzetowy_uart          'Jesli jest to odzcytaj                 
       Waitms 200
       Print Dane;                                     'Odebrane dane wyslij z powrotem
       Gosub Oproznij_bufor
       End If

    Loop


    '-----------------------PODPROGRAMY--------------------------------------------

    Odczytaj_sprzetowy_uart:

    Dane = ""

    Do                            'Odbierz znak po znaku
      Kod = Inkey()
      Dane = Dane + Chr(kod)                                    'Zapisz w Dane
      Bufor = Ischarwaiting()     'Zakoncz jeśli CR lub brak znaku
    Loop Until Bufor = 0 Or Kod = "13"
    Return


    '------------------------OPROZNIJ_BUFOR-----------------------------------------
    Oproznij_bufor:

    Do
       Kod = Inkey()                                            'Czyści bufor
       Bufor = Ischarwaiting()
    Loop Until Bufor = 0
    Return
  • Helpful post
    #2
    thorin00
    Level 14  
    wprowadz opoznienie przed skokiem do podprogramu odczytaj_sprzetowy_uart, powiedzmy jakies 100ms, daj czas mikrokontrolerowi na odebranie wszystkich znakow zanim odczytasz uart
  • #3
    krystii
    Level 16  
    Dzięki, to rozwiązało mój problem, brakowało tylko małego opóźnienia, a kombinowałem z tym kodem na różne sposoby co mi zajęło trochę czasu.