BASCOM i UART

    Napisanie programu umożliwiającego przesłanie danych przez port UART w kompilatorze Bascom wydaje się być bardzo proste, ale tak nie jest. Powodem próby wyjaśnienia problemów, jest współpraca modułów Bluetooth (XM-15B, HC-5, HC-6) z mikrokontrolerem. Transmisja danych odbywa się przez port UART. Połączenia należy krosować czyli wykonać następująco:
- moduł Bluetooth TxD -> RxD UART,
- moduł Bluetooth RxD -> TxD UART,
- Vcc - U=5 V,
- GND - masa układu mikrokontrolera (GND).

Zacząć należy od  wyboru rodzaju portu software/hardware. Następnie musimy zdecydować czy otwarte zostaną dwa kanały transmisji danych, czy jeden dwukierunkowy. Jeżeli wybieramy dwa kanały, to pierwszy używany jest do wysyłania danych (For Output), a drugi do odbierania (For Input).  Możemy wybrać jeden kanał dwukierunkowy (For Binary), jednak wiąże się to z koniecznością wyboru wspomagania sprzętowego dla UATR. Przykładowo dla mikrokonrolera ATMega32 są to piny 14 i 15 opisane RxD oraz TxD. Na końcu należy zadbać o otwarcie kanałów i odpowiednie ich zamknięcie oraz aktywację przerwań (Enable Interrupts) jednak nie zawsze. W omawianych poniżej metodach wybrano  sprzętowe wspomaganie transmisji danych przez konfigurację - hardware.


Config Com1 = 9600, Synchrone = 0, Parity = None, Stopbits = 1, Databits = 8, Clockpol = 0 (dokładny opis w pliku pomocy F1)
Open "COM1:" For Binary As #1

To jest otwarcie dwukierunkowego kanału o nazwie #1.
Close #1
Tak zamykamy kanał #1 i należy tę komendę umieścić na końcu całego kodu.


Open "comd.0:9600,8,n,1" For Input As #1

Open "comd.1:9600,8,n,1" For Output As #2
To jest otwarcie osobnych kanałów #1 i #2 oraz jednoczesna konfiguracja transmisji:
comd.1 - port com w PORTD.1
9600 - Baud Rate,
8
- ramka ośmio bitowa,
n - brak bitu parzystości,
1 - jeden bit stopu.
Close #1
Close #2

zamykają odpowiednio kanały #1 i #2.

Kompilator Baskom zawiera następujące komendy i funkcje umożliwiające komunikację przez port UART:
Input #1, zmienna - ZATRZYMUJE! działanie programu w tym miejscu i oczekuje na dane,
Get #1, zmienna
- pobiera jeden znak z portu UART,
Print #2, zmienna
- wpisuje dane do portu UART.
Ischarwaiting - sprawdza czy w buforze UART znajduje się znak.

Do wyżej wymienionych problemów dochodzi decyzja o buforowaniu transmisji lub działaniu bezpośrednim.
Config Serialin = Buffered , Size = 10

Przykładowy fragment programu:

Open "COMD.0:9600,8,n,1" For Input As #1
Open "COMD.1:9600,8,n,1" For Output As #2
Gosub Disp

Do
Input #1 , Znaki Noecho
 If Znaki = "Sw11" Then
   Porta.0 = 0
   Print #2 , "Led1 1"
 End If
   Gosub Disp
   Print #1, Znaki
Loop
End

Disp:
  Cls
  Lcd "Znaki - " ; Znaki
Return
Close #1
Close #2
Istnieje możliwość "uwolnienia" działania programu od zatrzymania przez buforowanie portu UART lub aktywację polecenia $Timeout.  Wpisanie większej wartości, powoduje wydłużenie czasu oczekiwania na uwolnienie. Limit czasu nie jest podawany w sekundach ani mikrosekundach, lecz jest liczbą względną. Jej wartość zależy od częstotliwości generatora taktującego i wymagań stawianych programowi.   [..cd..]

 

Tomasz Heilig  ©  2023
Copyright © 2014
Designed by Free CSS Templates |
Darmowe Szablony