PAULMON2 jest darmowym programowym monitorem - IME

Transkrypt

PAULMON2 jest darmowym programowym monitorem - IME
OPROGRAMOWANIE APARATURY POMIAROWEJ
OPROGRAMOWANIE APARATURY P
Programowa obsługa klawiatury PC AT oraz
odbiór informacji z pilota TV w kodzie RC-5
Laboratorium
1. Cel ćwiczenia
Celem ćwiczenia jest zapoznanie studentów w sposób praktyczny z odbiorem informacji z standardowego
pilota telewizyjnego nadającego w kodzie RC-5 (odbiór informacji z pilota telewizyjnego realizowany jest
programowo poprzez czujnik sygnału podczerwonego), programową obsługą klawiatury PC AT oraz pokazanie
darmowych narzędzi służących do uruchamiania systemów mikroprocesorowych na przykładzie programu
monitora PAULMON2. Wykorzystywana w ćwiczeniu makieta umożliwia również obsługę wyświetlacza LCD
2. Programowa obsługa wyświetlacza LCD
Interfejs sterownika wyświetlacza LCD składa się z ośmiu linii danych D0..D7 oraz trzech linii
sterujących: R/W, RS oraz E. Sterownik wyświetlacza LCD posiada dwa rodzaje pamięci RAM. Pamięć ekranu
(DD RAM) zawiera kody znaków aktualnie wyświetlanych na polu odczytowym. Wyświetlenie znaku na
odpowiedniej pozycji pola odczytowego wyświetlacza LCD polega więc na wpisaniu jego kodu do pamięci DD
RAM. Kody poszczególnych znaków podano w tabeli 4 (dodatek A).
Linia R/W informuje sterownik wyświetlacza o pożądanym kierunku przepływu informacji, tj. zapisie do
sterownika (R/W = 0) lub odczycie ze sterownika(R/W = 1). Na podstawie stanu linii RS sterownik dokonuje
interpretacji samej informacji przy zapisie (R/W = 0) jako:
 rozkaz do wykonania (RS = 0),
 kod znaku do wyświetlenia (RS = 1),
natomiast przy odczycie (R/W = 1) wystawia na szynę danych:
 bajt w którym najstarszy bit informuje o zajętości sterownika, a pozostałe o aktualnym adresie w
pamięci DDRAM lub CGRAM (RS = 0),
 kod znaku z pamięci DD RAM lub CG RAM (RS = 1).
