avt 553 Moduły interfejsów szeregowych


Moduły interfejsów szeregowych
P R O J E K T Y
Moduły interfejsów
szeregowych
AVT-553/USB232
AVT-553/USB245
AVT-553/RS232
DziaÅ‚anie wielu urzÄ…dzeÒ
polega na wymianie danych,
najczÍÅ›ciej z komputerami.
Popularnym i prostym
sposobem jest wykorzystanie
w tym celu portu
szeregowego, ktÛry jest
dostÍpny we wszystkich
Jaki standard wybraĘ? nych, dostÍp do stabilizowanego
komputerach stacjonarnych
Przez dÅ‚ugie lata urzÄ…dzenia napiÍcia +5 V oraz moÅ‚liwośĘ
lub przenoÅ›nych. Do zewnÍtrzne moÅ‚na byÅ‚o podÅ‚Ä…czyĘ bezpiecznego doÅ‚Ä…czania i odÅ‚Ä…-
do komputera na dwa sposoby: czania urządzenia do/od włączo-
niedawna niepodzielnie
albo poprzez rÛwnolegÅ‚y port dru- nego komputera.
panował RS232, teraz coraz
karkowy (Centronics), albo po- Bardzo wygodne dla konstruk-
czÍÅ›ciej jest stosowany
przez port szeregowy RS232. Wie- torÛw rozwiÄ…zanie zaproponowaÅ‚a
interfejs USB.
le mikrokontrolerÛw jednoukÅ‚ado- firma FTDI, wprowadzajÄ…c na ry-
Od strony mikrokontrolera
wych, w tym prawie wszystkie nek układy interfejsowe FT8U232
do obsługi takiego połączenia
z rodzin '51 i AVR, posiada me- i FT8U245. SÄ… to scalone konwer-
potrzebna jest zarÛwno czÍśĘ
chanizmy uÅ‚atwiajÄ…ce wymianÍ tery USB2.0 na doskonale znany
sprzÍtowa, jak i trochÍ
danych w uproszczonym formacie RS232 lub wyjÅ›cie rÛwnolegÅ‚e.
oprogramowania realizujÄ…cego
RS232. Oznacza to, łe nie ma Oba te układy były juł opisywane
transmisjÍ. W artykule
potrzeby pisania specjalnego op- w EP i nie ma teraz potrzeby
pokałemy, jak mołna to rogramowania przeznaczonego do dokładnego omawiania sposobu
obsÅ‚ugi transmisji i odbioru ramki ich dziaÅ‚ania. Zajmiemy siÍ na-
zrobiĘ w urządzeniach
pojedynczego znaku. Wystarczy tomiast mołliwością ich zastoso-
opartych na mikrokontrolerach
jedynie wpisaĘ wÅ‚aÅ›ciwe dane do wania jako interfejsÛw ukÅ‚a-
z rodziny '51 i AVR.
kilku rejestrÛw i zainicjowaĘ od- dÛw z mikrokontrolerami oraz spo-
Rekomendacje: informacje
powiednie przerwania, dalej cała sobem ich oprogramowania.
przedstawione w artykule
transmisja przebiega w sposÛb pra-
przydadzÄ… siÍ konstruktorom
wie niewidoczny dla gÅ‚Ûwnego Trzy moduÅ‚y interfejsÛw
samodzielnie budujÄ…cym
programu mikrokontrolera. Nie- Na rys. 1, 2 i 3 pokazano
urzÄ…dzenia cyfrowe, ktÛre
zbÍdny jest jeszcze konwerter po- schematy trzech moduÅ‚Ûw inter-
komunikujÄ… siÍ z otoczeniem
ziomÛw najczÍÅ›ciej wykorzystujÄ…- fejsowych, w ktÛrych zastosowano
za pomocÄ… poÅ‚Ä…czeÒ
cy układ MAX232 lub jego od- układy: FT8U232 (moduł USB232),
przewodowych. powiednik. Ostatnimi laty pojawi- FT8U245 (moduł USB245) oraz
Å‚a siÍ jednak nowa moÅ‚liwośĘ - konwerter poziomÛw MAX232
port USB. (moduł RS232). Wszystkie mo-
Coraz wiÍcej komputerÛw PC duÅ‚y majÄ… wymiary nie wiÍksze
jest wyposałanych w ten właśnie nił standardowy układ scalony
rodzaj interfejsu. Coraz czÍÅ›ciej w obudowie DIP32 i moÅ‚na je
jest to jedyny, dostÍpny w kom- umieÅ›ciĘ w podstawce o takim
puterze port. USB ma kilka istot- rozmiarze.
nych zalet, np.: dośĘ duÅ‚Ä… prÍd- KaÅ‚dy moduÅ‚ jest kompletnym
kośĘ transmisji, moÅ‚liwośĘ podÅ‚Ä…- interfejsem sprzÍtowym pomiÍdzy
czania wielu urzÄ…dzeÒ peryferyj- mikrokontrolerem a portem USBlub
Elektronika Praktyczna 11/2003
31
Moduły interfejsów szeregowych
czonych symbolem V+ mołna
czerpaĘ niewielki prąd o wartości
kilkunastu miliamperÛw z gniazda
USB poprzez opornik zabezpie-
czający 4,7&! montowany na płyt-
kach ukÅ‚adÛw USB245 i USB232.
Z kolei moduł RS232 zasilany jest
z urzÄ…dzenia, w ktÛrym pracuje.
Poniewał jest to tylko konwerter
poziomÛw TTL/RS232, do jego
działania nie jest potrzebna ini-
cjalizacja ani połączenie z kompu-
terem.
Wyprowadzenia ukÅ‚adÛw
USB232 i RS232
Wszystkie układy zostały za-
projektowane tak, aby mogły byĘ
umieszczone w typowej podstaw-
ce DIP32, co ułatwia ich szybką
wymianÍ. Jednak liczba wyprowa-
dzeÒ pÅ‚ytki moduÅ‚u jest mniejsza
nił 32. W module USB232 nie są
wyprowadzone styki 13...16 oraz
17...20, natomiast w RS232 styki
Rys. 1. Schemat elektryczny modułu USB232
13, 16, 17 i 20.
RS232. Moduły były opracowane konieczne jest ich połączenie kab- Moduły USB232 i RS232 są ze
z myÅ›lÄ… o wzajemnej kompatybil- lem USB z komputerem, na ktÛ- sobÄ… kompatybilne jeÅ›li chodzi
ności i przykładowo moduł USB232 rym zainstalowane są odpowied- o wyprowadzenia najwałniejszych
moÅ‚na stosowaĘ wymiennie z ukÅ‚a- nie sterowniki. ModuÅ‚y zasilane sygnaÅ‚Ûw. Oznacza to, Å‚e moÅ‚na
dem RS232i w prostysposÛb osiÄ…g- sÄ… z portu USB i do ich inicja- je stosowaĘ wymiennie i zaleÅ‚nie
nąĘ moÅ‚liwośĘ wspÛÅ‚pracy mikro- lizacji nie jest potrzebne wÅ‚Ä…cze- od potrzeb wyposaÅ‚aĘ ukÅ‚ad mik-
kontrolera zarÛwno z portem USB, nie urzÄ…dzenia, w ktÛrym pracujÄ…. rokontrolera w interfejs USB lub
jak i RS232 bez koniecznoÅ›ci zmian Co wiÍcej, z wyprowadzeÒ ozna- RS232. W przypadku moduÅ‚u
na płytce drukowanej układu mik-
rokontrolera.
Wszystkie moduły są standar-
dowymi aplikacjami zastosowanych
ukÅ‚adÛw scalonych. Do prawidÅ‚o-
wej pracy ukÅ‚adÛw FT8U232/245
Rys. 2. Schemat elektryczny modułu USB245
Elektronika Praktyczna 11/2003
32
Moduły interfejsów szeregowych
Tab. 1. Funkcje wyprowadzeń
modułu USB245
Nr Nazwa Kierunek Opis
1 RXF OUT stan niski oznacza, że
bajt danych do odczy-
tu z modułu jest do-
stępny
2 TXE OUT stan niski oznacza, że
moduł jest gotów do
przyjęcia kolejnego
bajtu danych
3 WR IN zapis do modułu bajtu
danych zboczem opa-
dajÄ…cym
4 RD IN odczyt z modułu bajtu
danej zboczem naras-
tajÄ…cym
5 D7 I/O b.7 bajtu danych
6 D6 I/O b.6 bajtu danych
7 D5 I/O b.5 bajtu danych
Rys. 3. Schemat elektryczny modułu RS232
8 D4 I/O b.4 bajtu danych
9 D3 I/O b.3 bajtu danych
USB232 funkcje poszczegÛlnych dwie linie sterujÄ…ce (sygnaÅ‚y /DSR
10 D2 I/O b.2 bajtu danych
wyprowadzeÒ sÄ… w zasadzie kopiÄ… i /DTR), co umoÅ‚liwia sterowanie
11 D1 I/O b.1 bajtu danych
wyprowadzeÒ ukÅ‚adu FT8U232BM, przepÅ‚ywem danych pomiÍdzy
12 D0 I/O b.0 bajtu danych
ktÛry stanowi interfejs pomiÍdzy mikrokontrolerem i komputerem.
21 GND masa
linią USB a sygnałami interfejsu Na rys. 4 i 5 pokazano najpros-
22 n.c.
RS232. DokÅ‚adny opis poszczegÛl- tsze warianty poÅ‚Ä…czenia modu-
23 EECS I/O sygnał selekcji, jeSli
nych sygnaÅ‚Ûw moÅ‚na znaleüĘ Å‚Ûw M1 i M3 z mikrokontrolerem
stosowany jest zewnęt-
w dostÍpnych opisach standardu typu '51. rzny EEPROM
RS lub w dokumentacji technicz- 24 EECLK OUT zegar transmisji da-
nych, jeSli stosowany
nej układu scalonego do pobrania Wyprowadzenia układu
jest zewnętrzny EEPROM
ze strony producenta www.ftdi- USB245
25 EEDAT I/O sygnał danych, jeSli
chip.com (materiały tej firmy pub- Moduł USB245 jest interfejsem
stosowany jest zewnęt-
likujemy na CD-EP11/2003B). pomiÍdzy portem USB a dowol-
rzny EEPROM
KompatybilnośĘ obydwu mo- nym 8-bitowym portem mikrokon-
26 V+ OUT zasilanie z gniazda USB
duÅ‚Ûw istnieje na poziomie naj- trolera. Kilka dodatkowych linii
27 RSTOUT OUT wyjScie wewnętrznego
prostszej i najpopularniejszej steruje przepływem danych po-
generatora resetu
transmisji portem RS z wykorzys- miÍdzy moduÅ‚em a mikrokontrole-
28 PWREN OUT stan niski w czasie
taniem jedynie linii TxD, RxD rem. Funkcje wyprowadzeÒ mo-
konfiguracji modułu
i masy. Moduł USB232 posiada dułu przedstawiono w tab. 1.
29 n.c.
wyprowadzenia wszystkich sygna- Przykładowe połączenie modułu
30 n.c.
Å‚Ûw RS232 dla zÅ‚Ä…cza DB9. W mo- USB245 z mikrokontrolerem poka-
31 n.c.
dule USB232 mołna wykorzystaĘ zano na rys. 6.
32 GND masa
Rys. 4. Sposób dołączenia modułu USB232 do Rys. 5. Sposób dołączenia modułu RS232 do
mikrokontrolera mikrokontrolera
Elektronika Praktyczna 11/2003
33
Moduły interfejsów szeregowych
takÅ‚e peÅ‚niĘ funkcjÍ wyprowadzeÒ
sprzÍtowego interfejsu szeregowe-
go. Linie te oznaczone sÄ… symbo-
lami TxD i RxD (lub podobnymi).
Pierwsza przeznaczona jest do wy-
syłania danych w trybie szerego-
wym, a druga do odbioru danych.
Aby je uaktywniĘ, naleły wpisaĘ
odpowiednie wartości do kilku
rejestrÛw mikrokontrolera oraz na-
pisaĘ trochÍ oprogramowania do
obsługi transmisji szeregowej przez
mikrokontroler.
Wałną decyzją jest określenie
sposobu obsługi transmisji. Mołna
zaprogramowaĘ mikrokontroler
tak, aby sygnalizował jedynie od-
czyt bajtu lub gotowośĘ do wy-
Rys. 6. Sposób dołączenia modułu USB245 do mikrokontrolera
sÅ‚ania kolejnego, a program gÅ‚Ûw-
ny bÍdzie musiaÅ‚ sam zadbaĘ
Sterowniki WspÛÅ‚praca o wÅ‚aÅ›ciwÄ… reakcjÍ na zasygnali-
UkÅ‚adyinterfejsowe FT8U232BM mikrokontrolerÛw zowane w ten sposÛb zdarzenia.
i FT8U245BM, aby mÛc prawidÅ‚o- z moduÅ‚ami Nie jest to najwygodniejsze roz-
wo pracowaĘ, wymagajÄ… zainstalo- ModuÅ‚y USB232 i USB245 wiÄ…zanie, gdyÅ‚ zmusza gÅ‚Ûwny
wania specjalnych sterownikÛw na umoÅ‚liwiajÄ… korzystanie z portu program do ciÄ…gÅ‚ego sprawdzania,
komputerze PC, do ktÛrego sÄ… USB na nieco odmienne sposoby. czy nowe dane juÅ‚ siÍ pojawiÅ‚y
podÅ‚Ä…czane. Sterownik zostaje uak- Pierwszy - w przypadku zastoso- lub czy moÅ‚na juÅ‚ wysÅ‚aĘ resztÍ.
tywniony w momencie doÅ‚Ä…czenia wania moduÅ‚u USB245 - jest W dodatku jeÅ‚eli przegapi siÍ od-
do gniazda USB moduÅ‚u z wymie- prostszy. Sprowadza siÍ do ba- powiedni moment, kolejny przy-
nionymi układami. Działanie ste- dania stanu linii RXF i TXE chodzący bajt mołe byĘ wpisany
rownika powoduje, łe port USB sygnalizujących stan gotowości na miejsce poprzedniego jeszcze
widziany jest w systemie kompute- modułu do transmisji lub ko- nieodebranego przez program
rowym jako kolejny port COM niecznośĘ odczytu z moduÅ‚u ko- gÅ‚Ûwny zajÍty np. dÅ‚ugotrwaÅ‚ymi
obsÅ‚ugiwany w taki sam sposÛb jak lejnego bajtu. Niski stan obydwu obliczeniami. Znacznie wygodniej
wszystkie inne porty RS232. DziÍki linii sygnalizuje gotowośĘ do ko- zdaĘ siÍ na obsÅ‚ugÍ transmisji
temu programy potrafiÄ…ce obsÅ‚ugi- lejnej transmisji lub zakoÒczenie przez przerwania -maÅ‚e podpro-
waĘ porty COM bÍdÄ… mogÅ‚y korzys- odbioru bajtu. W przypadku gramy dziaÅ‚ajÄ…ce niezaleÅ‚nie od
taĘ z USB bez koniecznoÅ›ci jakiej- transmisji mikrokontroler powi- programu gÅ‚Ûwnego w tych mo-
kolwiek przerÛbki. nien wysÅ‚aĘ na linie D0...7 po- mentach, gdy trzeba coÅ› zrobiĘ
Sterowniki dla rÛÅ‚nych syste- ziomy odpowiadajÄ…ce wysyÅ‚ane- z transmisjÄ… szeregowÄ…. Takie op-
mÛw operacyjnych nieodpÅ‚atnie mu bajtowi i wygenerowaĘ ujem- rogramowanie mikrokontrolera nie
udostÍpnia firma FTDI na stronie ny impuls na linii WR. W przy- jest wcale trudne i pokaÅ‚emy, jak
internetowej www.ftdichip.com/ padku odczytu dana pojawi siÍ moÅ‚na to zrobiĘ.
FTDriver.htm. Ich instalacja jest na liniach D0...7 po podaniu W przykładach zostaną ułyte
bardzo prosta. Po Å›ciÄ…gniÍciu pli- stanu niskiego na liniÍ RD. dwa bufory: nadawczy i odbiorczy
ku sterownika odpo- o rozmiarze 8 bajtÛw kaÅ‚-
wiedniego do wersji sys- dy. Poza tym bÍdÄ… wyko-
Wszystko na CD-EP11/2003B
temu operacyjnego, rzystywane 3 rejestry mik-
Najnowsze wersje sterowników, noty katalogowe
w ktÛrym bÍdzie praco- rokontrolera dla licznikÛw
oraz oprogramowanie narzędziowe dla układów
waÅ‚, naleÅ‚y plik rozpa- bajtÛw w buforze nadaw-
produkowanych przez firmÄ™ FTDI publikujemy
kowaĘ do tymczasowego czym i odbiorczym,
na CD-EP11/2003B.
katalogu na dysku. Na- wskaünika aktualnej pozy-
stÍpnie za pomocÄ… kabla cji w rejestrze nadawczym
naleły połączyĘ moduł z kompu- Taka prostota okupiona jest jed- oraz dwa bity flag sygnalizujących
terem. Po wykryciu doÅ‚Ä…czonego nak koniecznoÅ›ciÄ… zaangaÅ‚owania fakt oprÛÅ‚nienia bufora nadawcze-
moduÅ‚u system operacyjny auto- aÅ‚ 12 linii portÛw. JeÅ‚eli w mik- go i umieszczenia w buforze od-
matycznie przeprowadza instala- rokontrolerze brakuje wolnych lini- biorczym kolejnego bajtu odebrane-
cjÍ sterownika, naleÅ‚y tylko po- i, ktÛre moÅ‚na przeznaczyĘ do tego go portem szeregowym.
daĘ katalog, w ktÛrym znajdujÄ… celu, trzeba zastosowaĘ szeregowÄ…
siÍ rozpakowane pliki. KaÅ‚de ko- transmisjÍ i moduÅ‚ USB232. W mik- Jak to zrobiĘ
lejne dołączanie modułu do kom- rokontrolerach z rodzin'51lub AVR w programie dla '51?
putera bÍdzie juÅ‚ automatycznie wydzielono dwie linie sterujÄ…ce, PrzykÅ‚ad oprogramowania nad-
uaktywniaÅ‚o odpowiedni sterow- ktÛre oprÛcz uniwersalnych zasto- zorujÄ…cego transmisjÍ w mikrokon-
nik, ktÛry juÅ‚ bÍdzie w systemie. sowaÒ jako wejÅ›cia/wyjÅ›cia mogÄ… trolerze z grupy '51 zaczniemy
Elektronika Praktyczna 11/2003
34
Moduły interfejsów szeregowych
rwaÒ. Dla wygody najlepiej to
List. 1. Program obsługi przerwania od portu szeregowego
zrobiĘ w osobnym podprogramie,
;przerwanie portu szeregowego
;-------------------
na przykład takim jak pokazano
Rs_przerwanie:
push acc ;zachowanie zawartości rejestrów
na list. 2.
push r0 ;użytych w procedurze przerwania
jb scon.1,rs_t ;przerwanie zostało spowodowane wysłaniem poprzedniego bajtu SzybkośĘ transmisji portu sze-
;obsługa odczytu kolejnego bajtu
regowego zaleÅ‚y od 3 czynnikÛw:
clr scon.0 ;zerowanie flagi odbioru bajtu w rejestrze SCON
mov a,#bufor_odbiorczy
czÍstotliwoÅ›ci kwarcu uÅ‚ytego
add a,licznik_odebranych_bajtów
mov r0, a ;obliczenie adresu do zapisu w buforze odbiorczym
w oscylatorze mikrokontrolera,
mov @r0,sbuf ;odebrany bajt z rejestru SBUF do buforu odbiorczego
inc licznik_odebranych_bajtów ;zwiększenie licznika bajtów w buforze
wartości początkowej wpisanej do
setb rs_rec_flag ;ustawienie flagi odbioru bajtu
jmp rs_t1
licznika T1 i ustawienia bitu
rs_t: ;obsługa wysłania kolejnego bajtu SMOD w rejestrze PCON. W prak-
clr scon.1 ;w rejestrze SCON zerowanie flagi zakończenia transmisji bajtu
tyce oznacza to, Å‚e niektÛrych
mov a,licznik_wysylanych_bajtow
jnz rs_t2
szybkości transmisji nie mołna
;wszystkie bajty zostały wysłane
setb rs_trans_flag ;ustawienie flagi sygnalizującej wysłanie wszystkich znaków
osiÄ…gnąĘ, jeÅ›li czÍstotliwośĘ kwar-
jmp rs_t1
rs_t2:
cu bÍdzie zbyt maÅ‚a. Standardowe
mov a,wskaznik_pozycji_w_buforze
add a,#bufor_nadawczy ;pozycja w buforze kolejnego bajtu do wysłania
szybkości transmisji w zakresie
mov r0,a
mov a,@r0 ;pobranie kolejnego znaku do wysÅ‚ania 1200...19200 bodÛw moÅ‚na osiÄ…g-
mov sbuf,a ;znak do rejestru wyjściowego SBUF
nąĘ stosujÄ…c kwarc o czÍstotliwoÅ›-
inc wskaznik_pozycji_w_buforze
dec licznik_wysylanych_bajtow
ci 11,059 MHz. W tab. 2 zesta-
rs_t1:
pop r0 ;odtworzenie stanu rejestrów
wiono wartości początkowe wpi-
pop acc ;używanych w procedurze przerwania
reti
sywane do zegara T1 i ustawienie
bitu SMOD dla poszczegÛlnych
szybkości.
List. 2. Program konfigurujÄ…cy UART
W przypadku zastosowania in-
;podprogram inicjacji transmisji szeregowej
;9600 bodów, 8 bitów danych, 1 bit stopu
nego kwarcu skazani jesteśmy na
;dla kwarcu mikrokontrolera 11,059MHz
;--------------------- eksperymentalne dobieranie war-
Inicjacja:
tości początkowej wpisywanej do
mov SCON, #50h ;ustawienie w rejestrze SCON trybu1: 8 bitów danych 1 bit stopu
mov TMOD, #20h ;transmisja będzie taktowana zegarem T1
zegara T1. Program naleły jeszcze
mov TH1, #0FDh ;wartości początkowe wpisywane do rejestrów
mov TL1, #0FDh ;zegara T1 dla szybkości transmisji 9600 bodów
uzupeÅ‚niĘ o deklaracjÍ uÅ‚ytych re-
anl PCON, #07Fh ;zerowanie bitu SMOD w rejestrze PCON
setb TR1 ;włączenie zegara T1
jestrÛw przeznaczonych do obsÅ‚u-
setb ES ;zezwolenie na przerwanie portu szeregowego
setb EA ;globalne zezwolenie na przerwania
gi transmisji, a takłe wpisaĘ pod
clr rs_rec_flag ;kasowanie flagi sygnalizującej odbiór bajtu
mov licznik_odebranych_bajtów, #0 ;zerowanie licznika odebranych bajtów odpowiednim adresem wektor
ret
przerwania portu szeregowego, co
pokazano na list. 3.
omawiaĘ od koÒca, czyli od pod- regowej: szybkośĘ, liczbÍ bitÛw Na list. 4 pokazano kilka linii
programu obsÅ‚ugi przerwania. startu i stopu, zainicjalizowaĘ re- kodu, ktÛre powinny znaleüĘ siÍ
W '51 istnieje tylko jedno prze- jestry i flagi zwiÄ…zane z trans- w programie gÅ‚Ûwnym, aby mieĘ
rwanie zwiÄ…zane z transmisjÄ… sze- misjÄ… oraz wÅ‚Ä…czyĘ obsÅ‚ugÍ prze- dostÍp do danych odebranych
regowÄ…. Na poczÄ…tku trzeba wiÍc
List. 3. Deklaracja rejestrów przeznaczonych do obsługi transmisji oraz
ustaliĘ, czy przerwanie zostało
ustalenie wektora przerwania portu szeregowego
wywołane odbiorem kolejnego
licznik_odebranych_bajtów EQU 30H ;licznik bajtów w buforze odbiorczym
znaku, czy zakoÒczeniem wysyÅ‚a-
licznik_wysylanych_bajtow EQU 31H ;licznik bajtów w buforze nadawczym
wskaznik_pozycji_w_buforze EQU 32H ;wskaznik pozycji w buforze nadawczym
nia poprzedniego. I zalełnie od
flagi EQU 20h ;adres bajtu flag
rs_rec_flag BIT flagi.0 ;flaga sygnalizacji odbioru bajtu
tego albo odczytany bajt ìwylÄ…du-
rs_trans_flag BIT flagi.1 ;flaga zakończenia transmisji bajtów z buforu nadawczego
ROZMIAR_BUFOROW EQU 8 ;deklaracja rozmiaru buforów
jeî w buforze odbiorczym, albo
bufor_odbiorczy: DS ROZMIAR_BUFOROW
kolejny bajt zostanie pobrany z bu- bufor_nadawczy: DS ROZMIAR_BUFOROW
ORG 23H
fora nadawczego i wysłany jmp Rs_przerwanie ;wektor przerwania portu szeregowego
w świat. Przykładowy program re-
alizujÄ…cy to zadanie pokazano na
List. 4.
list. 1.
mov c, rs_rec_flag
Zanim przerwanie zacznie jnc bufor_pusty ;w buforze odbiorczym nie ma nowych bajtów
clr ES ;zablokowanie przerwania portu szeregowego
funkcjonowaĘ, naleły najpierw
mov r0,# bufor_odbiorczy
petla_odczytu:
ustawiĘ parametry transmisji sze-
mov a, @r0 ;w rejestrze akumulatora bajt odczytany z bufora
... ;tutaj kod programu związany z wykorzystaniem bajtów
... ;przesłanych portem szeregowym z PC-ta
inc r0
djnz licznik_odebranych_bajtów, petla_odczytu
Tab. 2. Wartości wpisywane do T1
clr rs_rec_flag ;kasowanie flagi sygnalizującej odbiór danych
setb ES ;ponowne włączenie przerwania
dla różnych prędkości transmisji dla
bufor_pusty:
Inicjacja transmisji portem szeregowym może wyglądać następująco:
częstotliwości kwarcu 11,059 MHz
... ;kod programu zapisujÄ…cy do buforu nadawczego bajty danych
... ;do wysłania portem szeregowym
SzybkoSć SMOD WartoSć wpisywana do T1
mov licznik_wysylanych_bajtow, #ile_bajtów ;wpisanie do licznika ilości
;wysyłanych bajtów
19200 1 #FDh
mov wskaznik_pozycji_w_buforze, #0
mov r0,#bufor_nadawczy
9600 0 #FDh
mov a,@r0 ;w akumulatorze pierwszy bajt do wysłania
inc wskaznik_pozycji_w_buforze
4800 0 #Fah
dec licznik_wysylanych_bajtow
2400 0 #F4h mov SBUF, a ;zapis do SBUF pierwszego bajtu inicjuje transmisjÄ™
;zawartości bufora nadawczego
1200 0 #E8h clr rs_trans_flag
Elektronika Praktyczna 11/2003
35
Moduły interfejsów szeregowych
List. 5. Program odpowiadający za obsługę przerwania
;przerwanie odebrania kolejnego znaku z portu RS
;------------------------
UART_RXC:
push temp ;zachowanie zawartości rejestrów
push ZH ;użytych w procedurze przerwania
push ZL
in temp, SREG
push temp
Rys. 7. Schemat montażowy
ldi ZH,HIGH(bufor_odbiorczy)
ldi ZL,LOW(bufor_odbiorczy) modułu USB232
add ZL, licznik_odebranych_bajtów
clr temp ;obliczenie pozycji w buforze odbiorczym
adc ZH,temp ;do zapisu odebranego bajtu
in temp, UDR ;w rejestrze temp odebrany bajt
st Z,temp ;zapis bajtu w buforze odbiorczym
inc licznik_odebranych_bajtów ;zwiększenie licznika bajtów w buforze
sbr flagi, 1<< rs_rec_flag ;ustawianie flagi sygnalizującej odbiór bajtu
pop temp ;odtworzenie stanu rejestrów
out SREG, temp ;używanych w procedurze przerwania
pop ZL
pop ZH
pop temp
reti
Rys. 8. Schemat montażowy
;przerwanie zakończenia transmisji kolejnego znaku
;-------------------------
modułu USB245
UART_TXC:
push temp ;zachowanie zawartości rejestrów
push ZH
push ZL
in temp, SREG
push temp
cpi licznik_wysylanych_bajtow, 0
brne uat1
;wszystkie znaki zostały wysłane
sbr flagi, 1<< rs_trans_flag ;ustawienie flagi sygnalizującej wysłanie
;wszystkich znaków
rjmp uat2
uat1: ;transmisja kolejnego znaku
ldi ZH, HIGH(bufor_nadawczy)
Rys. 9. Schemat montażowy
ldi ZL, LOW(bufor_nadawczy)
add ZL, wskaznik_pozycji_w_buforze
modułu RS232
clr temp
adc ZH, temp ;pozycja w buforze kolejnego bajtu do wysłania
ld temp, Z
out UDR, temp ;wysyłany znak do rejestru transmisji UART
Ustawienie parametrÛw trans-
inc wskaznik_pozycji_w_buforze
dec licznik_wysylanych_bajtow misji, tak jak i w poprzednim
uat2:
przykÅ‚adzie, odbywa siÍ za pomo-
pop temp
out SREG, temp
cÄ… podprogramu inicjalizacji, ktÛ-
pop ZL
pop ZH
rego listing pokazano na list. 6.
pop temp
reti
Ze wzglÍdu na wiÍkszÄ… szyb-
kośĘ dziaÅ‚ania mikrokontrolerÛw
AVR, łatwiej jest osiągnąĘ stan-
List. 6. Podprogram inicjacji parametrów transmisji szeregowej
dardowe szybkości transmisji bez
;podprogram inicjacji transmisji szeregowej
;19200 bodów, 8 bitów danych, 1 bit stopu
wzglÍdu na rodzaj zastosowanego
;dla kwarcu mikrokontrolera 10MHz
;---------------------
kwarcu w generatorze. WzÛr po-
Inicjacja:
zwalający wyliczyĘ szybkośĘ
ldi temp, 32 ;wartość podzielnika dla szybkości 19200
transmisji w zaleÅ‚noÅ›ci od czÍs-
out UBRR, temp
sbi UCR, TXEN ;włączenie części nadawczej
totliwości kwarcu i wartości wpi-
sbi UCR, RXEN ;włączenie części odbiorczej
sbi UCR, RXCIE ;zezwolenie na przerwanie po odbiorze znaku
sanej do rejestru UBRR ma po-
sbi UCR, TXCIE ;zezwolenie na przerwanie po zakończeniu nadawania znaku
cbr flagi, 1<< rs_rec_flag ;kasowanie flagi sygnalizującej odbiór znaku
staĘ:
sei ;ogólne zezwolenie na przerwania
ret
BAUD =fclk/16*(UBRR-1),
gdzie:
BAUD - szybkośĘ transmisji w bi-
portem szeregowym oraz instruk- rujÄ… wiÍcej przerwaÒ, w tym osob- tach/sekundÍ,
cje inicjujÄ…ce transmisjÍ portem ne dla odczytu bajtu i osobne dla fclk - czÍstotliwośĘ oscylatora
szeregowym. zakoÒczenia transmisji bajtu. Tak mikrokontrolera,
Ustawienie w stanie wysokim jak w przypadku '51 zacznijmy od UBRR - wartośĘ wpisana do re-
flagi rs_trans_flag bÍdzie sygnali- obsÅ‚ugi przerwania (list. 5). jestru.
zowaÅ‚o zakoÒczenie transmisji za-
wartości bufora nadawczego.
List. 7. Deklaracja zastosowanych rejestrów AVR i ustawienie wektorów
skoków
Jak to zrobiĘ
.DEF licznik_odebranych_bajtów =r16 ;licznik bajtów w buforze odbiorczym
w programie dla
.DEF licznik_wysylanych_bajtow =r17 ;licznik bajtów w buforze nadawczym
.DEF wskaznik_pozycji_w_buforze =r18 ;wskaznik pozycji w buforze nadawczym
mikrokontrolera AVR?
.DEF flagi =r19 ;adres bajtu flag
Podobny program dla mikro- .DEF temp =r20 ;rejestr pomocniczy
.EQU rs_rec_flag =0 ;flaga sygnalizacji odbioru bajtu
kontrolera z grupy AVR bÍdzie .EQU rs_trans_flag =1 ;flaga zakoÅ„czenia transmisji bajtów z buforu nadawczego
.EQU ROZMIAR_BUFOROW =8 ;deklaracja rozmiaru buforów
wyglÄ…daÅ‚ trochÍ inaczej. Powodem
.DSEG
bufor_odbiorczy: .BYTE ROZMIAR_BUFOROW
jest zarÛwno inna skÅ‚adnia asem-
bufor_nadawczy: .BYTE ROZMIAR_BUFOROW
blera, jak i rÛÅ‚nice konstrukcyjne
.ORG 0x09
rjmp UART_RXC ;wektor przerwania odbioru kolejnego znaku z RS-a
obydwu mikrokontrolerÛw. Na
.ORG 0x0b
przykład mikrokontrolery AVR ofe- rjmp UART_TXC ;wektor przerwania ukończenia transmisji kolejnego znaku
Elektronika Praktyczna 11/2003
36
Moduły interfejsów szeregowych
List. 8. Program odpowiadający za dostęp do przesłanych danych
WYKAZ ELEMENTÓW
sbrs flagi, rs_rec_flag
rjmp bufor_pusty ;w buforze odbiorczym nie ma nowych bajtów Elementy modułu USB232
ldi ZH,HIGH(bufor_odbiorczy)
ldi ZL,LOW(bufor_odbiorczy) Rezystory
cbi UCR, RXCIE ;wyłączenie zezwolenia na przerwanie po odbiorze znaku
petla_odczytu: R2, R3: 27&!
ld temp,Z+ ;w temp bajt odczytany z buforu odbiorczego
... ;tutaj kod programu związany z wykorzystaniem bajtów R4: 4,7&!
... ;przesłanych portem szeregowym z PC-ta
dec licznik_odebranych_bajtów R5: 470&!
brne petla_odczytu
cbr flagi, 1<< rs_rec_flag ;kasowanie flagi sygnalizującej odbiór bajtu R6: 1,5k&!
sbi UCR, RXCIE ;włączenie zezwolenia na przerwanie po odbiorze znaku
R7: 0
bufor_pusty:
Kondensatory
Inicjacja transmisji:
... ;kod programu zapisujÄ…cy do buforu nadawczego bajty danych C1...C3: 100nF
... ;do wysłania portem szeregowym
ldi licznik_wysylanych_bajtow, #ile_bajtów ;wpisanie do licznika ilości C4: 33nF
;wysyłanych bajtów
clr wskaznik_pozycji_w_buforze
C5, C6: 22pF
ldi ZH,HIGH(bufor_nadawczy)
ldi ZL,LOW(bufor_nadawczy)
Półprzewodniki
ld temp,Z ;w temp pierwszy wysyłany bajt z bufora nadawczego
dec licznik_wysylanych_bajtow
U1: FT232BM
inc wskaznik_pozycji_w_buforze
cbr flagi, 1<< rs_trans_flag ;kasowanie flagi sygnalizującej wysłanie
Różne
;wszystkich znaków
out UDR, temp ;zapis do SBUF pierwszego bajtu inicjuje transmisjÄ™
CON_USB: gniazdo USB-A
;zawartości bufora nadawczego
X1: 6MHz
Elementy modułu USB235
DeklaracjÍ zastosowanych re- litÛw w module RS232 nie jest
Rezystory
jestrÛw i ustawienie wektorÛw krytyczna i moÅ‚e byĘ zmniejszona
R2, R3: 27&!
skokÛw pokazano na list. 7. nawet do 1µF. MoÅ‚e to tylko
R4: 4,7&!
Z kolei dostÍp do przesÅ‚anych skutkowaĘ nieco mniejszÄ… maksy-
R5: 470&!
poprzez RS danych i inicjacja malną długością kabla, jakiego
transmisji w programie gÅ‚Ûwnym moÅ‚na bÍdzie uÅ‚yĘ do poÅ‚Ä…czenia R6: 1,5k&!
mogą wyglądaĘ tak, jak pokazano modułu z portem COM kompute- Kondensatory
na list. 8. Ustawienie w stanie ra. W modułach USB232 i USB245
C1...C3: 100nF
wysokim flagi rs_trans_flag bÍ- najlepiej zastosowaĘ kwarce w nis-
C4: 33nF
dzie sygnalizowaÅ‚o zakoÒczenie kich obudowach. JeÅ‚eli moduÅ‚y
C5, C6: 27pF
transmisji zawartoÅ›ci bufora na- nie bÍdÄ… przewidziane do moco-
Półprzewodniki
dawczego. wania w podstawkach, mołna zre-
U1: FT245BM
zygnowaĘ ze stosowania specjal-
Różne
MontaÅ‚ moduÅ‚Ûw nych pinÛw, uÅ‚ywajÄ…c w to miej-
CON_USB: gniazdo USB-A
Schematy montałowe modu- sce srebrzanki do wlutowania na
X1: 6MHz
Å‚Ûw pokazano na rys. 7, 8 i 9.UÅ‚y- staÅ‚e moduÅ‚u do gÅ‚Ûwnej pÅ‚ytki
te do budowy moduÅ‚Ûw rezystory ukÅ‚adu, w ktÛrym bÍdÄ… pracowaĘ.
i kondensatory unipolarne majÄ… Ryszard Szymaniak, EP
Elementy modułu RS232
obudowy przeznaczone do mon- ryszard.szymaniak@ep.com.pl
Kondensatory
tału powierzchniowego typu 1206.
C1...C4: 47µF/16V
W module USB232 rezystor R7 Wzory płytek drukowanych w for-
C6: 100nF
ma wartośĘ 0&!. OczywiÅ›cie za- macie PDF sÄ… dostÍpne w Internecie
Półprzewodniki
miast niego mołna zastosowaĘ pod adresem: pcb.ep.com.pl oraz na
U5: MAX232
zwykÅ‚Ä… zworÍ. PojemnośĘ elektro- pÅ‚ycie CD-EP11/2003B w katalogu PCB.
Elektronika Praktyczna 11/2003
37


Wyszukiwarka

Podobne podstrony:
Interface szeregowy MODBUS
Program testujący dla wyświetlaczy VFD firmy Noritake z interfejsem szeregowym
#6 INTERFEJSY SZEREGOWE
2 Interfejsy szeregowe
Interfejs szeregowy dla programowalnej aparatury pomiarowej
wyświetlacz LCD z interfejsem szeregowym
Programator pamięci EEPROM z interfejsem szeregowym I2C
USB Uniwersalny interfejs szeregowy komusb
Interfejsy szeregowe
AVT5351 Modul interfejsow szeregowych dla Arduino
Interface szeregowy PROFIBUS
Moduły wyświetlaczy LED z interfejsem I2C 2
design user interface?ABE09F
SZEREGI wyklad

więcej podobnych podstron