Elektroda.pl
Elektroda.pl
X

Search our partners

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

Buforowanie transmisji RS232 w Bascomie

daniel93 12 Apr 2008 12:41 1627 9
  • #1
    daniel93
    Level 29  
    Code:
    $crystal = 8000000                                          'częstotliwość kwarcu
    
    $baud = 38400                                           

    Dim Zmienna As Byte , Zmienna2 As Integer                 
    Dim Ignorowane As Byte , Id As Byte , Dane As Byte
    Dim A As Byte , B As Byte

    'Config Serialin = Buffered , Size = 20

    Zmienna = 5
    Do
    Waitms 500
    Cls
    Lcd Id ; " " ; Dane ; " " ; Zmienna ; " " ; B
    Inputbin Id , Dane , Zmienna , B

    Loop


    End


    CO jest z buforownie transmisji w BASCOMIE, że powyższy program działa dopóki nie usunę apostrofa przed linijką z poleceniem włączenia bufora?
  • #2
    Michał_z1
    Level 16  
    do "wyciągania" znaków z bufora służy inkey() lub waitkey() natomiast input stosuje się do wprowadzania ciągu znaków, aż do zakończenia znakiem <CR> wystarczy przeczytać HELP-a
  • #3
    daniel93
    Level 29  
    Mógłbyś wytłumaczyć, bo nie bardzo zrozumiałem?
    ps>Ja nie przesyłam znaków ASCII tylko zmienne.
  • #4
    Balu
    Level 38  
    Masz bufor softwareowy w Bascomie, instrukcjami które kolega podał możesz się do niego "dobrać", z drugiej strony masz instrukcję input która stoi w miejscu póki w UDRze nie znajdzie CR.
  • #5
    daniel93
    Level 29  
    Również nie działa:
    Code:
    $crystal = 8000000                                          
    
    $baud = 38400                                               '

    Dim Zmienna As Byte , Zmienna2 As Integer                   
    Dim Ignorowane As Byte , Id As Byte , Dane As Byte
    Dim A As Byte , B As Byte

    Config Serialin = Buffered , Size = 20

    Zmienna = 5
    Do
    Waitms 500
    Cls
    Lcd Id ; " " ; Dane ; " " ; Zmienna ; " " ; B
    Id = Inkey()
    Dane = Inkey()
    Zmienna = Inkey()
    B = Inkey()

    Loop


    End

    Natomiast poniższy kod działa bez problemów:
    Code:
    $crystal = 8000000                                          
    
    $baud = 38400                                               '

    Dim Zmienna As Byte , Zmienna2 As Integer                   
    Dim Ignorowane As Byte , Id As Byte , Dane As Byte
    Dim A As Byte , B As Byte

    Zmienna = 5
    Do
    Waitms 500
    Cls
    Lcd Id ; " " ; Dane ; " " ; Zmienna ; " " ; B
    Inputbin Id , Dane , Zmienna , B

    Loop


    End
  • #6
    Michał_z1
    Level 16  
    Fajnie by było gdy byś przykładowo napisał co takiego przesyłasz.........jakie dane?? Mógłbym to przy okazji sprawdzić u siebie. A tak przy okazji z kodu wynika że pomimo tego czy jakiś znak jest czy nie w buforze to co 500ms "czyści" Ci sie wyświetlacz, spróbuj zamiast inkey() użyć waitkay(). Bo waitkay() powoduje zatrzymanie programu na czas napotkania znaku w buforze.
  • #7
    zumek
    Level 39  
    daniel93 wrote:
    Również nie działa:

    I działać nie będzie :|
    Jak byś poczytał w Helpie DOKŁADNIE !!! , o buforowaniu UARTA , to byś dopisał Enable Interrupts i zapewne by zadziałało , a tak ... kiszka :D

    Piotrek
  • #8
    daniel93
    Level 29  
    Przesyłam wartości zmiennych, wyświetlacz sie kasuje, aby podczas testów pokazywał czy uC odbiera dane poprawnie. Zmiana na waitkey nic nie dała.

    Natomiast enable interrupt spowodowało dziwną reakcje: po chwili zamiast wartości 2 ostatnich zmiennych pojawiają sie spacje, a po drugiej chwili dzieje sie to samo z pierwszymi 2 wartościami.
    Kod wyglada tak:
    Code:
    Dim Zmienna As Byte , Zmienna2 As Integer                   
    
    Dim Ignorowane As Byte , Id As Byte , Dane As Byte
    Dim A As Byte , B As Byte

    Config Serialin = Buffered , Size = 20

    Enable Interrupts

    Zmienna = 5
    Do
    Waitms 500
    Cls
    Lcd Id ; " " ; Dane ; " " ; Zmienna ; " " ; B
    Id = Waitkey()
    Dane = Waitkey()
    Zmienna = Waitkey()
    B = Waitkey()

    Loop


    End
  • #9
    Michał_z1
    Level 16  
    A czy aby prędkości transmisji masz ustawione tak samo w obu urządzeniach??