Wyświetlacz LCD widziany jest jako komórki zewnętrznej pamięci danych. Zatem jego obsługa od
strony programowej realizowana jest z wykorzystaniem instrukcji właściwych dla zapisu/odczytu zewnętrznej
pamięci danych mikrokontrolera. Linie R/W i RS podłączone są bezpośrednio do linii A1 i A0 szyny adresowej
systemu mikroprocesorowego. Sterowanie nimi odbywa się zatem przez odpowiednie ustawienie dwóch
najmłodszych bitów adresu podczas operacji zapisu/odczytu zewnętrznej pamięci danych mikrokontrolera (patrz
punkt 6.2). Linia E sterowana jest automatycznie w sposób sprzętowy i ustawienie jej odpowiedniego stanu nie
wymaga ingerencji programowej.
W tabeli 6 (dodatek A) przedstawiono rozkazy dostępne przy sterowaniu wyświetlaczem LCD. Do
poprawnej pracy wyświetlacza wymagane jest co najmniej ustawienie: parametrów pracy (ang. Function Set),
sterowania wyświetlaniem (ang. Display on/off Control) i trybu wprowadzania znaków (ang. Entry Mode Set).
Znaczenie poszczególnych bitów wymienionych rozkazów znajduje się również w tabeli 6. Przed wysłaniem
jakiejkolwiek informacji do sterownika wyświetlacza, należy sprawdzić jego gotowość do jej przyjęcia przez
odczytu informacji ze sterownika (przy RS = 0 i R/W = 1) tak długo, aż najstarszy bit oznaczony BF nie
przyjmie wartości 0.
Na rys. 6 (dodatek A) pokazano graficznie adresy odpowiadające poszczególnym pozycjom na polu
odczytowym dla wyświetlacza 2x16. Znak, którego kod zostanie wysłany do sterownika, pojawi się zawsze na
pozycji określonej aktualną zawartością licznika adresu AC sterownika wyświetlacza, a następnie adres ten
zostanie zwiększony lub zmniejszony w zależności od ustawienia bitu I/D rozkazu ustalającego tryb
wprowadzania znaków (ang. Entry Mode Set). Bieżąca wartość licznika adresów AC sterownika wyświetlacza
określa również pozycję, na której znajduje się kursor o ile został on włączony przez ustawienie odpowiedniego
bit. Dlatego określenia „adres pozycji znaku”, „adres kursora” i „adres DD RAM” są jednoznaczne. W celu
zmiany zawartości licznika adresu AC, a jednocześnie przemieszczenia kursora na odpowiednią pozycję pola
odczytowego wyświetlacza, należy użyć funkcji ustawiającej adres kursora (ang. Set DDRAM address).
1
Pamięć generatora znaków (CG RAM) przechowuje matryce 8 znaków (w pamięci przechowującej
tablice kodów znaków odpowiadają im adresy 00H..0FH; patrz tabela 4, dodatek A), które można dowolnie
zaprogramować. Każda matryca składa się z 8 bajtów. Format zapisu przedstawiono w tabeli 1.
Tabela 1. Format zapisu znaków użytkownika
Adres CG RAM
Dane
Znak
dwójkowo
dwójkowo
n n n 0 0 0 0 0 0 0 0 0 0 0
n n n 0 0 1 0 0 0 0 1 1 1 0
n n n 0 1 0 0 0 0 1 0 0 0 1
n n n 0 1 1 0 0 0 1 0 0 0 1
n n n 1 0 0 0 0 0 1 0 0 0 1
n n n 1 0 1 0 0 0 0 1 0 1 0
n n n 1 1 0 0 0 0 1 1 0 1 1
n n n 1 1 1 0 0 0 0 0 0 0 0
nnn - określa numer jednego z ośmiu znaków
użytkownika
W celu zaprogramowania powyższego znaku pod adresem 01H w tablicy kodów znaków, należy wysłać
rozkaz ustawiający adres pamięci CG RAM na wybraną wartość, a następnie sukcesywnie przesyłać kolejne
dane określające wzorce linii znaku. W celu wyświetlenia tak zaprojektowanego znaku należy zapisać do
pamięci DD RAM sterownika wyświetlacza jego kod (w rozpatrywanym przykładzie wynosi on 01H).
Wysłanie rozkazu ustawiającego adres pamięci CG RAM powoduje, że każda następna operacja zapisu
lub odczytu przy RS = 1 będzie odnosiła się do wspomnianej pamięci. Jednocześnie adres po każdej takiej
operacji będzie automatycznie inkrementowany. Identycznie następstwa dotyczą wysłania rozkazu
ustawiającego adres pamięci DD RAM, dlatego po ewentualnym procesie programowania znaku (czyli
odnoszenia się do pamięci CG RAM),a przed procesem wysyłania kodów znaków do wyświetlenia, należy
wysłać rozkaz ustawiający odpowiedni adres w pamięci DD RAM.
3. Odbiór informacji z pilota TV nadającego w kodzie RC5
Kodowanie RC5 jest popularnym sposobem formatowania cyfrowych sekwencji sterujących dla urządzeń
audio-wideo, definiując sposób transmisji bitów, czasy, rozmiar ramki, a także znaczenie poszczególnych bitów.
Kod RC5 umożliwia przekazanie 64 rozkazów do 32 różnych urządzeń (każde urządzenie ma przypisany
właściwy dla swojego typu adres i reaguje tylko na przeznaczone dla niego rozkazy). Można też traktować
rozkazy i adresy jako wspólny zbiór komunikatów, co umożliwia przesłanie do jednego urządzenia 2048
poleceń. Twórca systemu RC5 (firma Philips) przyporządkował na stałe część adresów wybranym grupom
urządzeń (tabela 2), jak również część rozkazów wybranym poleceniom (tabela 3).
Tabela 2. Adresu urządzeń sterowanych kodem RC5
Adres (dziesiętnie)
00
01
02
05
06
16
17
18
19
20
22
07, 11, 13, 15, 24, 25, 27÷31
Urządzenie
Odbiornik telewizyjny 1
Odbiornik telewizyjny 2
Teletekst
Magnetowid 1
Magnetowid 2
Przedwzmacniacz audio 1
Radioodbiornik
Magnetofon
Przedwzmacniacz audio 2
Odtwarzacz CD
Tuner Satelitarny
Adresy zwykle niewykorzystane, które można przydzielić
samodzielnie skonstruowanym urządzeniom
Urządzenia fabryczne zawierają zazwyczaj wyspecjalizowane układy do nadawania np. SAA3010 i
odbioru np. SAA3049, które współpracują z pozostałymi blokami urządzenia. Ze względu na stosunkowo małą
szybkość transmisji, odbiór ramki informacyjnej nadawanej w kodzie RC5 można przeprowadzić programowo z
wykorzystaniem detektora promieniowania podczerwonego i mikrokontrolera.
2
Tabela 3. Numery rozkazów w kodzie RC5 (telewizor)
Numer (dziesiętnie)
00÷09
12
13
14
16
17
18
19
20
21
22
23
24
25
26
27
Polecenie
Cyfry od 0 do 9, numery kanałów TV
Stand by (wyłączenie telewizora z zapamiętaniem
ustawionych parametrów
Mute (wyciszenie dźwięku)
Normalizacja
Zwiększenie głośności
Zmniejszenie głośności
Zwiększenie jaskrawości
Zmniejszenie jaskrawości
Zwiększenie nasycenia
Zmniejszenie nasycenia
Zwiększenie poziomu tonów niskich
Zmniejszenie poziomu tonów niskich
Zwiększenie poziomu tonów wysokich
Zmniejszenie poziomu tonów wysokich
Balans w prawo
Balans w lewo
3.1. Nadawanie i odbiór informacji
Przesyłanie sygnału przy użyciu fali świetlnej w zakresie podczerwieni stosowane w pilotach TV i jego
odbiór przedstawiono schematycznie na rys.1. Sygnał prostokątny o zadanej częstotliwości steruje bramką
tranzystora sukcesywnie zapalając i gasząc diodę emitującą światło w zakresie podczerwieni. Układ odbiornika
posiada filtr, który wychwytuje tylko sygnał o zadanej częstotliwości. Dzięki wbudowanemu demodulatorowi
wykrycie transmisji sygnału powoduje przełączenie wyjścia odbiornika w stan niski. Brak sygnału ustawia
wyjście odbiornika w stan wysoki.
+5V
+5V
Rys.1. Schematyczne zobrazowanie nadawania i odbioru informacji przez pilot telewizyjny
Każdy bit ramki informacyjnej nadawany jest w tzw. kodzie bifazowym (nazywanym również kodem
Manchester), co przedstawiono na rys.2. Kodowanie bifazowe polega na zmianie fazy sygnału na przeciwny w
połowie czasu trwania bitu. Jeśli transmitowany bit ma wartość logiczną 1, to w pierwszej połowie czasu jego
trwania wyjście odbiornika podczerwieni przyjmuje stan wysoki, natomiast w drugiej połowie – stan niski.
Podobnie przy transmisji bitu o wartości logicznej 0; w pierwszej połowie czasu na wyjściu odbiornika jest stan
niski, w drugiej – stan wysoki.
a)
b)
nadajnik
odbiornik
32 okresy
32 okresy
32 okresy
32 okresy
Rys.2. Sposób nadawania informacji logicznej w kodzie bifazowym: a) jedynki, b) zera
W pilotach nadających w kodzie RC5 czas trwania pojedynczego bitu wynosi 64 okresy sygnału
sterującego pracą nadajnika1. Ze względu na kodowanie bifazowe, stan wyjścia zmienia się na przeciwny po 32
okresach.
Dzięki określeniu wszystkich czasów w standardzie w powiązaniu z częstotliwością sygnału sterującego pracą nadajnika, możliwa jest
praca w jednym pomieszczeniu kilku nadajników kodu RC5 o różnych częstotliwościach.
1
3
3.2. Ramka informacyjna
Wciśnięcie dowolnego klawisza na pilocie TV powoduje wygenerowanie 14-bitowej ramki informacyjnej
pokazanej schematycznie na rys.3, która przesyłana jest szeregowo do odbiornika podczerwieni. Dwa pierwsze
bity S są bitami startu i zawsze mają wartość 1. Następny bit T jest nazywany bitem kontrolnym lub
przełączania. Jego wartość zmienia się po każdorazowym wciśnięciu i zwolnieniu przycisku. Zatem
przytrzymanie przycisku powoduje wygenerowanie ciągu identycznych ramek (w odstępach czasu równych
czasowi trwania 50 bitów), w których bit T ma stale taką samą wartość 2. Pięć kolejnych bitów A0÷A4 określa
adres urządzenia, dla którego przeznaczony jest rozkaz zakodowany na sześciu następnych bitach C0÷C5.
1
1
0
1
1
0
1
0
0
1
0
1
1
0
S
S
T
A
A
A
A
A
C
C
C
C
C
C
14 bitów
Rys.3. Przykładowa ramka informacyjna w kodzie RC5
64 bity
50 bitów
14 bitów
Rys.4. Sukcesywne wysyłanie tej samej ramki informacyjnej
3.3. Programowy odbiór ramki informacyjnej
W makiecie dydaktycznej odbiór sygnału z pilota TV odbywa się z wykorzystaniem odbiornika
podczerwieni TFMS5360. Układ posiada w swojej strukturze wszystkie elementy potrzebne do odebrania
zmodulowanego sygnału, wzmocnienia go i demodulacji, otrzymując na wyjściu podłączonym do wejścia INT1
mikrokontrolera ciąg impulsów prostokątnych (rys.3) gotowych do dalszej obróbki i analizy.
Tabela 4. Czasy związane z nadawaniem ramki informacyjnej w kodzie RC5 (częstotliwość fali nośnej 36kHz)
Opis
Okres sygnału
Czas trwania jednego bitu
Czas trwania ramki informacyjnej
Czas trwania przerwy pomiędzy ramkami
Obliczenie
Czas
27,777 [μs]
1,778 [ms]
24,889 [ms]
88,889 [ms]
64 · 27,777 [μs]
14 · 1,778 [ms]
50 · 1,778 [ms]
Najprostszy sposób poprawnego odczytu ramki informacyjnej wymaga wykrycia jej początku i
interpretacji wartości poszczególnych bitów. Można tego dokonać sugerując się informacjami podanymi na
rys.5.
1,75 bita
3,112 ms
S=1
S=1
1 bit
1,778 ms
T=0
1 bit
1,778 ms
S=1
1 bit
1,778 ms
S=1
1 bit
1,778 ms
T=0
Rys.5. Przykładowy sposób odczytu bitów ramki informacyjnej nadawanej w kodzie RC5
Przy braku transmisji ramki informacyjnej linia wyjściowa odbiornika podczerwieni (a tym samym linia
INT1 mikrokontrolera, do której podłączone jest wyjście odbiornika podczerwieni w niniejszej makiecie
dydaktycznej) znajduje się w stanie wysokim. Pierwszy transmitowany bit ramki ma wartość logiczną 1, dlatego
wykrycie zmiany ze stanu wysokiego na niski daje informację, że właśnie znajdujemy się w połowie nadawania
Dzięki bitowi T możliwe jest rozróżnienie, czy odebrana ramka została wygenerowana przez kolejne wciśnięcie tego samego przycisku,
czy też jest wynikiem przytrzymania przycisku przez dłuższy okres czasu.
2
4
1,75 bita
3,112 ms
S=1
S=1
1/2 bita
0,889 ms
1/2 bita
0,889 ms
1/2 bita
0,889 ms
1/2 bita
0,889 ms
1/2 bita
0,889 ms
1/2 bita
0,889 ms
1/2 bita
0,889 ms
1/2 bita
0,889 ms
pierwszego bitu startowego ramki. W celu poprawnego odczytania wartości kolejnych bitów należy sprawdzać
stan linii INT1 w pierwszej połowie czasu trwania każdego kolejnego bitu, gdyż wtedy stan linii INT1
odpowiada wartości przesyłanego bitu informacji. W tym celu po wykryciu zmiany z stanu wysokiego na niski
przy pierwszym bicie startowym, a tym samym wykryciu początku ramki, należy odmierzyć czas równy 1,75
bitu, jeśli kolejny bit startowy jest pomijany (patrz rys.5) lub 0,75 bitu - jeśli nie jest. Odmierzając teraz kolejno
czasy równe 1 bitowi i sukcesywnie odczytując stan linii INT1, możliwy jest odczyt wartości dalszych bitów
ramki.
Podczas nadawania ramki informacyjnej może dojść do zasłonięcia diody emitującej promieniowanie
podczerwone w pilocie. Stosując sposób odbioru przedstawiony na rys.5 nie ma możliwości stwierdzenia, czy
transmisja ramki została przerwana, co może spowodować błędną interpretację odebranej informacji. Aby się
ustrzec przed opisaną sytuacją, konieczne jest próbkowanie linii INT1 zarówno w czasie trwania pierwszej, jaki i
drugiej połowy bitu (rys.6). Jeśli dwa odczytane stany mają wartości przeciwne to znaczy, że ramka
informacyjna jest wciąż nadawana, a odczytana wartość bitu jest poprawna.
T=0
S=1
S=1
T=0
Rys.6. Ulepszony sposób odczytu bitów ramki informacyjnej nadawanej w kodzie RC5
Również może dojść do sytuacji, w której odbiór ramki rozpoczęto nie od pierwszego, lecz od któregoś z
dalszych bitów traktując go jako bit startu. Dlatego po stwierdzeniu zmiany stanu linii INT1 z wysokiego na
niski zaleca się odmierzenie czasu większego od długości jednej ramki a krótszego niż czas równy połowie
długości czasu trwania przerwy pomiędzy ramkami. W ten sposób niezależnie od tego, w jakiej chwili czasowej
rozpoczęliśmy analizę ramki po odmierzeniu tego czasu znajdziemy się w przerwie pomiędzy ramkami (rys. 7).
Po tym czasie należy ponownie oczekiwać na zmianę stanu linii INT1 z wysokiego na niski, a więc na początek
nowej ramki, co zapewni poprawny jej odczyt.
25 bitów
25 bitów
Rys.7. Ulepszony sposób rozpoczęcia odczytu ramki informacyjnej nadawanej w kodzie RC5
4. Klawiatura PC AT
Klawiatura PC AT podłączana jest do urządzeń przy wykorzystaniu czteroprzewodowego interfejsu.
Tylko dwie z tych linii (linia danych i linia zegarowa) służą do przesyłania informacji pomiędzy klawiatura a
urządzeniem nadrzędnym (ang. host). Pozostałe dwie są liniami zasilającymi. Jak można się zorientować po
występowaniu linii zegarowej, przesyłanie informacji odbywa się synchronicznie Podłączenie linii
odpowiedzialnych za przesyłanie informacji do systemu mikroprocesorowego makiety pokazano na schemacie
elektrycznym.
Sama klawiatura zawiera macierz klawiszy monitorowaną prze wewnętrzny procesor. Wykrycie
wciśnięcia klawisza, jego przytrzymania lub puszczenia powoduje wysłanie informacji nazywanej kodem
skaningowym (ang. scan codes). Rozróżniane są dwa typy kodów skaningowych: wysyłanych przy wciśnięciu
lub przytrzymaniu klawisza (ang. make codes) oraz wysyłane przy zwolnieniu klawisza (ang. break codes).
Kody skaningowe wysyłane z klawiatury do urządzenia nadrzędnego reprezentują tylko numer wciśniętego
klawisza, natomiast nie reprezentują znaku, który jest na nim przedstawiony. Dlatego w ogólności kody
skaningowe i kody ASCII odpowiadające poszczególnym znakom są różne. Urządzenie nadrzędne zmuszone
jest więc do dekodowania odebranych kodów skaningowych. Kody skaningowe przypisane poszczególnym
klawiszom pokazano na rys.8.
5
Rys.8. Kody skaningowe klawiatury PC AT
O ile przedstawione na rys.6 kody są wysyłane przy wciśnięciu lub przytrzymaniu klawisza, to przy jego
zwolnieniu wysyłany jest również ten sam kod jednak poprzedzony wartością F0h. Pokazuje to poniższy
przykład.
Kod wysyłany przy wciśnięciu Kod przy zwolnieniu
Wciśnięty klawisz
lub przytrzymaniu klawisza
klawisza
A
1Ch
F0h, 1Ch
Prawy Ctrl
E0h, 14h
F0h, E0h, 14h
Wysyłane kody skaningowe nie są buforowane w klawiaturze, dlatego w przypadku wciśnięcia więcej niż
jednego klawisza, wysyłany jest kod ostatniego z wciśniętych klawiszy. Zwolnienia ostatnio wciśniętego
klawisza i jednoczesne dalsze przytrzymywanie klawiszy wciśniętych wcześniej nie powoduje wysyłania ich
kodów skaningowych.
4.1. Odbiór kodów skaningowych z klawiatury
Klawiatura może przesyłać dane do urządzenia nadrzędnego tylko wtedy, gdy zarówno linia danych, jak
również linia zegarowa znajdują się w stanie logicznej jedynki. Transmisja danych odbywa się z
wykorzystaniem 11 bitowej ramki (rys.9) składającej się z bitu startu, 8 bitów danych, bitu parzystości i bitu
stopu.
linia
zegarowa
linia
danych
bit
startu
0
1
2
3
4
5
6
7
P
bit
stopu
Rys.9. Protokół przesyłania informacji z klawiatury do urządzenia nadrzędnego
Wartość bitu startu i stopu jest zawsze stała i wynosi odpowiednio 0 oraz 1. Bity danych przesyłane są od
najmniej znaczącego do najbardziej znaczącego. Przebieg na linii zegarowej generuje zawsze klawiatura. Jego
częstotliwość waha się w granicach od 20 do 30 kHz. W protokole transmisyjnym zakłada się, że stan linii
danych jest ustabilizowany, gdy sygnał zegarowy przyjmuje stan niski, dlatego stan każdego bitu powinien być
odczytywany właśnie w tym przedziale czasowym. Linia zegarowa podłączona jest do wejścia INT0
mikrokontrolera, dlatego wykrycie opadającego zbocza na niej może być realizowane z wykorzystaniem
systemu przerwań mikrokontrolera.
Bit parzystości określa tzw. parzystość typu odd. Oznacza to, że jeśli w przesłanym bajcie informacyjnym
jest parzysta liczba jedynek, to bit ten przyjmuje wartość 1.
4.2. Przesyłanie rozkazów do klawiatury
Proces przesyłania rozkazów z urządzenia nadrzędnego do klawiatury inicjowany jest przez wymuszenie
stanu niskiego na linii danych. Aby zapobiec nadawaniu w tym samym czasie informacji z klawiatury do
urządzenia nadrzędnego, powszechnie przed wymuszeniem stanu niskiego na linii danych wymusza się również
stan niski na linii zegarowej na czas nie krótszy niż 60s (rys.10).
Po wymuszeniu stanu niskiego na linii danych przez urządzenie nadrzędne, klawiatura maksymalnie po
czasie 10ms rozpoczyna generowanie sygnału zegarowego. Stan linii danych jest odczytywany przez klawiaturę
przy opadającym zboczu sygnału zegarowego, dlatego po wykryciu pierwszego opadającego zbocza na linii
zegarowej należy ustawić na linii danych stan odpowiadający pierwszemu (najmłodszemu) bitowi przesyłanego
6
bajta. Zostanie on odczytany przez klawiaturę przy następnym opadającym zboczu. W ten sam sposób należy
postąpić z kolejnymi siedmioma bitami danej i bitem parzystości.
min
60s
max
10ms
linia
zegarowa
bit
startu
linia
danych
0
1
2
3
4
5
6
7
bit
stopu
P
ack
Rys.10. Protokół przesyłania informacji z urządzenia nadrzędnego do klawiatury; grubszą linią zaznaczono fragmenty, kiedy
stan danej linii wymusza urządzenie nadrzędne.
Po wysłaniu tej informacji urządzenie nadrzędne powinno zwolnić linię danych poprzez wystawienia na niej
logicznej jedynki. W kolejnym cyklu zegarowym klawiatura potwierdza przyjęcie danych przez wymuszenie na
linii danych stanu niskiego, a następnie zwalnia linię wymuszając stan wysoki. Jeśli linia danych nie zostanie
zwolniona po wysłaniu 10 bita (bita parzystości), to klawiatura nie zaprzestaje generowania sygnału
zegarowego, aż do spełnienia tego warunku.
urządzenie
nadrzedne
min
60s
linia
zegarowa
bit
startu
linia
danych
0
1
2
3
4
5
6
7
P
bit
stopu
klawiatura
max
10ms
linia
zegarowa
linia
danych
ack
Rys.11. Protokół przesyłania informacji z urządzenia nadrzędnego do klawiatury; podział na przebiegi generowane przez
klawiaturę i urządzenie nadrzędne.
Urządzenie nadrzędne może wysyłać do klawiatury różnego rodzaju polecenia. Poniżej podano kilka z
nich.
FDh
EEh
F3h
FFh
Ustawia stan diod LED w klawiaturze. Polecenie to jest używane do zapalania i gaszenia diod LED
oznaczonych nazwami: Caps Lock, Num Lock i Scroll Lock. Po wysłaniu tego polecenia klawiatura
odpowiada bajtem potwierdzającym (wartość FAh) i czeka na następny bajt określający status diod LED.
Poszczególnym diodom są odpowiednio przyporządkowane bity b 2, b1 i b0 wysyłanego bajta.
Echo. Po wysłaniu tego polecenia klawiatura przesyła w odpowiedzi tą samą wartość (EEh).
Ustawia wartość opóźnienia (czas uznania klawisza za stale naciskany) i częstość repetycji (powtórzenia
wysłania kodu stale naciskanego klawisza na sekundę) przy wciskaniu danego klawiszy. Klawiatura
odpowiada bajtem potwierdzającym (FAh), wstrzymuje przeglądanie klawiszy i oczekuje na jeden bajt
parametru. Poszczególnym bitom przesyłanego bajta przypisane jest następujące znaczenia:
 b7 = 0,
 b6 i b5 określają opóźnienie w milisekundach według zależności: (1+b6b5)250
 b4,...,b0 określają częstość repetycji, gdzie okres powtórzeń w sekundach można określić na
