Podstawy projektowania systemów mikroprocesorowych, cz. 9.pdf

(132 KB) Pobierz
Podstawy projektowania systemów mikroprocesorowych, część 9
K U  R S
Podstawy projektowania systemów
mikroprocesorowych, część 9
Zgodnie z†zapowiedzi¹ sprzed miesi¹ca, w†tej czÍúci kursu
przedstawiamy sposÛb wymiany danych pomiÍdzy
mikrokontrolerem i†standardow¹ klawiatur¹ PC-AT.
Zastosowanie takiej klawiatury to obecnie jeden
z†najtaÒszych sposobÛw wyposaøenia systemu
mikroprocesorowego w†interfejs umoøliwiaj¹cy
wprowadzanie danych.
Na rys. 30 przedstawiono wy-
prowadzenia standardowych z³¹cz
klawiatur PC. Najlepiej stosowaÊ
nieprzerobione w†øaden sposÛb
z³¹cza (dostosowaÊ w³asne urz¹dze-
nie do standardowego wtyku i†roz-
mieszczenia sygna³Ûw), choÊ w†razie
koniecznoúci moøna zastosowaÊ do-
wolne inne po³¹czenia - traci siÍ
jednak na kompatybilnoúci ze stan-
dardem, co moøe†utrudniÊ serwis
w†razie awarii. Na rys. 31 przed-
stawiono przyk³adowy sposÛb do³¹-
czenia klawiatury do mikrokontrole-
ra. Zastosowano tu po³¹czenie bez-
poúrednie z†dodatkowymi rezystora-
mi podci¹gaj¹cymi, daj¹cymi lepsz¹
odpornoúÊ transmisji na zak³Ûcenia.
KlawiaturÍ naleøy zasilaÊ napiÍciem
+5 V, najlepiej tym samym, ktÛre
zasila wspÛ³pracuj¹cy z†ni¹ mikro-
kontroler. Podczas projektowania
uk³adu zasilania naleøy uwzglÍdniÊ
dodatkowy pobÛr pr¹du, ktÛry -
w†zaleønoúci od modelu klawiatury
- moøe dochodziÊ do 300 mA.
Jeøeli chodzi o†sposÛb komunika-
cji klawiatury z†otoczeniem, to g³Ûw-
n¹ jej cech¹ jest to, øe w†zaleønoúci
od†kierunku transmisji (z
czy do klawiatury) przebiega
ona w†nieco inny sposÛb, choÊ
zawsze jest to transmisja synchro-
niczna w†takt sygna³u zegarowego
generowanego na linii KBD Clock
przez klawiaturÍ. Prostszym przypad-
kiem jest transmisja danych z†kla-
wiatury do mikroprocesora (przebie-
gi na rys. 32 ): nastÍpuje tutaj prze-
s³anie s³owa sk³adaj¹cego siÍ z†11
bitÛw: bitu startu (zawsze ì0î), oú-
miu bitÛw danych (pocz¹wszy od
najmniej znacz¹cego), nastÍpnie bitu
parzystoúci (typu Odd - dope³nienie
do parzystej liczby jedynek w†trans-
mitowanym bajcie danych) oraz bit
stopu, zawsze rÛwny ì1î. Zboczem
taktuj¹cym jest opadaj¹ce zbocze
sygna³u zegarowego. PrÍdkoúÊ trans-
misji nie jest zbyt duøa i†nie pod-
lega øadnej dok³adnej standaryzacji -
czÍstotliwoúÊ przebiegu zegarowego
zazwyczaj zawiera siÍ w†przedziale
20 do 30†kHz. WspÛ³pracuj¹cy mik-
rokontroler moøe sterowaÊ transmis-
j¹ z†klawiatury przez wymuszanie
stanu niskiego na linii KBD Clock -
stan niski oznacza blokadÍ transmi-
sji i†klawiatura rozpocznie transmi-
towanie ewentualnej danej dopiero
po pojawieniu siÍ na tej linii stanu
wysokiego (podczas braku aktywnoú-
ci obydwie linie: KBD Clock i† KBD
Data znajduj¹ si͆w†stanie wysokim).
Nieco bardziej skomplikowana
jest transmisja danych do klawiatu-
ry. Na rys. 33 przedstawiono prze-
biegi czasowe sygna³Ûw†podczas ta-
kiej transmisji. Inicjacja transmisji
do klawiatury nastÍpuje przez wy-
zerowanie linii KBD Clock przez
mikrokontroler (dok³adnie chodzi
o†zbocze opadaj¹ce na tej linii).
W†czasie trwania stanu niskiego ge-
nerowanego na linii Clock (powin-
no to trwaÊ nie krÛcej niø 60 ms,
co gwarantuje potraktowanie tego
sygna³u jako blokadÍ transmisji -
klawiatura nie zacznie transmitowaÊ
do mikrokontrolera w†tym samym
czasie) mikrokontroler zeruje liniÍ
KBD Data , a†nastÍpnie ustawia stan
wysoki na KBD Clock , co jest syg-
na³em rozpoczÍcia transmisji do
klawiatury. Wtedy kontrolÍ nad li-
ni¹ KBD Clock przejmuje klawiatu-
ra (w czasie do 10 ms) i†rozpoczy-
na generacjÍ sygna³u zegarowego.
Transmisja danych przebiega podob-
nie jak wczeúniej, z†tym øe liniÍ
KBD Data kontroluje mikrokontroler
i†to on wystawia kolejno bity prze-
znaczone do transmisji oraz bit pa-
rzystoúci. Po przes³aniu bitu parzys-
toúci mikrokontroler zwalnia liniÍ
KBD Data (stan wysoki), co jest in-
terpretowane jako bit stopu - jeúli
tego nie zrobi, to sygna³ na linii
KBD Clock bÍdzie generowany tak
d³ugo, jak d³ugo KBD Data bÍdzie
pozostawaÊ w†stanie niskim. Po
przes³aniu bitu stopu klawiatura ge-
neruje dodatkowy takt sygna³u ze-
garowego po³¹czony z†wyzerowaniem
linii KBD Data , potwierdzaj¹c w†ten
sposÛb zakoÒczenie transmisji.
Dok³adny opis rozkazÛw steruj¹-
cych klawiatur¹ oraz sposoby wyko-
rzystania wszystkich jej funkcji Czy-
telnik znajdzie w†literaturze poúwiÍco-
nej komputerom PC (np. w†ksi¹øce
Piotra Metzgera ìAnatomia PCî).
Rys. 30
Rys. 31
Elektronika Praktyczna 11/2003
97
32654439.008.png 32654439.009.png 32654439.010.png 32654439.011.png 32654439.001.png
 
