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

Atmega2560[BASCOM],FT232RL wybór uartów do komunikacji

adambehnke 13 Gru 2009 05:35 4833 10
REKLAMA
  • #1 7381529
    adambehnke
    Poziom 24  
    Mam podłączony do Atmegi2560 układ FT232RL oraz zwykły MAX232.
    FT232RL jest podłączony w ten sposób:

    Atmega2560[BASCOM],FT232RL wybór uartów do komunikacji

    a MAX232 tak:

    Atmega2560[BASCOM],FT232RL wybór uartów do komunikacji






    Oczywiście układ FT232RL pracuje jak sądze poprawnie bo jest wykrywany przez PC a także przez Mprog-a.

    Mój problem polega na tym w jaki sposób mogę cokolwiek odbierać i nadawać przez FT232RL lub MAX232. Mam w atmedze wykorzystane piny:

    45(RXD1/INT2) ---> RXD FT232RL <=========== i tu mam błąd. Ma być na odwrót
    46(TXD1/INT3) ---> TXD FT232RL <===========

    12(RXD2)---> R1IN MAX232
    13(TXD2)---> T1IN MAX232

    63(RXD3)---> R2IN MAX232
    64(TXD3)---> T2IN MAX232

    W atmega32 był tylko jeden uart i wystarczyło użyć polecenia Print aby wysłać coś do kompa.
    A w jaki sposób wybrać np. że chcę wysłać powiedzmy słowo "TEST" poprzez FT232RL do komputera i w jaki sposób nasłuchiwać poprzez ten układ czy przychodzą jakieś dane?
    Czy jest możliwe(na pewno tak) aby FT232RL nasłuchiwał i odbierał dane z jednego kompa a MAX232 na innym uarcie nasłuchiwał innego kompa.
    Potrzebował bym prosty przykład w Bascomie typu:

    1.wybierz interesujący mnie UART np. ten na którym siedzi FT232RL
    2.wyślij np. słowo "TEST" do komp
    3.czekaj na odbiór danych z kompa (lub echo)



    Trochę zamieszałem ale chyba wiadomo o co chodzi.



    Dodano: no i jeszcze na płytce siedzi MAX485 także podłączony do jednego z Uartów RXD0 i TXD0 ale tu pewnie zasada będzie taka sama.


    Zapomniałem dodać że chodzi mi głównie o sprzętowy uart.
    Zapewne trzeba użyć polecenia OPEN dla otwarcia kanałów ale czy można zrobić to jakoś prościej aby nadawać i odczytywać przez wybrany UART?
  • REKLAMA
  • REKLAMA
  • #3 7382456
    adambehnke
    Poziom 24  
    ;]
    A no czytałem. Interesuje mnie jednak praktyczne użycie tych poleceń. Bo jak ja zacznę coś tworzyć to mi flash-a w procku nie starczy a pewnie potrzeba do tego dwóch linijek kody aby coś wysłać i odebrać z tego nieszczęsnego FT232RL :)
    W sumie co nowy atmel-ek to bardziej pokręcony.
  • REKLAMA
  • Pomocny post
    #4 7382592
    mirekk36
    Poziom 42  
    adambehnke napisał:
    Bo jak ja zacznę coś tworzyć to mi flash-a w procku nie starczy a pewnie potrzeba do tego dwóch linijek kody aby coś wysłać i odebrać z tego nieszczęsnego FT232RL :)


    ale dlaczego nieszczęsnego FT232RL - przecież komunikacja za jego pomocą to dokładnie to samo co przez MAX232 - tyle że tu masz o wiele lepszy samochód - mercedes - bo pozwala łączyć się przez USB i daje wsparcie od razu dla wszystkich sygnałów RS232 a nawt RS485 nie mówiąc już o innych bajerach.

    Tak więc podejście do niego dokładnie będzie takie samo jakbyś przez zwykły MAX gadał z PCtem po drugiej stronie.

    A to że Flasha ci może zabraknąć to już całkiem inna kwestia - to tylko Bascom i jego gotowce - ale dzieki nim nie musisz myśleć o szczegółach - tobisz Config Comx a potem tym samym PRINT'em tylko ze wskazaniem numeru kanału wysyłasz czy odbierasz to co chcesz tak samo jak przy procku z pojedyńczym UART'em - więc nadal zapytam w czym problem ? ;)

    A jak chcesz mieć dużo wolnego Flash'a na kod - to zabierz się za C - gwarantuję ci że ze wszystkim się zmieścisz czego potrzebujesz - tyle że będzie trzeba samemu robić to co już masz w gotowych procedurach Bascoma

    wybór należy do ciebie ;)
  • REKLAMA
  • #5 7385084
    adambehnke
    Poziom 24  
    Znalazłem coś takiego :


    'name                     :
    
    'purpose                  : test for M2560 support
    
    'micro                    : Mega2560
    
    'suited for demo          : yes
    
    'commercial addon needed  : no
    
    '-----------------------------------------------------------------------------------------
    
     
    
    $regfile = "m2560def.dat"                                 ' specify the used micro
    
    $crystal = 8000000                                         ' used crystal frequency
    
    $hwstack = 40                                               ' default use 32 for the hardware stack
    
    $swstack = 40                                               ' default use 10 for the SW stack
    
    $framesize = 40                                             ' default use 40 for the frame space
    
     
    
     
    
    '$timeout = 1000000
    
     
    
    'The M128 has an extended UART.
    
    'when CO'NFIG COMx is not used, the default N,8,1 will be used
    
    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Com4 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
     
    
    Enable Interrupts
    
    Config Serialin = Buffered , Size = 20
    
    Config Serialin1 = Buffered , Size = 20 , Bytematch = 65
    
    Config Serialin2 = Buffered , Size = 20 , Bytematch = 66
    
    Config Serialin3 = Buffered , Size = 20 , Bytematch = All
    
     
    
     
    
    'Open all UARTS
    
    Open "COM2:" For Binary As #2
    
    Open "COM3:" For Binary As #3
    
    Open "COM4:" For Binary As #4
    
     
    
     
    
    Print "Hello"                                             'first uart
    
    Dim B1 As Byte , B2 As Byte , B3 As Byte , B4 As Byte
    
    Dim Tel As Word , Nm As String * 16
    
     
    
    'unremark to test second UART
    
    'Input #2 , "Name ?" , Nm
    
    'Print #2 , "Hello " ; Nm
    
     
    
     
    
    Do
    
    Incr Tel
    
    Print Tel ; " test serial port 1"
    
    Print #2 , Tel ; " test serial port 2"
    
    Print #3 , Tel ; " test serial port 3"
    
    Print #4 , Tel ; " test serial port 4"
    
     
    
    B1 = Inkey()                                             'first uart
    
    B2 = Inkey(#2)
    
    B3 = Inkey(#3)
    
    B4 = Inkey(#4)
    
     
    
    If B1 <> 0 Then
    
      Print B1 ; " from port 1"
    
    End If
    
    If B2 <> 0 Then
    
      Print #2 , B2 ; " from port 2"
    
    End If
    
    If B3 <> 0 Then
    
      Print #3 , B3 ; " from port 3"
    
    End If
    
    If B4 <> 0 Then
    
      Print #4 , B4 ; " from port 4"
    
    End If
    
     
    
    Waitms 500
    
    Loop
    
     
    
     
    
     
    
    'Label called when UART2 received an A
    
    Serial1charmatch:
    
    Print #2 , "we got an A"
    
    Return
    
     
    
     
    
    'Label called when UART2 received a B
    
    Serial2charmatch:
    
    Print #3 , "we got a B"
    
    Return
    
     
    
     
    
    'Label called when UART3 receives a char
    
    Serial3bytereceived:
    
    Print #4 , "we got a char"
    
    Return
    
     
    
    End
    
     
    
    Close #2
    
    Close #3
    
    Close #4
    
     
    
    $eeprom
    
    Data 1 , 2



    I na tym teraz poćwiczę.



    Odbiór z Atmegi na kompa działa OK. W drugą stronę także. Ten układzik FT232RL jest całkiem dobry.
    Reasumując , to w sumie nadawanie i odbieranie w prockach wielo Uart-owych jest także że tak to ujmę "proste jak drut".

    Dziękuję za naprowadzenie mnie na trop.

    Dodano po 3 [godziny] 11 [minuty]:

    Jeszcze jedno pytanie. Otóż do układu FT232RL nie mam dołączone eproma jakie widziałem na paru schematach. Do czego on służy?
    I kolejne pytanie to podłączając moją płytkę do PC zgłasza się ona jako usb<=> serial converter. Czy można zmienić tą nazwę? Tak aby podłączone urządzenie widniało nie jako jakiś konwerter tylko np "Moduł 1 .........". W FTprog widziałem że można zmienić Manufacteur itp. ale po zmianie w systemie dalej widnieje jako converter. Zapewne w aplikacji na pc jaką stworzę będzie można odczytać te nazwy które daje się zmienić w Fprog-u. A może się mylę?
    Proszę o wypowiedź kogoś kto może już to przerabiał. Chyba że i to wie mój przedmówca? Który nie ukrywam nie raz mi już pomógł za co jestem mu wdzięczny.
  • Pomocny post
    #6 7386764
    mirekk36
    Poziom 42  
    adambehnke napisał:
    Jeszcze jedno pytanie. Otóż do układu FT232RL nie mam dołączone eproma jakie widziałem na paru schematach. Do czego on służy?

    Nie masz EEPROM'a ;) bo jest on wewnątrz scalaka..... To najnowsza wersja tego konwertera firmy FTDICHIP. A ty widziałeś schematy jego starszych braci, którzy poza EEPROM'em musieli mieć jeszcze sporo innych elementów(dodatków) na zewnątrz żeby w ogóle współdziałać z USB. A tu? NIC nie trzeba poza kilkoma kondkami filtrującymi!!! - dlatego ja osobiście tak lubię te scalaczki i b.często ich używam ;)


    adambehnke napisał:

    I kolejne pytanie to podłączając moją płytkę do PC zgłasza się ona jako usb<=> serial converter. Czy można zmienić tą nazwę? Tak aby podłączone urządzenie widniało nie jako jakiś konwerter tylko np "Moduł 1 .........". W FTprog widziałem że można zmienić Manufacteur itp. ale po zmianie w systemie dalej widnieje jako converter. Zapewne w aplikacji na pc jaką stworzę będzie można odczytać te nazwy które daje się zmienić w Fprog-u. A może się mylę?
    Proszę o wypowiedź kogoś kto może już to przerabiał. Chyba że i to wie mój przedmówca? Który nie ukrywam nie raz mi już pomógł za co jestem mu wdzięczny.


    Pewnie, że można spokojnie i bez obaw tę zmienić nazwę "usb serial converter" na dowolną swoją nazwę. Masz przecież program Mprog (to najnowasza wersja do programowania właśnie EEPROMów tych scalaczków) i w niej jest pole z tą nazwą i można je spokojnie zmienić na co chcesz. Ale uwaga!!! nie baw się zmianami VID i PID. Tzn je też można podmieniać - ale wtedy trzeba umieć przerobić sobie odpowiednio sterowniki *.ini Próbowałem się kiedyś właśnie bawić nawet w zmianę VID i wprowadzanie poprawek w plikach *.ini sterowników. Więc wiem, że da radę to zrobić . Tylko że zabawy z VID i PID są o tyle niebezpieczne, że np dasz komuś swoje urządzonko z tymi przerobionymi sterownikami - a kiedyś windows sam automatycznie czy też user ręcznie zassie sobie nowsze wersje sterowników FTDI z netu - to będzie mega klops - bo nagle urządzenie przestanie być widoczne. A żeby potem to przywrócić do działania to jest co nieco zabawy. Trzeba użyć Clean.exe żeby wyczyścić wszystkie sterowniki z Windy. Dopiero wtedy zadziała Mprog żeby w ogóle można było przywrócić VID na standardową wartość (zdaje się 0403) i ponownie zainstalować już standardowe sterowniki żeby ruszyło. Dlatego więc, że na własnej skórze przeszedłem tę drogę przez mękę - to już się przestałem "brzydko" bawić z VID; ;)

    Reasumując tylko zmiana nazwy jest bezpieczna i niczemu nie szkodzi ;)
  • #7 7394223
    adambehnke
    Poziom 24  
    Jeszcze mam jedno -może dwa pytanka.
    Otóż dla mnie najwygodniejsze było by zrobienie odbioru danych wszystkich czterech uartów w przerwaniach. Tak aby jeśli przyjdą jakieś dane, z któregoś z moich czterech modułów komunikujących się właśnie poprzez rs232 , to działo by się mniej więcej coś takiego że:

    1.Po pierwsze dane przesyłane są w postaci "paczek danych" w postaci:

    01A02A03A04A itd aż to 200 znaków. Na końcu takiej paczki jako ostatni znak wysyłam chr(13).

    2. Ale także i występują inne krótsze "komendy" które po odebraniu i rozpoznaniu przez procka inicjują realizacje jakiegoś zadania: SET01 +chr(13)



    W sumie to jeśli chodzi o rozpoznawanie co odebrałem przez UART to nie mam za bardzo problemu .

    Znalazłem coś takiego Kolegi Dawid512 i po drobnych przeróbkach dostosuje to do własnych potrzeb.

    On Urxc Odebrano
    Enable Urxc
    
    
    
    
    
    
    Odebrano:
    Disable Urxc                                                ' wylaczenie przerwania na czas trwania aktualnego
                                                                 'Jesli licznik znakow jest mniejszy od maksymalnego rozmiaru bufora to...
    If Licz_znaki < Max_znakow Then                             '...zwieksz licznik znakow, do buforu transmisji dopisz nastepny znak
       Incr Licz_znaki                                          'Chr(udr) dopisuje znaki z rejestru udr (rejestr transmisji)
       Bufor = Bufor + Chr(udr)
    End If
    
    
    If Licz_znaki = Max_znakow Then
    Print Bufor                                                 'Jesli bufor jest pelny to...
     Bufor = ""                                                 ' wyzeruj bufor i...
     Licz_znaki = 0
     Set Flaga                                                  'wyzeruj licznik znakow
    End If
    
    
    
    Enable Urxc
    Return


    Ale jak to zrobić aby mieć w sumie osobne przerwanie dla każdego Uarta czyli dla COM 1-4? Tego nie mogę rozgryźć.
    W pomocy bascoma jakoś nie mogę trafićna to polecenie : Urxc
    Czy Urxc to po prostu Com1 i analogiczne Urxc2 to Com2 ? Czy coś przekolorowałem? Myślałem o użyciu Serialin i dlatego skonfigurowałem je już za wczasu w porgramie , ale jak dla tych uartów to już nie wiem.

    Com-y mam w moim programie skonfigurowane tak:

    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Com4 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Serialin = Buffered , Size = 20
    Config Serialin1 = Buffered , Size = 20
    Config Serialin2 = Buffered , Size = 20
    Config Serialin3 = Buffered , Size = 20
    
    Config Serialout = Buffered , Size = 20
    Config Serialout1 = Buffered , Size = 20
    Config Serialout2 = Buffered , Size = 20
    Config Serialout3 = Buffered , Size = 20




    Dla testów w programie chciałem użyć właśnie przykładu kolegi Dawid512:

    i zrobiłem coś takiego:

    Enable Interrupts
    On Urxc Odebrano
    Enable Urxc


    Ale podczas kompilacji otrzymuję błędy:

    Atmega2560[BASCOM],FT232RL wybór uartów do komunikacji


    A co biega i jak najprościej zrobić bufory w przerwaniu dla każdego uarta osobno które po osiągnięciu wymaganej ilości znaków ustawią swoje flagi i poinformują mnie że nadeszły dane.Wiem że, trochę przynudzam ale z pewnością nie tylko mnie się to przyda.




    Dodano:
    Ok, błędy były spowodowane tym że miałem skonfigurowane wcześniej przed Urxc :

    Config Serialin = Buffered , Size = 20
    Config Serialin1 = Buffered , Size = 20
    Config Serialin2 = Buffered , Size = 20
    Config Serialin3 = Buffered , Size = 20
    
    Config Serialout = Buffered , Size = 20
    Config Serialout1 = Buffered , Size = 20
    Config Serialout2 = Buffered , Size = 20
    Config Serialout3 = Buffered , Size = 20


    Teraz kompilacja przebiegła poprawnie ale wolałbym wiedzieć co robię i jednak chyba używać serialin. Przy zastosowani Urxc program mi się wiesza w momencie odebrania znaku z jednego z com-ów

    Potrzebuję pomocy "dość szybkiej" i w miarę kompletnej na ww.temat gdyż nagli mnie trochę czas którego i tak mam bardzo niewiele i przeważnie tylko w nocy :/
    Oddam połowę swoich punktów osobie która mi pomoże. Nie mam ich zbyt wiele ale tym bardziej widać jak zdesperowany jestem :D
  • Pomocny post
    #8 7394625
    mirekk36
    Poziom 42  
    Ja tam zawsze się bardzo dziwię ludziom gdy w Bascomie robią jakieś własne dziwne obsługi przerwań typu Urxc (biorąc pod uwagę to co chcą osiągnąć). Zwykle potrzeby są proste ale wymyślanie po to własnego kodu w Bascomie jest wg mnie totalnym chodzeniem pod górkę i tworzeniem sobie dodakowych mega problemów ;)

    Toż Bascom ma na prawdę wspaniałą i dobrze zorganizowaną sprzętową obsługę UART czy UART'ów. Po choineczkę więc walczyć i samemu ręcznie rzeźbić Urxc. Lepiej ten czas poświęcić na dogłębne poznanie możliwości sprzętowych Bascoma i dopiero jak one będą czy okażą się kiedyś "za cisane" to można sobie robić własne ale wstawki asemblerowe itp w tym celu.

    Do rzeczy - gdybyś chciał ręcznie rzeźbić 4 takie przerwania Urxc w takim procku - oj to byś rzeźbiarzem został ;) .... toż to trzeba poczytać sporo o rejstrach sterujących, wszystkich przerwaniach i w ogóle to wtedy lepiej zabrać się samemu za napisanie tej obsługi ale w C albo jak ktoś lubi się katować to asemblerze.

    Nie wiem czy można tak w 2 zdaniach komuś podpowiedzieć jak szybko zrobić kompletną transmisję na 4 UART'ach - skoro na jednym nie zna się wszystkich możliwości. Proponuję na początek zapoznać się z mechanizmem Bytematch przy Config Serilalin - oraz poszukać tu na forum jak co niektórzy sobie radzą i jak wykorzystują to w swoim kodzie
  • #9 7394706
    adambehnke
    Poziom 24  
    Właśnie mnie interesuje przykład w przerwaniu dla jednego Uarta. Po prostu chcę aby flaga z przerwania danego uarta poinformowała mnie że czekają już jakieś dane. Kolejne uarty sobie już dostosuję. Chodzi tylko o "podstawę".

    Dla przykładu dla uarta nr. 1 podłaczone piny:

    46 TXD1/INT3
    45 RXD1/INT2

    to powinno wyglądać to tak: ?

    on int2 uart_1
    enable int2





    uart_1:
    disable int2


    Ale jak to zorganizować?



    Bufor = bufor + ???
    if bufor= max_ilość znaków then Flaga_uart1 = 1




    enable int2
    return
  • Pomocny post
    #10 7394787
    mirekk36
    Poziom 42  
    EEEEEEEj kolego - teraz to żeś zamieszał ;) .... sorki że się uśmiecham ale to nie z ironii tylko z pomysłowości ;)

    A co ma piernik do wiatraka czyli co ma jakieś INT2 do UART1 ???? no jak można tak odczytywać znaczenie opisu różnych funkcji nóg procesora

    To tylko oznacza, że ten pin może pełnić rolę albo zwykłego pinu I/O albo rolę RxD1 (czyli wejście UART1) albo może pełnić rolę wejścia przerwania INT2. Przy czym przerwanie INT2 nie ma nic wspólnego z RxD ..... ooooj troszkę kolega spędzi czasu nad opanowaniem UART'a - na szybko ni da rady. Co gorsza - co nagle to po diable - więc zamiast spokojnie usiąść i poczytać gdzieś o tym jak wykorzystywać sprzętowy UART w Bascomie - to kolega będzie właśnie wpadał na takie pomysły z kosmosu.

    Podpowiem tylko że sprzętowa obsługa UART'a w Bascomie w ogóle nie jest związana z żadnym ale to żadnym pisaniem własnego kodu do jego obsługi. Toż Bascom to wszystko załatwia.

    Jeszcze raz podpowiem - proszę zajrzeć do helpa do polecenia

    Config Serialin

    i tam poczytać o czymś takim jak Bytematch - to może to kolegę naprowadzi na trop - w jakim kierunku iść w Bascomie ;)
  • #11 7395171
    adambehnke
    Poziom 24  
    <wstyd>

    Ja tu prawdziwe szopki odstawiam a tu w kilku linijkach można skonfigurować i odbierać dowolne dane z dowolnych uartów przy użyciu serialin i w szczególności Bytematch!

    I w dodatku każdy z uartów ma swoje wlasne przerwanie :]
    Dzięki za trop, ale jak to się mówi jak się nie sparzysz to się nie nauczysz .Tylko idąc moim poprzednim tropem mógłbym tych oparzeń nie przeżyć :P A najśmieszniejsze jest to że przy użyciu przerwania z mojego poprzedniego postu także udawało mi się odczytać kod znaku !! Nie za każdym razem ale jednak.A było to spowodowane tym że pod ten pin mam podłączone FT232RL i generował zewnętrzne przerwanie w momencie kiedy wysyłałem znak z terminala.:D


    A poniżej kod który wprowadził mnie w obsługę wielu uartów i wybił z głowy super pomysły :) Gdyby nie Mirek to do rana miał bym napisane prawdziwą powieść .A to dlatego że do tej pory bawiłem się tylko jednym uartem i to na M16 i 32.


    'micro                    : Mega2560
    
    'suited for demo          : yes
    
    'commercial addon needed  : no
    
    '-----------------------------------------------------------------------------------------
    
     
    
    $regfile = "m2560def.dat"                                   ' specify the used micro
    
    $crystal = 8000000                                         ' used crystal frequency
    
    $hwstack = 40                                               ' default use 32 for the hardware stack
    
    $swstack = 40                                               ' default use 10 for the SW stack
    
    $framesize = 40                                             ' default use 40 for the frame space
    
     
    
     
    
    '$timeout = 1000000
    
     
    
    'The M128 has an extended UART.
    
    'when CO'NFIG COMx is not used, the default N,8,1 will be used
    
    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Config Com4 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
     
    
    Enable Interrupts
    
    Config Serialin = Buffered , Size = 20
    
    Config Serialin1 = Buffered , Size = 20 , Bytematch = 65
    
    Config Serialin2 = Buffered , Size = 20 , Bytematch = 66
    
    Config Serialin3 = Buffered , Size = 20 , Bytematch = All
    
     
    
     
    
    'Open all UARTS
    
    Open "COM2:" For Binary As #2
    
    Open "COM3:" For Binary As #3
    
    Open "COM4:" For Binary As #4
    
     
    
     
    
    Print "Hello"                                               'first uart
    
    Dim B1 As Byte , B2 As Byte , B3 As Byte , B4 As Byte
    
    Dim Tel As Word , Nm As String * 16
    
     
    
    'unremark to test second UART
    
    'Input #2 , "Name ?" , Nm
    
    'Print #2 , "Hello " ; Nm
    
     
    
     
    
    Do
    
    Incr Tel
    
    Print Tel ; " test serial port 1"
    
    Print #2 , Tel ; " test serial port 2"
    
    Print #3 , Tel ; " test serial port 3"
    
    Print #4 , Tel ; " test serial port 4"
    
     
    
     B1 = Inkey()                                             'first uart
    
     B2 = Inkey(#2)
    
     B3 = Inkey(#3)
    
     B4 = Inkey(#4)
    
     
    
    If B1 <> 0 Then
    
        Print B1 ; " from port 1"
    
    End If
    
    If B2 <> 0 Then
    
        Print #2 , B2 ; " from port 2"
    
    End If
    
    If B3 <> 0 Then
    
        Print #3 , B3 ; " from port 3"
    
    End If
    
    If B4 <> 0 Then
    
        Print #4 , B4 ; " from port 4"
    
    End If
    
     
    
    Waitms 500
    
    Loop
    
     
    
     
    
     
    
    'Label called when UART2 received an A
    
    Serial1charmatch:
    
    Print #2 , "we got an A"
    
    Return
    
     
    
     
    
    'Label called when UART2 received a B
    
    Serial2charmatch:
    
    Print #3 , "we got a B"
    
    Return
    
     
    
     
    
    'Label called when UART3 receives a char
    
    Serial3bytereceived:
    
    Print #4 , "we got a char"
    
    Return
    
     
    
    End
    
     
    
    Close #2
    
    Close #3
    
    Close #4
    
    
REKLAMA