podstawie wzoru: (8+b2b1b0)  2b4b3  0,00417
Żądanie inicjalizacji i wewnętrznego testu klawiatury. Klawiatura po odebraniu tego polecenia wysyła
bajt potwierdzający (FAh) i oczekuje na ustawienie linii danych i zegarowej w stan wysoki na okres nie
krótszy niż 500s.
7
5. Działanie makiety pod kontrolą programu monitora
PAULMON2 jest darmowym programowym monitorem instalowanym w systemach bazujących na
mikrokontrolerach rodziny MCS-51. Umieszczenie opisywanego monitora w pamięci ROM mikrokontrolera
pozwala na wczytywanie programów do pamięci RAM i wykonywanie ich, co jest znacznie wygodniejsze i
szybsze, niż przeprogramowywanie pamięci EPROM.
Do komunikacji z programem monitora można wykorzystać dowolny program pozwalający na
komunikację za pomocą złącza RS-232, np. HyperTerminal. Po uruchomieniu niniejszego programu na
komputerze PC, oraz po wciśnięciu klawisza resetu makiety, monitor wysyła następujący komunikat:
Welcome to PAULMON2 v2.1, by Paul Stoffregen
See PAULMON2.DOC, PAULMON2.EQU and PAULMON2.HDR for more information.
Program Name
List
Single-Step
Memory Editor (VT100)
Location
1000
1400
1800
Type
External command
External command
External command
a następnie pojawia się znak zachęty
PAULMON2 Loc:2000 > _
Wartość 2000 określa adres, na jaki wskazuje wewnętrzny wskaźnik monitora. Jego znajomość jest użyteczna
przy wywoływaniu komend operujących na pamięci systemu.
Poniżej zostaną przedstawione wybrane komendy monitora. Wielkość liter przy wprowadzaniu poleceń
nie ma znaczenia.
5.1. D (ang. Download) – ładowanie programu
Polecenie to pozwala na załadowanie do pamięci RAM systemu mikroprocesorowego pliku z programem
w formacie Intel Hex. W formacie tym zawarte są informacje o adresie, pod który mają być zapisywane kolejne
bajty przesyłanego programu, zatem wewnętrzny wskaźnik pamięci monitora nie jest brany pod uwagę.
Załadowanie programu polega na wciśnięciu klawisza [D], co powoduje wyświetlenie następującej informacji
PAULMON2 Loc:2000 > Download
Begin ascii transfer of Intel hex file, or ESC to abort
Teraz należy z menu Transfer programu TyperTerminal wybrać Wyślij plik tekstowy..., a w otwartym oknie
wskazać miejsce położenia pliku *.hex. Zatwierdzenie wyboru powoduje rozpoczęcie przesyłania danych.
Za każdym razem, kiedy monitor odbierze pojedynczą linię z ładowanego pliku *.hex, na ekranie
zostaje wyświetlona kropka. Jeśli z jakiś powodów konieczne jest przerwanie ładowania programu należy wtedy
wcisnąć klawisz [Esc]. Po zakończeniu ładowania pliku z programem lub gdy ładowanie zostanie przerwane na
życzenie użytkownika, na ekranie pojawia się podsumowanie.
................................................................................
.......................................................
Download completed
Summary:
135 lines received
2084 bytes received
2084 bytes written
No errors detected
Jeśli po wykonaniu polecenia wczytania pliku w informacji podsumowującej monitora raportowane są
błędy o braku możliwości zapisu
Summary:
246 lines received
3834 bytes received
630 bytes written
Errors:
8
3204
bytes unable to write
to oznacza, że plik HEX został odebrany poprawnie, jednak obszar pamięci wyspecyfikowany w kolejnych
rekordach zawartych w pliku jest tylko do odczytu.
W przypadku odebrania przez monitor danych o niepoprawnym formacie zostanie wyświetlone
podsumowanie podobne do poniższego.
Summary:
3 lines received
62 bytes received
62 bytes written
Errors:
1 bad checksums
2 unexpected begin of line
17 unexpected hex digits
2 unexpected non hex digits
5.2. J (ang. Jump) – skocz pod określony adres w pamięci
Polecenie to pozwala na przejście do wykonywania wczytanego wcześniej programu użytkownika. Po
wciśnięciu klawisza [J] pojawi się napis
PAULMON2 Loc:2000 > Jump to memory location
Jump to memory location (2000), or ESC to quit: _
W tym momencie należy wprowadzić wartość adresu, od którego został umieszczony program. Po wpisaniu
ostatniego (czwartego) znaku na ekranie pojawi się napis
running program:
_
informując o rozpoczęciu wykonywania programu użytkownika.
Przed przejściem pod wyspecyfikowany adres program monitora odkłada na stosie wartość 0000H, zatem
programy, które kończą się instrukcją RET powodują ponowne wywołanie programu monitora. Jeśli program
działa w nieskończonej pętli, to jedyną możliwością powrotu do programu monitora jest reset mikrokontrolera.
6. Wskazówki do ćwiczenia
Wszystkie niezbędne informacje odnośnie układów wykorzystanych w makiecie znajdują się w
dodatkach dołączonych do instrukcji:
 dodatek A: wyświetlacz ciekłokrystaliczny.