K U  R S
Rys. 32
stÍpny w†zmiennej KOD , a†kontrolny
bit parzystoúci jest zwracany
w†zmiennej PAR - najczÍúciej nie is-
tnieje potrzeba sprawdzania popra-
wnoúci (przek³amania zdarzaj¹ siÍ
bardzo rzadko), jeúli zasz³aby jednak
taka potrzeba, to naleøy pamiÍtaÊ,
øe†bit parzystoúci transmitowany
przez klawiaturÍ jest negacj¹ bitu
parzystoúci dostÍpnego w†rejestrze
PSW mikrokontrolera (po wpisaniu
otrzymanej danej do akumulatora).
Przystosowanie programu do
transmisji w†stronÍ klawiatury jest
stosunkowo proste: naleøy zadbaÊ
o†wygenerowanie sygna³Ûw inicju-
j¹cych na liniach zegara i†danych,
a†nastÍpnie zamiast odczytywaÊ stan
linii KBD Data , naleøy po kaødym
zboczu opadaj¹cym sygna³u zegaro-
Z†punktu widzenia konstruktora
systemÛw mikroprocesorowych warto
natomiast wspomnieÊ o†podstawo-
wych cechach uøytkowych klawiatu-
ry PC. Jeøeli chodzi o†transmisjÍ
z†klawiatury do mikrokontrolera z†ni¹
wspÛ³pracuj¹cego (najczÍúciej wyko-
rzystywany przypadek), to nastÍpuje
ona po kaødym zdarzeniu zwi¹zanym
ze zmian¹ stanu klawiszy.
Klawiatura przesy³a 8-bitowy kod
naciúniÍtego klawisza w†momencie je-
go wciúniÍcia oraz ten sam kod po-
wiÍkszony o†liczbÍ 128 (80H) w†mo-
mencie puszczenia tego klawisza. Is-
tniej¹ takøe grupy klawiszy, ktÛrych
naciskanie czy zwalnianie powoduje
przes³anie wiÍkszej liczby bajtÛw in-
formacji (np. klawisze funkcyjne
F1...F12 i†inne) - dok³adny ich opis
Czytelnik znajdzie we wspomnianej
literaturze. Jeøeli chodzi o†transmisjÍ
danych do klawiatury (nie zawsze is-
tnieje potrzeba jej wykorzystywania),
to mikrokontroler steruj¹cy przesy³a
klawiaturze rozkazy steruj¹ce jej pra-
c¹. Jest moøliwe m.in. sterowanie
diodami úwiec¹cymi na klawiaturze,
w³¹czanie i†wy³¹czanie klawiatury,
zmiana prÍdkoúci autorepetycji oraz
rÛøne funkcje kontrolne.
NajczÍúciej chodzi nam o†moøli-
woúÊ odczytywania stanu klawiatury
(naciskanie klawiszy) - umoøliwia
nam to poniøszy program (odpowia-
daj¹cy po³¹czeniu klawiatury i†mikro-
kontrolera wed³ug rys. 31) - list. 12 .
Przedstawiony program w†bardzo
prosty sposÛb odczytuje kolejne bity
pojawiaj¹ce siÍ na linii P3.3 w†takt
sygna³u zegarowego doprowadzonego
do linii P3.2. Zosta³ on tak napisa-
ny, aby ³atwo moøna by³o zauwa-
øyÊ, ktÛre czÍúci procedury odbiera-
j¹cej dane s¹ wykonywane zgodnie
z†kolejnoúci¹ odbieranych bitÛw.
Opadaj¹ce zbocze sygna³u zegaro-
wego wywo³uje procedurÍ obs³ugi
przerwania odczytuj¹c¹ kolejno
wszystkie bity transmitowane przez
klawiaturÍ. Do zabezpieczenia progra-
mu przed ìutkniÍciemî na odbiorze
ktÛregoú z†bitÛw (wskutek zak³ÛceÒ
lub od³¹czenia klawiatury) wykorzys-
tano licznik T1 zliczaj¹cy czas, w†ktÛ-
rym musi zmieúciÊ siÍ ca³a†transmis-
ja. Jeøeli czas ten zostanie przekro-
czony, to zostaje wyzerowany licznik
odbieranych bitÛw i†program oczekuje
na rozpoczÍcie kolejnej transmisji.
Procedura obs³ugi przerwania
INT0 po zakoÒczeniu transmisji
ustawia bit NOWY oznajmiaj¹cy ode-
branie nowego kodu, ktÛry jest do-
List. 12
;KOD - zmienna bajtowa przechowująca odebrany kod klawisza
;PAR - zmienna bitowa przechowująca odebrany bit parzystości
;NR_BIT - zmienna bajtowa przechowująca numer odebranego bitu
;NOWY - zmienna bitowa przechowująca informację o odebraniu nowego kodu
INCJALIZACJA:
CLR NOWY
;zerowanie zmiennych
CLR PAR
MOV NR_BIT,#0
SETB P3.2
SETB P3.3
SETB EA
;zaprogramowanie układu przerwań
SETB ET1
SETB EX0
SETB IT0
;przerwanie od opadającego zbocza na INT0
MOV TMOD,#010H ;licznik 1 w trybie 1 (licznik 16-bitowy)
...
...
;(program główny)
...
PRZERWANIE_INT0: ;procedura obsługi przerwania zewnętrznego z linii
;INT0 (P3.2)
PUSH ACC
;zapamiętanie
PUSH PSW
;rejestrów na stosie
MOV A,NR_BIT
JZ BIT_STARTU ;jeżeli bit startu (nr 0), to zignoruj go
CJNE A,#1,NIE_1 ;odbiór pierwszego bitu
CLR A
;zerowanie
MOV C,P3.3
;odczytanie bitu
MOV ACC.0,C
;i wpisanie na najmłodszą pozycję akumulatora
SJMP ZAPAMIETAJ
NIE_1:
CJNE A,#2,NIE_2 ;odbiór drugiego bitu
MOV A,KOD
;odczytanie zapamiętanych już informacji
MOV C,P3.3
;odczytanie bitu
MOV ACC.1,C
;i wpisanie na odpowiednią pozycję akumulatora
SJMP ZAPAMIETAJ
NIE_2:
CJNE A,#3,NIE_3 ;odbiór trzeciego bitu
MOV A,KOD
MOV C,P3.3
MOV ACC.2,C
SJMP ZAPAMIETAJ
NIE_3:
CJNE A,#4,NIE_4 ;odbiór czwartego bitu
MOV A,KOD
MOV C,P3.3
MOV ACC.3,C
SJMP ZAPAMIETAJ
NIE_4:
CJNE A,#5,NIE_5 :odbiór piątego bitu
MOV A,KOD
MOV C,P3.3
MOV ACC.4,C
SJMP ZAPAMIETAJ
98
Elektronika Praktyczna 11/2003
32654439.002.png 32654439.003.png 32654439.004.png 32654439.005.png
K U  R S
Rys. 33
wego ustawiaÊ na niej stan na-
stÍpnego bitu przeznaczonego do
transmisji. Naleøy rÛwnieø zwiÍkszyÊ
o†1†liczbÍ moøliwych stanÛw liczni-
ka bitÛw w†zwi¹zku z†koniecznoúci¹
odebrania bitu potwierdzenia (nawet
jeúli bit potwierdzenia bÍdzie igno-
rowany przez program).
Pawe³ Hadam, AVT
pawel.hadam@ep.com.pl
List. 12 − cd.
NIE_5:
CJNE A,#6,NIE_6 ;odbiór szóstego bitu
MOV A,KOD
MOV C,P3.3
MOV ACC.5,C
SJMP ZAPAMIETAJ
NIE_6:
CJNE A,#7,NIE_7 ;odbiór siódmego bitu
MOV A,KOD
MOV C,P3.3
MOV ACC.6,C
SJMP ZAPAMIETAJ
NIE_7:
CJNE A,#8,NIE_8 ;odbiór ósmego bitu
MOV A,KOD
MOV C,P3.3
MOV ACC.7,C
SJMP ZAPAMIETAJ
NIE_8:
CJNE A,#9,NIE_9 ;odbiór bitu parzystości
MOV C,P3.3
;odczytanie bitu
MOV PAR,C
;i zapamiętanie
SJMP KONIEC
NIE_9:
SETB NOWY ;odebranie bitu stopu - ustawienie
;informacji o nowym kodzie
MOV NR_BIT,#0 ;wyzerowanie licznika bitów
CLR TR1
;zatrzymanie licznika
SJMP KONIEC
ZAPAMIETAJ:
MOV KOD,A
;zapamiętanie kodu
INC NR_BIT
;zwiększenie licznika bitów
SJMP KONIEC
BIT_STARTU:
INC NR_BIT
;zwiększ nr bitu
CLR NOWY
;zeruj bit (bo nadchodzi nowy kod i informacja
;o starym zostanie zamazana)
MOV TH1,#0
;włączenie licznika zabezpieczającego (timeout)
MOV TL1,#0
;dla kwarcu 12MHz daje to czas opóźnienia
SETB TR1
;około 65ms
KONIEC:
POP PSW
;pobranie rejestrów
POP ACC
;ze stosu
RETI
PRZERWANIE_T1: ;obsługa przerwania od licznika T1
CLR TR1 ;zatrzymanie licznika
MOV NR_BIT,#0 ;wyzerowanie licznika bitów
RETI
Elektronika Praktyczna 11/2003
99
32654439.006.png 32654439.007.png
Zgłoś jeśli naruszono regulamin