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

Bascom instrukcja serin serout

12 Lip 2009 12:47 2707 10
  • Poziom 15  
    chcę nawiązać komunikację z urządzeniem które wysyła i odbiera dane na jednej linii protokół standardowy jak w rs232 użyłem poleceń SERIN i SEROUT w bascomie ale po wysłaniu ramki odbiera jakieś śmieci podkreślam że transmisja podsłuchiwana była w terminalu i urzadzenie odpowiada poprawnie , ale procesor odbiera śmieci .Czy trzeba stosować jakiś bufor czy poprostu bascom nie wyrabia się z przełączniem kierunku pinu.
    Rezonator mam 110592 Mhz a więc transmisja bezbłędna
  • Poziom 43  
    SERIN i SEROUT to nie jest do RS232.
    Do tego jest Print/Printbin i Input/Inputbin.
    Jest jeszcze Inkey.
  • Poziom 43  
    Faktycznie. Może dlatego nie działa bo prędkość taktowania za duża.

    Dodano po 6 [minuty]:

    A sorki, pomyliłem się. SerIn i SerOut też jest do RS232.
    A przełączasz kierunek portu? SerIn samo nie przełącza portu na wejście. Chyba.
  • Poziom 39  
    atom1477 napisał:
    A przełączasz kierunek portu? SerIn samo nie przełącza portu na wejście. Chyba.

    Procedura _SERIN sama przełącza tryb pracy portu. Jednak nie ustawia na nim podciągnięcia.

    Code:
    [_SERIN]
    
    ; universal serial input software UART
    ;reg of DDR in Z
    ;pin (0-7) in r24
    ;address of data in X
    ;T is set for inverted output
    ;Y pointer points to the serial params
    ;___SER_BAUD is set to the proper bit delay
    _serin:
      rcall _adjust_pin                                     ; adjust pin so we can use sbr
      ld r0, z                                              ; get DDR
      and r0,r25                                            ; make input pin
      st z,r0                                               ; store
      inc r30                                               ; point to port
      ld r0,z
      and r0,r25
      st z,r0                                               ; make 0

    Tak samo wygląda prolog _SEROUT, tylko, że zamiast AND R0, R25 jest OR R0, R25.
  • Poziom 15  
    Linia jest podciągnięta do plusa już w urządzeniu
    Code:
      
    
    Serout Nag(1)5 , 5 , C , 0 , 9600 , 1 , 8 , 2    'wysyła nagłówek 
    Serin Ans(1) , 1 , C , 0 , 9600 , 1 , 8 , 2        ' odbiera bajt potwierdzenia
    If Ans(1) = &HA2 Then                               
    Serout rozkaz(1)10 , 10 , C , 0 , 9600 , 1 , 8 , 2  ' wysyła rozkaz
     Else
    End If

    niestety przy odbiorze potwierdzenia jest inna wartość bajtów a to jest ważne dla programu który chcę napisać

    Część postu usunąłem.
    [zumek]
  • Poziom 39  
    sstaniszewski napisał:
    Linia jest podciągnięta do plusa już w urządzeniu
    Code:
      
    
    Serout Nag(1)5 , 5 , C , 0 , 9600 , 1 , 8 , 2    'wysyła nagłówek 
    Serin Ans(1) , 1 , C , 0 , 9600 , 1 , 8 , 2        ' odbiera bajt potwierdzenia
    If Ans(1) = &HA2 Then                               
    Serout rozkaz(1)10 , 10 , C , 0 , 9600 , 1 , 8 , 2  ' wysyła rozkaz
     Else
    End If

    niestety przy odbiorze potwierdzenia jest inna wartość bajtów a to jest ważne dla programu który chcę napisać

    A kto Tobie takie głupoty kazał napisać jak: rozkaz(1)10, Nag(1)5? Co to w ogóle ma być? I jeszcze się kolega dziwi, że nie działa...
  • Poziom 15  
    rozkaz(1)10, Nag(1)5 to są zmienne tablicowe w których mam rozkazy
  • Poziom 39  
    Przed Tobą długie i wnikliwe czytanie pomocy jak definiowane, i jak obsługiwane są tablice w BASCOM.
  • Poziom 15  
    Zmienne tablicowe jak najbardzej są zdefiniowane na poczatku programu ,program poprawnie wysyła dane i urzadzenie odpowiada poprawnie(podsłuchiwane na terminalu) ale z kolei do zmiennej ANS trafia inna wartość bajtu niż widziana terminalu ,moim zdaniem to chyba będzie wina szybkość przełacznia kierunku
  • Poziom 10  
    Witam,
    Podpinam się do tematu, ponieważ napotkałem na problemy podczas próby wykorzystania instrukcji Serout.
    Polegają one mianowicie na tym, że na kontrolerach takich jak ATTINY13 czy ATTINY85 nie działa ona wcale, ustawiając jedynie na wyjściu stan niski,
    natomiast na większych procesorach, takich jak ATMEGA8535 czy ATMEGA162 działa prawidłowo, lecz tylko na niektórych pinach. A na niektórych nie podaje podczas wysyłania ciągu stanu wysokiego i niskiego tylko np. 0-3,8V przy zasilaniu 5V.
    Dziwne jest takie zachowanie i nie wiem, co może być jego przyczyną. Czy ktoś mógłby mi pomóc?
  • Poziom 10  
    Po chwili sam znalazłem rozwiązanie swojego problemu, jeżeli kogoś by to jeszcze interesowało.

    Instrukcje Serin i Serout to jest jakaś pomyłka w ogóle.
    Zamiast nich najlepiej jest użyć instrukcji Open "comx.y:Baud,data,parity,stop,[inverted]" For Input|Output As #Handle i wysyłać oraz odbierać dane za pomocą instrukcji Input #Handle oraz Print #Handle dokładnie tak samo jak prz hardware'owym uarcie.