Mikrokontrolery cz19.pdf

(763 KB) Pobierz
1128258 UNPDF
Też to potrafisz
W tym odcinku kończymy
omawianie układów I/O cieka−
wym przykładem wykorzystania
dostępnego ostatnio na rynku
polskim układu scalonego
SA9203. Kostka może stać się
otyle atrakcyjna gdyż jest
ostatnio dostępna w sieci
handlowej AVT, toteż każdy
z Was kto zainteresuje się
niniejszym układem , będzie
mógł spróbować wykorzystać
go dla swoich potrzeb – a jak
się za chwilę przekonacie
zastosowań może być wiele.
Dziś także rozwiązanie zadania
z poprzedniej lekcji – czyli
drukowanie z komputerka
AVT−2250 na zwykłej drukarce
komputerowej wyposażonej
w równoległe złącze standardu
Centronics.
Mikrokontrolery?
To takie proste...
Część 19
Programowane układy wejścia−wyjścia cz III
Dziś chciałbym zapoznać Cię drogi czytelniku z ciekawym układem
I/O, którego możliwości odpowiadają mniej więcej dwóm, omawianym
wcześniej układom 8255. Chodzi o układ dość egzotycznej bo południo−
woafrykańskiej firmy produkującej szeroka gamę układów dla potrzeb
nowoczesnej telekomunikacji − SAMES. Mowa będzie o układzie
SA9203. Ponieważ od niedawna układ ten jest dostępny w ofercie han−
dlowej AVT, a jego cena jest przystępna jak na możliwości kostki, posta−
nowiłem zakończyć cykl o układach I/O omówieniem właśnie jego moż−
liwości. Drugim powodem dla którego chcę zwrócić szczególną uwagę
na kostkę SA9203 to idealna wprost kompatybilność z rodziną mikro−
procesorów 8051 jeżeli chodzi o połączenie obu tych układów. Dzięki
zastosowaniu SA9203 system mikroprocesorowy może zostać wzbo−
gacony o 6 dodatkowych uniwersalnych portów wejścia−wyjścia, każdy
o szerokości 8−miu bitów. W sumie daje to aż 48! dodatkowych końcó−
wek do dowolnego wykorzystania.
UKŁAD SA9203 – TROCHĘ TEORII
Kostka została wykonana w technologii CMOS. Jak wcześniej powie−
działem, układ świetnie nadaje się do podłączenia z mikrokontrolerem
8051 a to ze względu na fakt posiadania multipleksowanej szyny da−
nych i adresu. Układ dostarczany jest przez producenta w typowej obu−
dowie PLCC68. Nie powinno to jednak odstraszyć od zastosowania na−
wet amatora elek−
troniki, bowiem do
układu można za−
stosować odpowie−
dnią podstawkę
która posiada typo−
wy calowy rozstaw
(2,54 mm). Na rys.1
przedstawiono opis
wyprowadzeń ukła−
du a na rys.2 sche−
mat wewnętrzny u−
kładu SA9203.
Układ składa się
z: interfejsu wej−
ściowego, łączące−
go multiplekso−
waną szynę danych
/ adresu z ze−
wnętrznym układem sterującym, rejestrów konfiguracyjnych oraz reje−
strów 6−ciu portów A...F. Znaczenie zewnętrznych sygnałów ste−
rujących podaję w tabeli 1.
W tabeli 2 przedstawiam parametry elektryczne układu SA9203.
Jak widać parametry odpowiadają warunkom zasilania TTL, czyli 5V.
Układ SA9203 może z powodzeniem pracować z układami wykonany−
mi w technologii CMOS, a także TTL−LS, lub nawet TTL przy zachowa−
niu odpowiednich dopuszczalnych obciążeń.
Na rys.3 przedstawiono układ i adresy wewnętrznych rejestrów ukła−
du. Układ podobnie jak mikroprocesor 8051 posiada 8−bitową multiplek−
sowaną szynę adresową – danych AD0...AD7, co dla zewnętrznego u−
kładu sterującego kostką SA9203 zajmuje obszar 256 bajtów w jego
(8051) przestrzeni adresowej. Wybrane obszary układu zajęte są przez
Rys..1 Rozkłład wyprowadzeń ukłładu SA9203..
Rys..2 Schemat wewnętrzny ukłładu SA9203..
E LEKTRONIKA DLA WSZYSTKICH 12/98
37
1128258.050.png 1128258.061.png 1128258.072.png 1128258.083.png 1128258.001.png 1128258.002.png 1128258.003.png 1128258.004.png 1128258.005.png 1128258.006.png 1128258.007.png 1128258.008.png 1128258.009.png 1128258.010.png 1128258.011.png 1128258.012.png 1128258.013.png 1128258.014.png 1128258.015.png 1128258.016.png 1128258.017.png 1128258.018.png 1128258.019.png 1128258.020.png 1128258.021.png 1128258.022.png 1128258.023.png 1128258.024.png 1128258.025.png 1128258.026.png 1128258.027.png 1128258.028.png 1128258.029.png 1128258.030.png
 
