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

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

adambehnke 13 Gru 2009 05:35 3930 10
  • #1 13 Gru 2009 05:35
    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?

    0 10
  • Pomocny post
    #2 13 Gru 2009 12:34
    mirekk36
    Poziom 42  

    A czytałeś w helpie Bascoma o Config COMx ;) bo to specjalnie dla ciebie ta część helpa ;)

    0
  • #3 13 Gru 2009 12:46
    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.

    0
  • Pomocny post
    #4 13 Gru 2009 13:08
    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 ;)

    0
  • #5 13 Gru 2009 23:57
    adambehnke
    Poziom 24  

    Znalazłem coś takiego :


    Code:
    '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.

    0
  • Pomocny post
    #6 14 Gru 2009 09:24
    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 ;)

    0
  • #7 15 Gru 2009 21:07
    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.

    Code:
    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:

    Code:
    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:

    Code:
    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 :

    Code:
    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

    0
  • Pomocny post
    #8 15 Gru 2009 22:06
    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

    0
  • #9 15 Gru 2009 22:15
    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

    0
  • Pomocny post
    #10 15 Gru 2009 22:25
    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 ;)

    0
  • #11 15 Gru 2009 23:30
    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.


    Code:
    '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

    0