6.1. Konfiguracja przestrzeni adresowej makiety
monitor EPROM
program RAM:
dane RAM:
obszar wspólny dla programu i danych:
0000h1FFFh,
2000hF7FFh,
0000hF7FFh,
2000hF7FFh.
6.2. Adresy układów peryferyjnych

wyświetlacz LCD
FE00h,
F
1
1
E
1
1
1
1
0
1
0
0
RS – linia sterująca RS sterownika wyświetlacza
R/W – linia sterująca R/W sterownika wyświetlacza
9
0
0
0
0
0
X
R/W
RS
hex
bin
7. Literatura
Rydzewski A.: „Mikrokomputery jednoukładowe”. WNT, Warszawa 1992.
Starecki T.: „Mikrokontrolery jednoukładowe rodziny 51”. NOZOMI, Warszawa 1996.
Starecki T.: „Mikrokontrolery 8051 w praktyce”. BTC, Warszawa 2003.
Majewski, Kardach K.: „Mikrokontrolery jednoukładowe 8051. Programowanie w języku C w
przykładach”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław 1995.
[5] Kernighan W., Ritchie D.M.: „ANSI C”. WNT, Warszawa 1992.
[6] Lach M.: „Biblioteka mikroprocesorowych procedur standardowych”. Elektronika Praktyczna 1/2/4/7/ 1997,
5/ 1998.
[7] Hadam P.: „Podstawy projektowania systemów mikroprocesorowych, cześć 9”. Elektronika Praktyczna
11/2003.
[8] Piotrowski S.: „Klawiatury”. klan, luty 1988.
[9] Ziembicki J.: „Moduły wyświetlaczy znakowych LCD ze sterownikami VLSI”. Radioelektronik 5/ 1994.
[10] Beach M.: „C51 Primer”, Hitex (UK) Ltd.
www.esacademy.com/automation/docs/c51primer/c51prim.htm
[1]
[2]
[3]
[4]
10
A
B
C
DB9
J1
S1
1
GND
1
6
2
7
3
8
4
9
5
C6
1uF
6
C4
1uF
1
3
13
8
14
7
GND
D1
1N4148
R1
4k7
GND
C3
10uF/16V
RESET
VCC
MAX232
C1+
C1-
R1 IN
R2 IN
T1 OUT
T2 OUT
V-
U8
C1
33pF
GND
2
C2+
C2-
R1 OUT
R2 OUT
T1 IN
T2 IN
V+
12MHz
Y1
4
5
12
9
11
10
2
VCC
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
19
18
C2
33pF
GND
2
C5
1uF
C7
1uF
80C32
P3.0/RXD0
P3.1/TXD0
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
X1
X2
U1
ALE
PSEN
P3.6/WR
P3.7/RD
EA
(A8)P2.0
(A9)P2.1
(A10)P2.2
(A11)P2.3
(A12)P2.4
(A13)P2.5
(A14)P2.6
(A15)P2.7
(AD0)P0.0
(AD1)P0.1
(AD2)P0.2
(AD3)P0.3
(AD4)P0.4
(AD5)P0.5
(AD6)P0.6
(AD7)P0.7
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
3
30 GND
29
16
17
31
21
22
23
24
25
26
27
28
39
38
37
36
35
34
33
32
3
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
1
4
GND
DC IN
J3
A15
A14
A13
A12
A11
A10
A9
R3
10k
VCC
GND
11
1
2
3
4
5
6
7
8
9
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
19
18
17
16
15
14
13
12
4
IO 0
IO 1
IO 2
IO 3
IO 4
IO 5
IO 6
IO 7
4
5
3
C9
100nF
GND
VCC
VCC
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
GAL16V8-25LC(20)
IN 0/CLK
IN 1
IN 2
IN 3
IN 4
IN 5
IN 6
IN 7
IN 8
IN 9/OE
U6
J2
DIN41524
R2
10k
1
2
3
4
5
6
7
8
9
11
74HCT573
LE
OE
D0
D1
D2
D3
D4
D5
D6
D7
U2
2
D
1
12
13
14
15
16
17
18
19
C10
100nF
LCD E
OEROM
OERAM
CSRAM1
CSRAM2
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
C11
100nF
27
22
20
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
4,7uF
C12
100nF
5
I/O 0
I/O 1
I/O 2
I/O 3
I/O 4
I/O 5
I/O 6
I/O 7
C8
R4
330R
VCC
62C256
R/W
OE
CE
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
U3
5
C13
100nF
GND
C14
100nF
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
U9
TFMS5360
11
12
13
15
16
17
18
19
OUT
VCC
GND
3
2
1
C15
100nF
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
6
6
27
22
20
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
GND
P1
4k7
R5
18k
VCC
62C256
R/W
OE
CE
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
U4
I/O 0
I/O 1
I/O 2
I/O 3
I/O 4
I/O 5
I/O 6
I/O 7
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
7
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
20
22
10
9
8
7
6
5
4
3
25
24
21
23
2
26
27
1
27C512
E
G/VPP
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
U5
WYŚWIETLACZ LCD
U7
LCD DISPLAY
11
12
13
15
16
17
18
19
VO
Date:
File:
A3
Size
Title
3
RS
R/W
E
4
5
6
DQ1
DQ2
DQ3
DQ4
DQ5
DQ6
DQ7
DQ8
11
12
13
15
16
17
18
19
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
8
7
8
14-Feb-2007
Sheet of
D:\Moje dokumenty\OAP\Instrukcje\Makieta
Drawn
RC5\KlawPC
By:
RC5 LCD.ddb
Revision
Makieta dydaktyczna: klawiatura PC i odbiornik RC5
Number
A0
A1
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
7
8
9
10
11
12
13
14
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
A
B
C
D

Podobne dokumenty