Też to potrafisz
Tabella 1
Piin Typ Symboll Opiis
18,52 VDD zasilanie układu +5V;
1,35 VSS masa zasilania 0V
61...68 we/wy AD0...AD7 3−stanowa multipleksowana szyna danych/adresu.
8−bitowy adres zatrzaskiwany jest we wnętrzu
układu SA9203 podczas opadającego zbocza
sygnału ALE. Dane zapisywane są lub
odczytywane po podaniu odpowiednio sygnałów
/WR (zapisu) lub /RD (odczytu);
2 we A8 nie używany w układzie SA9203, powinien być
połączony z masą (Vss), znaczenie tego pinu
opiszę w dalszej części artykułu;
3 we /CS aktywny niski sygnał na tym wejściu powoduje
wybór układu;
4 we ALE pin kontrolujący zatrzaśnięcie adresu na szynie
AD0...AD7 podczas zapisu przez urządzenie
zewnętrzne, następuje to podczas opadającego
zbocza tego sygnału;
5 we /RD poziom niski na tym wejściu pozwala na odczyt
wewnętrznych rejestru układu
6 we /WR poziom niski na tym wejściu powoduje zapis danej
do wewnętrznego rejestru układu
7 wy INT programowane wyjście zgłoszenia przerwania
do układu zewnętrznego, możliwość ustalenia
polaryzacji oraz uaktywnienia tego pinu
8 we RST wysoki poziom podany na to wejście powoduje
zresetowanie układu
9 we STB wejście zatrzaskiwania danej w porcie A, gdy port
ten pracuje jako wejście,
10...17 we/wy PA0...PA7 uniwersalny 8−bitowy port I/O. Możliwość
indywidualnego zdefiniowania każdego pinu portu
jako zatrzaskiwanego wyjścia lub wejścia. W try−
bie pracy jako wejście port może pracować w try−
bie zatrzaskiwania (sygnałem STB) lub jako
“przezroczysty” (“transparent”)
19...26 we/wy PB0...PB7 8−bitowy uniwersalny port I/O. Wszystkie piny
mogą być ustawione jako zatrzaskiwane wyjścia
lub jako wejścia typu “transparent”.
27...34 we/wy PC0...PC7 identyczny jak port B
36...43 we/wy PD0...PD7 identyczny jak port B
44...51 we/wy PE0...PE7 identyczny jak port B
53...60 we/wy PF0...PF7 identyczny jak port B
Rys..3 Rejjestry wewnętrzne ukłładu SA9203
Rys..4 Mapa portów przy adresowaniiu biitowym..
Poniżej zapoznam cię ze znaczeniem poszczegól−
nych portów kontrolnych układu SA9203.
PACR − rejestr kontrolny portu A. Na rys.5 pokaza−
no znaczenie poszczególnych bitów rejestru. Odpo−
porty konfiguracyjne oraz porty PA...PF jak pokazano na rysunku. Układ
pozwala na dwojakie adresowanie każdego z rejestrów portów PA...PF.
Pierwszy polega na jednoczesnym adresowaniu całego portu, drugi po−
zwala na zaadresowanie pojedynczego pinu każdego z portów. W tym
drugim przypadku przy odczycie danej w postaci bajtu, siedem najstar−
szych bitów nie ma znaczenia, jedynie najmłodszy D0 wskazuje na stan
pinu lub wymusza go w przypadku pracy portu jako cyfrowego wyjścia.
Dodatkowe rejestry sterujące pracą całego układu zawsze adresowa−
ne są bajtowo. Dość użyteczną funkcją w przypadku tych rejestrów jest
możliwość odczytu ich zawartości. Dzięki temu programista nie musi
zapamiętywać ich stanu po zapisie w dodatkowych zmiennych wyko−
rzystywanych w programie.
Na rys.4 przedstawiona jest mapa adresowa poszczególnych portów
w trybie adresowania bitowego.
Rys..5 Rejjestr specjjallny PACR
wiednie ustawienie lub wyzerowanie po−
zycji pozwala na indywidualne ustalenie
pinu portu A jako wejścia lub wyjścia cyf−
rowego.
PAICR − rejestr konfiguracyjny portu A
w trybie wejścia. Rys.6 przedstawia zna−
czenie bitów rejestru. W przypadku usta−
wienia pinu jako zatrzaskiwane wejście
(“latched input”) dane zostają zapamię−
tane po nadejściu sygnału na wejściu
STB. W przypadku ustawienia dowolne−
go pinu portu A jako wyjście, odpowia−
dający mu bit w rejestrze PAICR nie ma
wpływu na działanie tej linii portu.
IOCR − rejestr konfiguracyjny wejścia−
wyjścia. Rejestr pozwala na konfigurację
Tabela 2
Parametr
Symbol Min Typ Max Jednostka Warunek pomiaru
zasilanie
Vdd 4,75 5,0 5,25 V
pobór prądu (statyczny)
Idds
15 50 uA
Vdd = 5,0V
pobór prądu (dynamiczny)
Iddd
20 mA
Vdd = 5,0V
napięcie wej. w stanie wysokim Vih 2,0
V
Vdd = 5V
napięcie wej. w stanie niskim Vil
1,0 V
Vdd = 5V
napięcie wyj. w stanie wysokim Voh 4,5 4,7
V
Vdd = 5V
Ioh = 5mA
napięcie wyj. w stanie niskim Vol
0,25 0,5 V
Vdd = 5V
Ioh = 7mA
38
E LEKTRONIKA DLA WSZYSTKICH 12/98
1128258.031.png 1128258.032.png 1128258.033.png 1128258.034.png 1128258.035.png 1128258.036.png 1128258.037.png 1128258.038.png 1128258.039.png 1128258.040.png
Też to potrafisz
Rys..6 Rejjestr specjjallny PAIICR
Rys..8 Rejjestr adresowaniia PAMR..
PRAKTYCZNE UKŁADY Z SA9203
Nie przedłużając teoretycznych wywodów na temat układu SA9203
na rys.9 przedstawiam najprostszy sposób na połączenie z mikroproce−
sorem serii ‘51 w wersji z wewnętrzną pamięcią programu.
Jak widać z rysunku, do działania nie są potrzebne żadne dodatkowe
układy sterujące czy dekoder adresów. Dzięki wspomnianej wcześniej
kompatybilnej z 8051, magistrali adresowej−danych układ SA9203
“widziany” jest przez procesor jako 256 komórek w zewnętrznej pa−
mięci danych, do której procesor odwołuje się za pośrednictwem roz−
kazów:
Rys..7 Rejjestr konfiiguracyjjny IOCR..
MOVX @DPTR, A podczas zapisu do portu
oraz
MOVX A, @DPTR przy odczycie z portu
portów PB...PF, załączanie wewnętrznych rezystorów podciągających
w trybie wejścia, oraz określa polaryzację sygnału STB (patrz rys.7).
Jak wspomniałem wcześniej wszystkie wyprowadzenia portów układu
SA9203 posiadają wbudowane rezystory podciągające pin portu kiedy ten
pracuje jako wejście. Zwalnia to użytkownika od stosowania dodatkowych
elementów rezystancyjnych w niektórych aplikacjach. Rezystory te mogą
być uaktywnione lub wyłączone oddzielnie dla każdego z portów PA...PF
Bit IOCR.2 definiuje polaryzację sygnału STB (“strobe”) który zatrzas−
kuje daną w porcie A (lub wybranych jego pinach) kiedy ten pracuje ja−
ko wejście. W przypadku ustawienia bitu na 0, dane zatrzaskiwane są
podczas opadającego zbocza sygnału STB, gdy bit = 1, podczas nara−
stającego zbocza sygnału.
PAMR − rejestr trybu adresowania. Zgodnie z rys.8 ustawienie lub wy−
zerowanie odpowiedniego bitu w tym rejestrze pozwala na zmianę try−
bu adresowania poszczególnych portów A...F, aktywację oraz polary−
zację sygnału zgłoszenia przerwania INT.
INT − wyjście zgłoszenia
przerwania w przypadku za−
trzaśnięcia danej w porcie A
po nadejściu sygnału STB.
Aktywacja pinu następuje
po odpowiednim ustawie−
niu bitu PAMR.1. Polaryza−
cja zgłoszenia przerwania u−
stalana jest poprzez bit
PAMR.0.
RST − podanie wysokiego
poziomu na to wejście rese−
tuje cały układ. Zawartość
wszystkich rejestrów zosta−
je wyzerowana. Na−
stępstwem tego jest:
− wszystkie piny portów
PA...PF ustawione zostają
jako wejścia
− wejścia portu A pracują
jako transparentne
− rezystory podciągające
są uaktywnione we wszy−
stkich portach
− wyjście przerwania jest
nieaktywne
− adresowanie portów u−
stalone zostaje jako bajtowe
Aktywny (wysoki) stan
sygnału RST powinien
trwać minimum 100ns.
Tak naprawdę, to możliwe jest zaadresowanie (zgodnie z rys.3) tylko
do adresu 73h, pod którym znajduje się rejestr PAMR. Pozostałe komór−
ki są niewykorzystane. Ktoś może zapytać, po co w układzie SA9203
potrzebna jest linia adresowa A8 ? Otóż istnieje wersja układu SA9202,
kompatybilna z omawianym SA9203, lecz posiadająca dodatkowo w
swojej strukturze 256 bajtów statycznej pamięci RAM. Tak więc zaad−
resowanie układu SA9202 w zakresie 100h...1FFh (linia A8=1) powodu−
je dostęp do tej właśnie pamięci. Jeżeli ktoś z czytelników będzie miał
okazję nabyć tę wersję układu, zachęcam do zakupu i eksperymentów.
Dodatkowa pamięć RAM idealnie może nadawać się do przechowywa−
nia danych podczas wykonywania jakiegoś programu. Zintegrowanie jej
w układzie portu SA9202 zwalnia od stosowania dodatkowej kostki
SRAM, co ma wpływ na wielkość i skomplikowanie obwodu drukowa−
nego.
Rys..9 Współłpraca ukłładu SA9203 z kontrollerem 87C51//89C51
E LEKTRONIKA DLA WSZYSTKICH 12/98
39
1128258.041.png 1128258.042.png 1128258.043.png 1128258.044.png 1128258.045.png 1128258.046.png 1128258.047.png 1128258.048.png 1128258.049.png 1128258.051.png 1128258.052.png 1128258.053.png 1128258.054.png 1128258.055.png 1128258.056.png 1128258.057.png 1128258.058.png 1128258.059.png 1128258.060.png 1128258.062.png 1128258.063.png 1128258.064.png 1128258.065.png 1128258.066.png 1128258.067.png 1128258.068.png 1128258.069.png 1128258.070.png 1128258.071.png 1128258.073.png 1128258.074.png 1128258.075.png 1128258.076.png 1128258.077.png 1128258.078.png 1128258.079.png 1128258.080.png 1128258.081.png 1128258.082.png
Też to potrafisz
i tak dalej aż do portu PF gdzie
deklaracje będą wyglądały jak
następuje:
BITPF0 EQU BC28h
BITPF7 EQU BC2Fh
Teraz można zabrać się do
programowania układu. W na−
szym pierwszym przykładzie
zaprogramujemy układ
SA9203 do pracy w trybie wy−
jścia – wszystkie porty PA...PF
ustawimy jako wyjścia.
Najpierw zajmiemy się reje−
strem PACR – konfiguracji por−
tu PA. Ponieważ port PA ma
pracować jako wyjście zgodnie
z rys.5 należy ustawić wszy−
stkie bity tego rejestru, tak
więc piszemy instrukcje:
MOV A, #0FFh
MOV DPTR, #PACR
MOVX @DPTR, A
Rys..10 Sposób na dołłączeniie SA9203 do komputerka edukacyjjnego..
Ponieważ port PA ma praco−
wać jako wyjście programowa−
nie rejestru PAICR jest zbędne.
Pora teraz na rejestr IOCR,
gdzie należy ustawić bity 7...3
tak aby porty PB...PF pracowa−
ły jako wyjścia. Pozostałe bity rejestru są w trybie wyjścia nieużywane.
Tak więc zapiszemy:
W przypadku chęci dołączenia układu SA9203 do komputerka AVT−
2250 najlepiej posłużyć się schematem z rys.10.
W układzie oprócz SA9203 zastosowano dodatkowe dekodowanie
adresów dzięki wykorzystaniu dekodera 1 z 8−miu typu 74HCT138
(74LS138). Użycie tego układu wydało mi się uzasadnione, a to ze
względu na poprzednio prezentowane przykłady. Jak zapewne pamię−
tasz wszystkie one korzystały z sygnału magistrali komputerka IO4. Po−
nieważ możesz zastosować ich kilka za jednym razem, należało zasto−
sować dodatkowe dekodowanie adresów, tak aby podzielić obszar ad−
resowy dekodowany przez sygnał IO4 na kilka mniejszych (w tym przy−
padku na osiem 1kbajtowych). W naszym przykładzie z rys.10 układ
SA9203 dekodowany jest przez sygnał Y7 kostki U3, co odpowiada ad−
resom BC00h...BFFFh. Ponieważ na złącze BUS_2250 komputerka nie
wyprowadzono sygnałów ALE oraz RESET (polaryzacja dodatnia), nale−
ży te dwa połączenia wykonać bezpośrednio łącząc te końcówki kawał−
kiem drutu.
Aby teraz “dobrać” się do układu SA9203 należy w programie jego
obsługi zadeklarować następująco:
MOV A, #11111000b
MOV DPTR, #IOCR
MOVX @DPTR, A
Jako ostatni zostaje rejestr PAMR. Ustawmy adresowanie portów
PA...PF jako bitowe, co pozwoli na oddzielne sterowanie każdy pinem
układu. Dodatkowo, w przypadku, kiedy wyjście przerwania INT układu
SA9203 połączone będzie z jednym z wejść procesora INT0 lub INT1
(poprzez jumper JP1) dobrze jest profilaktycznie ustawić polaryzację
sygnału zgłoszenia przerwania, mimo iż w naszym przykładzie ta fun−
kcja nie będzie wykorzystywana. Można to zrobić ustawiając bit 0 w re−
jestrze PAMR. Bit 1 rejestru powinien być wyzerowany – funkcja prze−
rwania jest nieaktywna.
Instrukcja konfigurująca rejestr będzie następująca:
MOV A, #11111101b
MOV DPTR, #PAMR
MOVX @DPTR, A
SA9203
EQU BC00h
Ze względu na to że układ zawiera kilka rejestrów wewnętrznych,
które opisałem wcześniej w programie warto od razu zapisać kolejne
deklaracje:
I to już wszystko. Teraz aby np. ustawić poziom wysoki na końców−
ce 3 portu PC należy wykonać instrukcje:
PORTA EQU BC00h ;adres portu PA
PORTB EQU BC08h ;adres portu PB
PORTC EQU BC10h ;adres portu PC
PORTD EQU BC18h ;adres portu PD
PORTE EQU BC20h ;adres portu PE
PORTF EQU BC28h ;adres portu PF
PACR EQU BC70h ;adres rejestru kontrolnego portu PA
PAICR EQU BC71h ;adres rej. konfiguracji portu PA
IOCR EQU BC72h ;adres rej. konfiguracji wejść−wyjść
PAMR EQU BC73h ;adres rejestru wyboru trybu adresowania
MOV DPTR, #BITPC3 ;adres pinu PC3
MOV A, #1
;wpisanie jedynki do bitu portu
MOVX @DPTR, A
Podobnie można postąpić z każdym innym portem.
W drugim przykładzie wykorzystamy generowanie sygnału przerwa−
nia przez układ SA9203 przy odbiorze danej z portu PA, kiedy to ze−
wnętrzne urządzenie chce przesłać daną do tego portu. Sytuację tę ilu−
struje rys.11
Sytuacja na rysunku przypomina przykład przedstawiony w poprze−
dnim odcinku klasy mikroprocesorowej, kiedy to omawiałem układ
8255 i jego współpracę z drukarką. Wracajmy jednak do naszego przy−
kładu. Do prawidłowej transmisji danych z potwierdzeniem wykorzysta−
my:
Można od razu zadeklarować adresy poszczególnych bitów portów,
które przydadzą się w trybie adresowania bitowego, np. tak:
BITPA0 EQU BC00h ;adres pinu 10 układu (PA0)
BITPA1 EQU BC01h
BITPA2 EQU BC02h
BITPA3 EQU BC03h
BITPA4 EQU BC04h
BITPA5 EQU BC05h
BITPA6 EQU BC06h
BITPA7 EQU BC07h ;adres pinu 17 układu (PA7)
BITPB0EQU BC08h
BITPB7EQU BC0Fh
− port PA do transmisji danych
− linię STB do potwierdzania zapisu danych do PA przez urządzenie ze−
wnętrzne
− linię PB0 do potwierdzenie odbioru danych przez procesor z SA9203
− linię INT układu SA9203 do zgłoszenia przerwania
Przyjrzyjmy się przebiegom z rys.11. Urządzenie zewnętrzne wysta−
wia na linie portu PA daną. Potwierdza to przez podanie stanu niskiego
na linię STROBE układu SA9203. Układ ten zapamiętuje daną w we−
wnętrznym rejestrze PA. Następnie SA9203 zgłasza przerwanie do pro−
40
E LEKTRONIKA DLA WSZYSTKICH 12/98
1128258.084.png
Też to potrafisz
POP Acc ;odtworzenie rejestrów DPTR i Acc Bios’a
RETI ;patrz odcinek klasy o przerwaniach
Sekwencja inicjująca procesor powinna mieć postać:
init_proc:
MOV vectors, #80h ;ustawienie offsetu tabeli
przerwań w ext. RAM
SETB EX1 ;zezwolenie na INT1
SETB EA ;odblokowanie przerwań
CLR F0 ;wyzerowanie znacznika zgłoszenia
MOV DPTR, #BITPB0
CLR A
MOVX @DPTR, A;ustawienie pinu PB0 w stan niski
RET
Następnie możemy zdefiniować procedurę, która czeka na znak a po
odbiorze ładuje go do akumulatora:
odbierz_znak:
jnb F0, odbierz_znak ;czekanie na pojawienie się
znaku
MOV DPTR, #PORTA
MOVX A, @DPTR ;odczyt znaku z portu PA SA9203
PUSH A ;przechowanie znaku na stosie
MOV DPTR, #BITPB0
MOV A, #1
MOVX @DPTR, A ;ACK = 1, potwierdzenie odbioru
NOP
NOP
;instrukcje NOP w celu opóźnienia
;sygnału ACK = 0, ilość zależna od
Rys..11 Transmiisjja danych z urządzeniia zewnętrznego do SA9203 z po−
twiierdzeniiem..
NOP
;tego jaką długość ma mieć ACK, aby być
NOP
;prawidłowo odczytanym przez nadajnik
CLR A
MOVX @DPTR, A ; ACK = 0, zakończenie odbioru
POP A
cesor wystawiając poziom niski na linię INT. Procesor w procedurze ob−
sługi przerwania odczytuje daną z portu PA adresując układ SA9203 – w
sposób pokazany wcześniej. Po odbiorze danej procesor powinien poin−
formować urządzenie zewnętrzne – nadajnik o gotowości na odbiór ko−
lejnej danej. W tym celu korzystając z linii portu PB0 procesor wysta−
wiając nań stan wysoki potwierdza odbiór (ACK) znaku i gotowość na
następny.
Zaprogramujmy więc układ do pracy w tym trybie.
;odtworzenie akumulatora
CLR F0
;i jeszcze wyzerowanie znacznika
RET
;zakończenie procedury i powrót
Teraz tak stworzone procedury można użyć w programie:
CPU
‘8052.def’
include ‘const.inc’
include ‘bios.inc’
1. Najpierw konfigurujemy rejestr PACR:
CLR A
;PA jako wejścia
MOV DPTR, #PACR
MOVX @DPTR, A
ORG
8000h
LJMP
START
ORG
8013h
2. Teraz rejestr PAICR:
MOV A, #0FFh
INT1_proc:
SETB F0
;dana zatrzaskiwana sygnałem STB
;ustawienie znacznika o zgłoszeniu
MOV DPTR, #PAICR
MOVX @DPTR, A
POP DPL
POP DPH
POP Acc ;odtworzenie rejestrów DPTR i Acc Bios’a
RETI
init_proc:
3. Następnie rejestr IOCR:
MOV A, #10000010b ;port PB – wyj., PC...PF – wej.
;polaryzacja STB ujemna
;rezystory podciągające PA nieaktywne
;tu wstawić ciało procedury j/w
RET
odbierz_znak: ;tu wstawić procedurę j/w
.......
RET
MOV DPTR, #IOCR
MOVX @DPTR, A
4. Pozostał jeszcze rejestr PAMR
MOV A, #10000011b ;port PB adresowany bitowo
;port PA adresowany bajtowo
;zezwolenie na INT
;polaryzacja INT ujemna
START:
LCALL init_proc ;inicjacja portów i układu przerwań
LCALL odbierz_znak ;wywołanie procedury odbioru znaku
;dalsze instrukcje działąjące na odebranym znaku
.....
END
MOV DPTR, #PAMR
MOVX @DPTR, A
Wnikliwy Czytelnik z pewnością zauważy, że procedurę odbioru zna−
ku z portu SA9203 można umieścić w ciele procedury obsługi przerwa−
nia, tak, aby po zgłoszeniu przerwania nowy znak był odczytany prawid−
łowo. Wtedy procedura ta może wyglądać następująco:
I gotowe, układ SA9203 jest gotowy do odbioru danych z potwierdze−
niem. Pozostaje jeszcze tylko ustawić odpowiednio procesor tak aby, u−
aktywnić wybrane jumperem JP1 (rys.10) przerwanie INT0/1. Poniżej
przedstawię przykład kiedy do zgłoszenia przerwania wykorzystano linię
INT1. W listingu dodatkowo będziemy wykorzystywać flagę F0 rejestru
PSW procesora do detekcji nadejścia znaku w przerwaniu. Bit F0
będzie po prostu ustawiany przez procedurę obsługi przerwania jeżeli
zostanie ono zgłoszone. A zerowany po odbiorze znaku. Przed sek−
wencją inicjująca zapiszmy więc procedurę obsługi przerwania INT1:
INT1_proc:
MOV
DPTR, #PORTA
MOVX A, @DPTR
;odczyt znaku z portu
PA SA9203
MOV BUFOR, A
;zapisanie znaku w buforze
MOV DPTR, #BITPB0
MOV A, #1
MOVX @DPTR, A
INT1_proc:
SETB F0
;ustawienie znacznika o zgłoszeniu
;ACK = 1, potwierdzenie
odbioru
POP DPL
POP DPH
NOP
E LEKTRONIKA DLA WSZYSTKICH 12/98
41
1128258.085.png 1128258.086.png 1128258.087.png 1128258.088.png 1128258.089.png 1128258.090.png 1128258.091.png
Zgłoś jeśli naruszono regulamin