ESM8051 instrukcja obsługi


INSTRUKCJA OBSAUGI
PROGRAMOWY EMULATOR SYSTEMU
MIKROPROCESOROWEGO
Z MIKROKONTROLEREM 8051
Maciej Madajczyk
Pytania, uwagi:
ESM8051@op.pl
Spis treści
1. ESM8051  instrukcja obsługi.......................................................................3
1.1 System komend i zmiennych..................................................................4
1.2 Podstawowe funkcje emulatora...............................................................6
1.3 Instalacja i obsługa rozszerzeń emulatora..............................................12
1.4 Dodatkowe komendy emulatora............................................................15
1.5 Urządzenia zewnętrzne.........................................................................18
1.5.1 Płytka wyświetlacza i klawiatury modułu AVT-2250...................18
1.5.2 INTi_Ti........................................................................................19
1.5.3 Układ PCF8583............................................................................19
1.5.4 Monitor portu szeregowego mikrokontrolera  UART..................20
1.5.5 UART2TCP.................................................................................21
1.5.6 Układ zadawania charakterystyki procesu.....................................23
1.6 Rozszerzenia interfejsu użytkownika....................................................26
1.6.1 Panel systemu emulatora..............................................................26
2. Przykładowe programy................................................................................28
2
1. ESM8051  instrukcja obsługi
Zaprojektowany emulator systemu mikroprocesorowego nosi nazwę ESM8051. Na
rys. 4.1 pokazane zostało główne okno emulatora. Składa się ono z pięciu
podstawowych części. Na samej górze znajduje się menu z zakładkami. Po wybraniu
dowolnej z nich pokazują się odpowiednie funkcje emulatora.
Rys. 4.1. Główne okno emulatora
Poniżej znajduje się pasek szybkiego uruchamiania zawierający najczęściej używane
funkcje. Zaczynając od lewej są to kolejno:
" wczytanie pliku w formacie Intel HEX do pamięci ROM uK,
" wczytanie pliku binarnego do pamięci ROM uK,
" rozpoczęcie symulacji,
" zakończenie symulacji,
" wykonanie pojedynczego rozkazy mikrokontrolera,
" otwarcie okna pokazującego zawartość poszczególnych rejestrów
mikrokontrolera,
" reset mikrokontrolera i urządzeń zewnętrznych,
3
" założenie pułapki wykonania rozkazu,
" założenie pułapki odczytu z XRAM,
" założenie pułapki zapisu do XRAM.
Poniżej paska szybkiego uruchamiania znajduje się okno informacyjne tzw. konsola.
Wyświetlane są w nim podstawowe informacje pochodzące od emulatora, czy też od
zainstalowanych rozszerzeń. Konsola jest jednym z możliwych tzw. standardowych
wyjść, na które wysyłane są komunikaty programu. Pod konsolą znajduje się pole
edycyjne służące do wpisywania komend emulatora. Komendy są podstawową formą
komunikacji z programem jaką dysponuje użytkownik. Dzięki nim można wykonać
wszystkie funkcje jakie oferuje emulator. Można je grupować w plikach tekstowych
tworząc tzw. skrypty. Dodatkowo stanowią one jedyne narzędzie konfiguracyjne dla
emulatora. Ostatnim elementem okna głównego znajdującym się na samym dole jest
pasek stanu, który podczas symulacji pokazuje aktualną prędkość z jaką pracuje
mikrokontroler oraz rzeczywisty czas pracy układu mikroprocesorowego.
1.1. System komend i zmiennych
Komendy są poleceniami emulatora, dzięki którym użytkownik może korzystać
z poszczególnych funkcji programu. Prawie wszystkie funkcje dostępne z menu mają
swój odpowiednik w postaci komendy. Dodatkowo pewne funkcje takie jak na przykład
ładowanie rozszerzeń są dostępne tylko z poziomu komend. Komendy bardzo często
posiadają dodatkowe argumenty konfiguracyjne.
Poniżej została pokazana przykładowa komenda wraz z dodatkowymi
argumentami:
bp c %pc "skrypt pulapka.txt"
Komenda jest zawsze jednoczłonowym wyrażeniem, pierwszym od lewej. W tym
przypadku jest to wyrażenie bp. Wszystkie pozostałe wyrażenia są interpretowane przez
program jako jej argumenty. Rozbijając całe wyżej podane wyrażenie mamy:
" bp  komenda,
" c  argument prosty,
" %pc  argument prosty,
"  skrypt pulapka.txt  argument złożony.
Komendę oraz poszczególne argumenty oddzielają od siebie znaki spacji. W niektóry
przypadkach zachodzi potrzeba aby jeden z argumentów również sam w sobie zawierał
4
jeden lub kilka znaków spacji. W takim przypadku należy argument umieścić
w znakach   , co program emulatora zinterpretuje jako jeden argument złożony
(UWAGA: interpretacja poszczególnych argumentów zależy od twórcy danej komendy,
a co za tym idzie komendy oferowane przez dodatkowe rozszerzenia mogą
w całkowicie inny sposób interpretować poszczególne argumenty).
Emulator oferuje użytkownikowi tzw. zmienne środowiskowe. W skrócie można
powiedzieć, że są to obiekty powiązane z jakąś ściśle określoną rzeczywistą zmienną
występującą w programie. W przypadku emulatora obiekty te są w dużej mierze
powiązane z rejestrami mikrokontrolera, dzięki czemu można w łatwy sposób zmieniać
ich wartości, bądz je odczytywać. Zmienna tak samo jak komenda składa się
z jednoczłonowego wyrażenia. Jeśli jest to zmienna która powiązana jest z jakimś
rejestrem to jej nazwa odpowiada nazwie tego rejestru. I tak na przykład:
" zmienna pc powiązana jest z licznikiem programu mikrokontrolera,
" zmienna dptr powiazana jest z rejestrem DPTR.
Do obsługi zmiennych zostały przygotowane dwie komendy:
" ?  służy do odczytu wartości zmiennej,
" > - służy do zapisu odpowiedniej wartości do zmiennej.
Na przykład:
? pc  wyświetli zawartość licznika rozkazów mikrokontrolera,
> dptr 5  wpisze wartość 5 do rejestru DPTR mikrokontrolera.
Bardzo często argumentem komendy są wartości liczbowe takie jak np. adres.
Emulator oferuje trzy rodzaje argumentów liczbowych:
" liczba zapisana w kodzie szesnastkowym (podstawowy system
w emulatorze),
" liczba zapisana w systemie dziesiętnym,
" liczba pobierana ze zmiennej środowiskowej.
Ponieważ podstawowym systemem w emulatorze jest system szesnastkowy to liczby
w tym formacie podaje się w  czystej postaci, bez jakichkolwiek dodatkowych
przedrostków. Na przykład:
" 10  liczba 10 w systemie hex (16 w systemie dziesiętnym),
" ff  liczba FF w systemie hex (255 w systemie dziesiętnym.
Liczby w systemie dziesiętnym podaje się poprzedzając je znakiem  _ . Na przykład:
" _10  liczba 10 w systemie dziesiętnym (0A w systemie szesnastkowym).
5
Ostatnim rodzajem są liczby pobierane bezpośrednio ze zmiennych środowiskowych.
Taki argument liczbowy składa się z przedrostka % oraz z nazwy zmiennej z której
dana wartość ma zostać odczytana. Na przykład:
" %pc  jako argument liczbowy podana zostanie wartość aktualnie znajdująca się
w liczniku rozkazów mikrokontrolera.
Należy pamiętać, że nazwy komend i zmiennych są wrażliwe na wielkości liter,
a więc np. bp oraz Bp zostaną zinterpretowane przez program jako dwie różne
komendy.
1.2. Podstawowe funkcje emulatora
Emulator umożliwia wczytanie kodu programu do pamięci ROM mikrokontrolera
w postaci dwóch formatów plików. Są to:
" plik w formacie Intel HEX. W większości środowiskach programistycznych
oferowanych dla mikrokontrolerów rodziny  51 format ten stanowi końcowy
wynik kompilacji,
" dowolny plik w postaci binarnej tzw. RAW. Emulator traktuje taki plik jako
część pamięci ROM mikrokontrolera i zaczynając od jego początku ładuje go
we wskazane miejsce do pamięci ROM.
Funkcje wczytywania obu plików znajdują się w menu w opcji Plik. Dodatkowo plik
w formacie Intel HEX można wczytać za pomocą komendy hex, podając jako jej
argument nazwę pliku. Na rys. 4.2 zostało pokazane okno służące do ładowania plików
w postaci binarnej.
Rys. 4.2. Okno wczytywania plików binarnych
W ramce Pamięć ROM można ustawić adres od którego dane z pliku będą wczytywane
oraz ilość bajtów jaka zostanie z pliku odczytana. Wpisując adres i liczbę bajtów do
6
załadowania należy pamiętać o wyżej omówionych formatach liczbowych. W ramce
Plik w polu edycyjnym należy podać nazwę wczytywanego pliku. Plik można
wyszukać na dysku za pomocą przycisku ... widocznego po prawej stronie pola
edycyjnego. Po każdym załadowaniu dowolnego pliku następuje zresetowanie
mikrokontrolera.
Emulator udostępnia podstawowe funkcje związane ze śledzeniem wykonywania
programu. Do pracy krokowej służy funkcja Krok dostępna w opcji menu Symulacja
oraz w pasku szybkiego uruchamiania. Wywołanie jej powoduje wykonanie
pojedynczego rozkazu przez mikrokontroler. Funkcja ta jest również dostępna
z poziomu komend jako komend k. Komenda ta może dodatkowo przyjąć jeden
parametr określający liczbę rozkazów jaka zostanie wykonana. Po wykonani
pojedynczego rozkazu użytkownik otrzymuje informacje o tym jaki rozkaz został
wykonany oraz jakie wartości znajdują się w ważniejszych rejestrach mikrokontrolera.
Informacja taka została pokazana na rys. 4.3.
Rys. 4.3. Informacja wyświetlana po wykonaniu pojedynczego rozkazu
Ważnym elementem podczas śledzenia wykonywania programu jest podgląd zawartości
rejestrów mikrokontrolera. Do tego celu służy funkcja Rejestry... dostępna z opcji
Mikrokontroler, pokazująca okno wyświetlające zawartość poszczególnych rejestrów
mikrokontrolera. Okno to zostało pokazane na rys. 4.4. Wyświetla ono zawartość
większości rejestrów jakie znajdują się w układzie z rodziny  51.
7
Rys. 4.4 Okno rejestrów mikrokontrolera.
Przycisk Odśwież widoczny w oknie odświeża zawartość wszystkich rejestrów podczas
symulacji w czasie rzeczywistym. Z rejestrami mikrokontrolera bezpośrednio związane
są zmienne środowiskowe. Dzięki nim można zapisywać wartości do odpowiednich
rejestrów. Nazwy zmiennych są takie same jak nazwy rejestrów i są to kolejno: pc, a,
dptr, p0, p1, p2, p3, sp, dpl, dph, tl0, tl1, th0, th1, psw. Kolejnym elementem jest
deasembler dostępny wyłącznie z poziomu komend. Za jego wywołanie odpowiedzialna
jest komenda d. Komenda ta może przyjmować dwa argumenty, gdzie jeden z nich
może być adresem od którego rozpocznie się deasemblacja, drugi natomiast może
określać liczbę deasemblowanych rozkazów, która domyślnie wynosi 10. Jeśli komenda
zostanie wywołana bez parametrów to pierwsza deasemblacja rozpoczyna się zawsze od
adresu 0000H. Kolejne wywołanie komendy d rozpoczyna deasemblację od ostatnio
zdeasemblowanego rozkazu. Na rys. 4.5 pokazany został wynik deasemblacji, który
emulator wyświetlił na konsoli.
Rys. 4.5. Wynik deasemblacji
8
Widać, że dla każdego rozkazu wyświetlany jest (zaczynając od lewej) jego adres, kod
oraz mnemonik. Argumenty komendy są odróżniane między sobą za pomocą
przedrostków a określającym adres oraz i określającym ilość deasemblowanych
rozkazów np.:
" d a100  deasemblacja 10 rozkazów rozpoczynając od adresu 100H,
" d a%pc i_20  deasemblacja 20 rozkazów rozpoczynając od adresu
zawartego w liczniku rozkazów mikrokontrolera.
Emulator pozwala na podgląd zwartości poszczególnych pamięci mikrokontrolera.
Do tego celu służą trzy komendy. Są to:
" mr  wyświetlająca zawartość pamięci RAM,
" mc  wyświetlająca zawartość pamięci ROM,
" mx  wyświetlająca zawartość pamięci XRAM.
Na rys 4.6 pokazany został częściowy wynik działania komendy mr.
Rys. 4.6. Wynik działania komendy mr
Jak widać na rysunku z lewej strony wyświetlany jest początkowy adres linijki danych,
po czym wypisywana jest zawartość w kodzie hex poszczególnych bajtów, kończąc na
wypisaniu zawartości pamięci jako znaków ASCII. Komendy wyświetlające zawartość
poszczególnych pamięci posiadają podobnie jak komenda deasemblera dwa opcjonalne
argumenty. Jeden z nich informuje komendę o tym od jakiego adresu rozpocząć
wyświetlanie zawartości, natomiast drugi oznacza liczbę linijek danych, które zostaną
wypisane. Każda linijka zawiera po 16 bajtów danych. I tak na przykład wywołanie
komendy:
" mr ; spowoduje wyświetlenie 16 linijek (256 bajtów  domyślna wartość)
pamięci RAM, rozpoczynając od adresu przed którym ostatnio wyświetlanie to
zakończono,
" mx a%dptr i20 ; spowoduje wyświetlenie 32 linijek pamięci XRAM (512
bajtów), rozpoczynając od adresu zawartego w rejestrze DPTR
mikrokontrolera.
9
Głównym przeznaczeniem emulatora jest jednak symulacja w czasie rzeczywistym.
Do tego celu dostępne są dwie funkcje dostępne w opcji Symulacja oraz z poziomu
paska szybkiego uruchamiania. Są to funkcje Start oraz Stop. Pierwsza służy do
rozpoczęcia symulacji, druga do jej zatrzymania. Dodatkowo istnieją komendy start
oraz stop o analogicznym działaniu. Podczas symulacji dozwolone jest wczytywanie
plików do pamięci ROM mikrokontrolera. Jednak załadowanie takie automatycznie
resetuje mikrokontroler oraz zeruje czas pracy układu.
Z symulacją związane jest pojęcie pułapek. Trafienie na pułapkę powoduje
zatrzymanie symulacji. Emulator pozwala na zakładanie trzech różnych typów pułapek.
Są to:
" pułapki wykonania rozkazu,
" pułapki odczytu z XRAM,
" pułapki zapisu do XRAM.
Pułapki można obsługiwać na dwa różne sposoby. Za pomocą okna dialogowego oraz
za pomocą komend. Na rys.4.7 zostało pokazane okno dialogowe za pomocą którego
można ustawiać pułapki jednego z trzech wyżej wymienionych rodzajów.
Rys. 4.7. Okno do obsługi pułapek
Okno to wywołuje się za pomocą jednej z trzech funkcji dostępnych w menu w opcji
Pułapki. Wygląd okna jest identyczny dla każdego rodzaju pułapek. Zmienia się tylko
jego nazwa, zależnie od rodzaju pułapek z którymi aktualnie się pracuje. Jak widać
10
okno składa się z listy aktualnie ustawionych pułapek, która znajduje się na górze.
W ramce Pułapka widać dwa pola edycyjne. W polu Adres wpisuje się adres pod
jakim pułapka ma zostać ustawiona. Zależnie od jej typu jest to adres pamięci
programu, adres odczytu XRAM, czy w końcu adres zapisu do XRAM. W polu
Komenda można wpisać dowolną komendę, która zostanie wykonana podczas
wystąpienia danej pułapki. Przycisk Ustaw ustawia nową pułapkę. Przycisk Usuń
zaznaczoną usuwa pułapkę która jest aktualnie zaznaczona na liście. Dodatkowo
istnieje przycisk Usuń wszystkie, który usuwa wszystkie pułapki danego typu. Do
obsługi systemu pułapek służą dodatkowo trzy komendy: bp, dbp, dabp. Pierwsza
komenda służy do ustawiania pułapek. Schemat jej wywołania wygląda następująco:
bp typ adres [komenda] ;[komenda] oznacza argument
;opcjonalny
Argument typ określa rodzaj ustawianej pułapki. Oczywiście rozróżnia się trzy typy.
Są to:
" c  pułapka wykonania rozkazu,
" xr  pułapka odczytu z pamięci XRAM,
" xw  pułapka zapisu do pamięci XRAM.
Adres określa adres pod którym pułapka zostanie ustawiona. Komenda jest
argumentem opcjonalnym. Jest to komenda wykonywana podczas uaktywnienia
pułapki. Przykładowe ustawienie pułapki odczytu z pamięci XRAM może wyglądać
następująco:
bp xr 4000  ? pc
Jest to pułapka uaktywniana podczas odczytu z XRAM pod adresem 4000H.
Uaktywnienie pułapki spowoduje wyświetlenie zawartości licznika rozkazów
mikrokontrolera.
Komenda dbp służy do usuwania pojedynczych pułapek danego typu. Schemat jej
wywołania wygląda następująco:
dbp typ adres
Typ określa rodzaj danej pułapki, natomiast adres określa z pod jakiego adresu
pułapka zostanie usunięta. Ostatnia komendą do obsługi pułapek jest dabp usuwająca
wszystkie pułapki danego typu. Wywołuje się ją w następujący sposób:
dabp typ
Argument typ określa rodzaj usuwanych pułapek.
11
1.3. Instalacja i obsługa rozszerzeń emulatora
Jednym z kroków jakie wykonuje emulator podczas startu jest wykonanie komend
zawartych w skrypcie startowym jakim jest plik skr_start.txt. Skrypt startowy można
porównać do pliku konfiguracyjnego, dzięki któremu za pomocą zawartych w nim
komend można dowolnie skonfigurować program emulatora. Konfiguracja polega na
przykład na załadowaniu odpowiedniego pliku w formacie Intel HEX, ustawieniu
odpowiedniej częstotliwości pracy mikrokontrolera oraz co jest jednym z ważniejszych
zadań, załadowaniu dodatkowych rozszerzeń takich jak urządzenia zewnętrzne czy
rozszerzenia interfejsu użytkownika. Skrypt startowy jest jedynym miejscem w którym
można użyć komend ładujących rozszerzenia emulatora.
Instalacja rozszerzeń składa się z dwóch etapów. Pierwszym etapem jest
zarejestrowanie pliku rozszerzenia, natomiast drugim właściwa jego instalacja. Do
zarejestrowania pliku rozszerzenia służy komenda r_rozszerzenie. Jedynym jej
argumentem jest nazwa pliku biblioteki zawierającej dane rozszerzenie. I tak na
przykład komenda:
r_rozszerzenie avt.dll
spowoduje zarejestrowanie pliku biblioteki zawierającej urządzenie zewnętrzne jakim
jest wyświetlacz i klawiatura zestawu AVT-2250. Rejestracja jest tylko zapisaniem
przez emulator listy plików rozszerzeń jakie należy zainstalować. Gdy zakończy się
wykonywanie skryptu startowego program emulatora rozpocznie właściwą instalacje
rozszerzeń, lądując wcześniej zarejestrowane pliki. Nie ma znaczenia czy
zarejestrowane rozszerzenie jest urządzeniem zewnętrznym czy rozszerzeniem
interfejsu użytkownika. Emulator sam rozpozna dany typ rozszerzenia podczas jego
instalacji. Ponieważ zarówno urządzenia zewnętrzne jak i rozszerzenia interfejsu
użytkownika (tzw. monitory) mogą zarezerwować dla siebie nowe komendy służące np.
do ich konfiguracji, to może zajść potrzeba skonfigurowania danego rozszerzenia,
jeszcze na etapie wykonywania skryptu startowego. Ponieważ jak zostało napisane
wyżej rozszerzenia są instalowane dopiero po zakończeni wykonywania skryptu
startowego, to konfiguracja rozrzerzeń za pomocą ich własnych komend była by
niemożliwa gdyby nie jeszcze jedna komenda odpowiedzialna za instalowanie
rozszerzeń. Komendą tą jest wyrażenie inst_rozszerzenia. Powoduje ona
zainstalowanie wszystkich wcześniej zarejestrowanych rozszerzeń już na etapie
wykonywania komend skryptu startowego. Po jej wykonaniu wszystkie rozszerzenia
12
zostają zainstalowane a co za tym idzie ich potencjalne komendy są już dostępne
i można z nich bez ograniczeń korzystać. Należy pamiętać że wykonanie komendy
instalującej rozszerzenia uniemożliwia dalszą ich rejestrację. Poniżej znajdują się
przykładowe zawartości dwóch skryptów startowych. Pierwszy z nich jest napisany
błędnie. W drugim ów błąd zostaje poprawiony.
Błędnie napisany skrypt:
;Rejestracja rozszerzeń
r_rozszerzenie avt.dll
r_rozszerzenie uzcp.dll ;to rozszerzenie rezerwuje dla siebie komendę
;uzcp
;poniższa linijka spowoduje wyświetlenie komunikatu o błędzie
uzcp 100 200 ;wykonanie komendy pochodzącej od rozszerzenia (komenda
;nie zostanie wykona ponieważ jeszcze nie została
;zainstalowana)
hex gen.hex ;załadowanie przykładowego programu
;koniec skryptu
Ten sam skrypt ale napisany poprawnie:
;Rejestracja rozszerzeń
r_rozszerzenie avt.dll
r_rozszerzenie uzcp.dll ;to rozszerzenie rezerwuje dla siebie komendę
;uzcp
inst_rozszerzenia ;zainstalowanie wcześniej zarejestrowanych plików
;rozszerzeń
;poniższa linijka spowoduje wykonanie danej komendy
uzcp 100 200 ;wykonanie komendy pochodzącej od rozszerzenia (w tym
;wypadku wszystko będzie OK. ponieważ komenda jest już
;zainstalowana w systemie)
hex gen.hex ;załadowanie przykładowego programu
;koniec skryptu
13
Użytkownik posiada dostęp do zainstalowanych rozszerzeń z menu okna głównego.
Po rozwinięciu opcji Urządzenia pokaże się lista zainstalowanych urządzeń
zewnętrznych. To jak urządzenie zareaguje na jego wybór z menu zależy tylko
i wyłącznie od autora danego rozszerzenia. W większości przypadków urządzenie takie
będzie dodatkowym oknem całej aplikacji i wybranie go z menu powinno uaktywnić
właśnie jego okno. Po kliknięciu w menu na opcje o nazwie Monitory pokaże się lista
zainstalowanych rozszerzeń interfejsów użytkownika. Również w tym wypadku reakcja
rozszerzenia na jego wybór z menu zależy tylko i wyłącznie od tego jak został on
zaprojektowany przez daną osobę. W większości przypadków rozszerzenie interfejsu
użytkownika stanowi również dodatkowe okno głównej aplikacji, lecz mogą zdarzyć się
przypadki, gdzie rozszerzenie po prostu zastąpi główne okno programu, tworząc
całkowicie nowy interfejs użytkownika. Oczywiście dostęp do danego rozszerzenia
może być również możliwy z poziomu komend, jeśli tylko projektant danego
rozszerzenia taką opcję przewidział w swoim projekcie.
Z zainstalowanymi rozszerzeniami wiąże się jeszcze jedna opcja menu
a mianowicie Rozszerzenia. Po jej wyborze pokazują się dwie funkcje: Lista
urządzeń... oraz Lista monitorów.... Obydwie funkcje pokazują okno dialogowe
widoczne na rys. 4.8. Zależnie od wybranej funkcji okno pokazuje listę
zainstalowanych urządzeń zewnętrznych lub listę zainstalowanych rozszerzeń interfejsu
uzytkownika. Dodatkowo zawarta jest tam informacja kto jest autorem danego
rozszerzenia oraz krótka informacja o samym rozszerzeniu.
14
Rys. 4.8. Okno pokazujące listę zainstalowanych urządzeń zewnętrznych.
Należy pamiętać, że każde dodatkowo zainstalowane urządzenie zewnętrzne
wydłuża czas wykonania pojedynczego cyklu maszynowego podczas symulacji
(podczas każdego cyklu maszynowego mikrokontrolera dla każdego urządzenia
wykonywana jest dwa razy specjalna funkcja synchronizująca). Dlatego też
instalowanie urządzeń zewnętrznych powinno ograniczyć się do tych, które są
niezbędne dla przeprowadzenia prawidłowej symulacji danego układu
mikroprocesorowego. Istotne jest również to, aby dwa lub więcej urządzeń nie
znajdowało się pod tymi samymi adresami w przestrzeni adresowej pamięci XRAM.
Jeśli dojdzie do takiego ustawienia to wartość jaką odczyta mikrokontroler z danego
adresu pamięci XRAM będzie zawsze wartością pochodzącą od ostatniego
zarejestrowanego urządzenia zainstalowanego pod tym adresem.
1.4. Dodatkowe komendy emulatora
Program emulatora posiada jeszcze kilka przydatnych komend, które mogą ułatwić
i przyśpieszyć pracę z emulatorem.
Komenda pom której argumentem dodatkowym jest nazwa innej komendy
wyświetla krótką informacje o tym do czego podana komenda służy i z jakimi
parametrami powinno się ja wywoływać. Informacje te są zawarte w plikach
15
tekstowych znajdujących się w katalogu komendy_p programu emulatora. Są to pliki
tekstowe, których nazwa jest taka sama jak nazwa komendy, której dotyczą.
Przykładowo wywołanie komendy:
pom d
spowoduje wyświetlenie zawartości pliku tekstowego o nazwie d.txt który znajduje się
w katalogu komendy_p. Autorzy rozszerzeń, które rezerwują dla siebie nowe komendy,
powinni takie pliki tekstowe umieścić w wyżej podanym katalogu.
Komenda clk ustawia prędkość działania mikrokontrolera. Wymaga jednego
argumentu, a mianowicie częstotliwości taktowania zegara mikrokontrolera.
Częstotliwość tą podaje się w [Hz]. Należy podkreślić, że emulator tak ustawia
opóznienia wykonania poszczególnych cykli maszynowych mikrokontrolera, aby czas
przeprowadzanej symulacji opowiadał rzeczywiście biegnącemu czasowi. Czyli
ustawiając na przykład częstotliwość taktowania zegara na 120 Hz, emulator w ciągu
jednej sekundy wykona zaledwie około 10 cykli maszynowych (na jeden cykl
maszynowy przypada 12 taktów zegara). Po każdej zmianie częstotliwości taktowania
powinno się zresetować mikrokontroler.
Kolejną przydatną komendą jest komenda alias. Jej pierwszym argumentem jest
nazwa alias-u jaki ma powstać, natomiast drugim argumentem jest nazwa komendy
łącznie z ustawionymi na sztywno parametrami. Dzięki tej funkcji można dla często
wykonywanej komendy przypisać krótsze wyrażenie składające się na przykład
z jednego znaku. Kiedy następuje wywołanie alias-u to program emulatora
automatycznie zamienia go na przypisaną mu komendę wraz z dodatkowymi
argumentami. Poniżej znajduje się przykład wywołania komendy alias:
alias p  bp c ; wyrażeniu p zostaje przypisane wyrażenie bp c
Po takim przypisaniu wpisanie w linie polecenia p i wywołanie go tak naprawdę
spowoduje wywołanie komendy bp z dodatkowym argumentem c. Nowe aliasy tak
samo jak komendy mogą przyjmować dodatkowe argumenty. I tak np. wywołanie
wcześniejszego alias-u p z argumentem 100 spowoduje wykonanie komendy bp c
100.
Jedną z ciekawszych komend jest komenda ustaw_wyjscie ustawiające
standardowe wyjście, na które są wysyłane wszystkie komunikaty pochodzące od
symulatora. Komendę wywołuje się w następujący sposób:
ustaw_wyjscie wyjscie [dane]
16
Argument wyjście jest to nazwa danego wyjścia. Emulator domyślnie posiada dwa
wyjścia. Jednym z nich jest konsola natomiast drugim plik. Konsola jest to po
prostu część okna głównego w którym wyświetlane są informacje pochodzące od
emulatora. Natomiast wyjście plik może być dowolnym plikiem tekstowym.
Opcjonalnym argumentem komendy są dane. W przypadku konsoli argument ten
jest ignorowany, natomiast w przypadku wyjścia plik argument ten jest traktowany
jako nazwa pliku, w którym będą zapisywane nowe wiadomości. Jeśli taka nazwa nie
zostanie podana to zostanie otworzony plik o domyślnej nazwie wyjscie_plik.txt.
Należy zaznaczyć, że autor dowolnego rozszerzenia interfejsu użytkownika może sam
stworzyć dodatkowe standardowe wyjście.
Komenda echo służy do wysyłania na standardowe wyjście ciągu znaków, które
znajdują się bezpośrednio za nią. Komenda ta ma zastosowanie przeważnie w skryptach
jako funkcja informacyjna.
Ostatnią komendą jest komenda skrypt. Służy ona do wykonywania zbioru
komend, które znajdują się w skrypcie. Jedynym argumentem tej komendy jest nazwa
pliku skryptu. Poniżej znajduje się przykładowy skrypt który można wykorzystać do
zapisywania aktualnego stanu pamięci i rejestrów mikrokontrolera:
ustaw_wyjscie plik raport.txt ;wynik zapisujemy do pliku raport.txt
echo Podstawowe rejestry uK
echo
? pc
? a
? dptr
? psw
echo
echo Zawartość pamięci RAM uK
mr a0 ;zapisujemy całą zawartość RAM
echo
echo Zawartość pamięci XRAM
mx a0 ifff ;zapisujemy całą zawartość XRAM (16(D) * FFF(H) = 65536(D))
ustaw_wyjscie konsola ;zamykamy plik i powracamy do konsoli
;koniec skryptu
Po wykonaniu takiego skryptu na dysku powstanie plik tekstowy o nazwie raport.txt
zawierający zawartość pamięci RAM, XRAM oraz kilku rejestrów mikrokontrolera.
17
1.5. Urządzenia zewnętrzne
Z punktu widzenia użytkownika główny program emulatora można porównać do
prostego debuggera, dzięki któremu można prześledzić wykonywanie się programu oraz
sprawdzić zawartość pamięci i rejestrów mikrokontrolera. Jego prawdziwe możliwości
widać dopiero po dołączeniu do niego rozszerzeń jakimi są urządzenia zewnętrzne.
1.5.1 Płytka wyświetlacza i klawiatury modułu AVT-2250
Na rys. 4.9 zostało pokazane okno urządzenia symulującego płytkę klawiatury oraz
wyświetlacza popularnego modułu AVT-2250[6].
Rys. 4.9. Okno wyświetlacza i klawiatury modułu AVT-2250
Tak jak w rzeczywistym układzie również i tutaj cały wyświetlacz składający się
z ośmiu segmentów jest multipleksowany, co oznacza, że w danej chwili może świecić
się tylko jeden segment. Wyświetlacz posiada dwa rejestry w przestrzeni adresowej
XRAM. Pod adresem 4001H znajduje się rejestr, którego wartość określa aktualnie
włączony segment, natomiast pod adresem 4000H znajduje się rejestr, który określa
wartość wyświetlaną przez włączony segment. Adresy obu rejestrów są stałe. Rejestr
klawiatury również umieszczony jest w przestrzeni adresowej XRAM, pod adresem
6000H. Widoczne na rysunku przyciski można uaktywnić na dwa sposoby. Pierwszy
sposób polega na ustawieniu kursora nad odpowiednim przyciskiem i kliknięciu lewym
przyciskiem myszki. Drugi sposób natomiast polega na wykorzystaniu klawiatury
komputera PC. Każdemu przyciskowi na płytce odpowiada jeden klawisz na
klawiaturze komputera co zostało pokazane za pomocą znaku jaki znajduje się na
każdym z przycisków jak pokazano na rys.4.9.
18
Symulowana płytka klawiatury oraz wyświetlacza znajduje się w module
bibliotecznym avt.dll. Można ją wykorzystać w dowolny sposób jako proste urządzenie
wejścia/wyjścia.
1.5.2 INTi_Ti
Urządzenie to symuluje płytkę z czterema przyciskami, które są bezpośrednio
podłączone do portu P3 mikrokontrolera. Na rys. 4.10 pokazane zostało okno tego
urządzenia.
Rys. 4.10. Okno urządzenia symulującego przyciski podłączone do portu P3
Przyciski podłączone są do linii przerwań zewnętrznych INT0, INT1 oraz do linii
taktujących liczniki T0 i T1 mikrokontrolera. Przyciski aktywuje się tak samo jak
w wyżej opisanym urządzeniu, za pomocą myszki lub za pomocą klawiatury
komputera. Jak widać na rysunku na każdym z przycisków jest napis określający
odpowiadający mu klawisz z klawiatury komputera oraz określający to do jakiej linii
portu został podłączony. Uaktywnienie danego przycisku powoduje wymuszenie stanu
 0 na odpowiedniej linii portu mikrokontrolera.
Urządzenie to znajduje się w pliku INTi_Ti.dll.
1.5.3 Układ PCF8583
To urządzenie zewnętrzne symuluje popularny układ PCF8051[7]. Układ ten jest
połączeniem 256 bajtowej pamięci RAM oraz zegara czasu rzeczywistego. Układ
sterowany jest za pomocą magistrali I2C[8]. Na rys. 4.11 pokazane zostało okno
symulowanego układu.
Rys. 4.11. Okno układu PCF8583
19
Przycisk OSC służy do podawania impulsów zewnętrznych. Przycisk RESET służy do
zerowania wewnętrznych rejestrów układu odpowiedzialnych za przechowywanie
aktualnego czasu. Symulowany układ nie reaguje na sygnał reset wywołany z okna
głównego emulatora. Dodatkowo jak widać na obrazku można zmienić najmłodszy bit
adresu układu. Układ podłączony jest to portu P1 mikrokontrolera. Linia SDA układu
podłączona jest do linii P1.0, a linia SCL do P1.1. Symulowany układ nie jest w pełni
zgodny z rzeczywistym układem. Zaimplementowany został jedynie rejestr sterujący
pracą układu (pod adresem 0H pamięci RAM układu), zegar zliczający w jednym 24
godzinnym formacie oraz licznik impulsów zewnętrznych. Dodatkowo użytkownik ma
do dyspozycji całą pamięć RAM układu.
Symulowany układ znajduje się w pliku PCF8583.dll. Istnieje możliwość
zainstalowania dwóch modułów bibliotecznych układu w jednej sesji emulatora. Jednak
aby instalacja przebiegłą poprawnie należy posiadać dwa identyczne pliki posiadające
różne nazwy na przykład PCF8583a.dll i PCF8583b.dll. W żadnym wypadku nie
można w skrypcie startowym zarejestrować dwóch lub więcej plików rozszerzeń o tej
samej nazwie. Zasada ta wynika bezpośrednio ze sposobu w jaki system Windows
ładuje biblioteki DLL.
1.5.4 Monitor portu szeregowego mikrokontrolera  UART
Urządzenie to pozwala na odbiór danych pochodzących z portu szeregowego
mikrokontrolera oraz na transmisję danych to tego portu. Na rys. 4.12 pokazane zostało
okno urządzenia.
Rys. 4.12. Okno monitora portu szeregowego
20
Jak widać na rysunku urządzenie to jest prostym terminalem. W ramce Dane
wejściowe w oknie dialogowym (tylko do odczytu) wyświetlane są informacje
odczytywane z portu szeregowego mikrokontrolera. Przycisk Czyść służy do kasowania
zawartości tego okna. Natomiast w ramce Dane wyjściowe znajduje się okno edycyjne
w którym można wpisać dowolny ciąg znaków i za pomocą przycisku Wyślij wysłać go
do bufora portu szeregowego mikrokontrolera. Przycisk ENTER służy do wysyłania
znaku o kodzie 0AH. Szybkość pracy terminala można zmieniać za pomocą rozwijanej
listy widocznej w ramce bit/sek. Dostępnych jest sześć najczęściej wykorzystywanych
prędkości transmisji, a mianowicie:
" 600 bit/sek,
" 1200 bit/sek,
" 2400 bit/sek,
" 4800 bit/sek,
" 9600 bit/sek,
" 19200 bit/sek.
Podłączenie tego urządzenia do mikrokontrolera można porównać do podłączenia tzw.
modemu zerowego. Oznacza to, że do urządzenia podłączone są tylko linie TXD i RXD
mikrokontrolera. Nie występuje tu jakiekolwiek potwierdzanie transmisji tzw. hand-
shake.
Monitor portu szeregowego mikrokontrolera dostępny jest z modułu UART.dll.
1.5.5 UART2TCP
Bardzo często w rzeczywistych układach mikroprocesorowych występuje
transmisja szeregowa pomiędzy kilkoma połączonymi ze sobą mikrokontrolerami.
Z myślą o takim połączeni powstało urządzenie UART2TCP. Jest to prosty konwerter
transmisji w postaci szeregowej na transmisję w postaci TCP/IP. Dzięki temu istnieje
możliwość połączenia między sobą dwóch jednocześnie działających emulatorów. Na
rys. 4.13 pokazane zostało okno konwertera.
21
Rys. 4.13. Okno konwertera transmisji UART na TCP/IP
W ramce UART można wybrać sześć prędkości transmisji: 600, 1200, 2400, 4800,
9600, 19200 bit/sek. W ramce TCP/IP ustawiamy parametry transmisji TCP/IP.
Transmisja TCP/IP pomiędzy dwoma konwerterami opiera się na technolog
Klient/Serwer. Oznacza to, że urządzenie zainstalowane w jednym emulatorze jest
klientem, natomiast w drugim emulatorze jest serwerem. Do wyboru tego jaką funkcje
ma pełnić dany konwerter, istnieją dwa przyciski odpowiednio: Klient  jeśli
urządzenie ma pracować jako klient oraz Serwer  jeśli urządzenie ma pracować jako
serwer. W widocznych na rysunku polach edycyjnych wpisuje się odpowiednio adres
IP, lub nazwę HOSTa z którym dany klient ma się połączyć oraz numer portu na
którym połączenie to będzie się odbywało. Jeśli urządzenie spełnia rolę serwera to
wymagane jest jedynie ustawienie odpowiedniego numeru portu. W przypadku klienta
ważne jest poprawne wypełnienie obu pól. Przycisk Przerwij połączenie przerywa
aktualne połączenie TCP/IP pomiędzy klientem i serwerem. Po przerwanym połączeniu
urządzenie może bez problemu uaktywnić nowe połączenie z nowymi dowolnie
dobranymi parametrami.
Ponieważ urządzenie to podobnie jak monitor portu UART jest bezpośrednio
podłączone do mikrokontrolera, to ustawiając na obu (kliencie i serwerze) identyczną
wartość prędkości transmisji szeregowej można traktować je jako jeden  wirtualny
kabel łączący między sobą dwa emulowane mikrokontrolery. Oczywiście nic nie stoi
na przeszkodzie aby urządzenie takie zastosować do np. połączenia mikrokontrolera
z rzeczywistym serwerem TCP/IP. Dodatkowo transmisja TCP/IP umożliwia
współpracę emulatorów przez sieć INTERNET co jest niewątpliwą zaletą takiego
rozwiązania.
Urządzenie konwertera transmisji dostępne jest z modułu UART2TCP.dll.
22
1.5.6 Układ zadawania charakterystyki procesu
Bardzo często technika mikroprocesorowa ma zastosowanie w układach
sterowania. Układ sterujący odczytuje wartość zmieniającej się w czasie wielkości
fizycznej i na tej podstawie wykonuje odpowiednie działania. Wielkość fizyczną
zmieniającą się w czasie nazywa się procesem, a przebieg zmian tej wielkości
w pewnym odcinku czasu można nazwać charakterystyką danego procesu. Układ
zadawania charakterystyki procesu służy do projektowania takiego przebiegu.
Urządzenie to posiada dwa 8 bitowe rejestry umieszczone w przestrzeni XRAM
mikrokontrolera. Jeden z rejestrów jest wyjściem, natomiast drugi wejściem urządzenia.
Na rejestr wyjściowy podawane są wartości pobrane z charakterystyki spróbowanej
w danym czasie, która jest zaprojektowana przez użytkownika w oknie zwanym
 oknem wyjścia . Urządzenie co pewien ściśle określony czas (wynikający z ustawień
danej charakterystyki) odczytuje dane z rejestru wejściowego i na tej podstawie rysuje
przebieg w oknie zwanym  oknem wejścia .
Na rys. 4.14 pokazane zostało okno główne urządzenia. Okno to składa się
z czterech podstawowych części:
" okna wyjścia, w którym edytowana jest charakterystyka danego procesu,
" okna wejścia, w którym rysowany jest przebieg zmian pewnej wartości
ustalanej przez mikrokontroler,
" panelu w którym ustawia się poszczególne parametry danego procesu, takie jak
czas trwania, maksymalną i minimalną wartość itd.,
" okna wyświetlającego aktualną pozycję kursora.
23
OKNO WYJŚCIA
PANEL
OKNO WEJŚCIA
WARTOŚCI
WSPÓARZDNYCH
KURSORA W OKNIE
Rys. 4.14. Główne okno układu do rysowania charakterystyk procesu
W widocznej na rysunku ramce Wyjście widać pola edycyjne w których wpisuje się
parametry określające daną charakterystykę. Znaczenia pół edycyjnych są następujące:
" Czas [s]  określa przedział czasowy (domyślnie rozpoczynający się od 0)
w jakim charakterystykę procesu będzie można rysować/edytować oraz w jakim
przedziale czasowym będą odczytywane dane pochodzące od mikrokontrolera
i wyświetlane w oknie wejścia,
" delta t  określa rozdzielczość siatki na osi t (oś odciętych) dla obu okien,
wejścia i wyjścia,
" Y max  określa maksymalną wartość jaką może przyjąć dana wielkość
procesu fizycznego,
" Y min  określa minimalną wartość jaką może przyjąć dana wielkość procesu
fizycznego
" delta Y  określa rozdzielczość siatki na osi Y (oś rzędnych) dla okna wyjścia.
Pola w ramce Wejście służą do określenia parametrów sygnału pochodzącego od
mikrokontrolera. Są to:
24
" Y max  określający maksymalną wartość jaką może przyjąć dany sygnał
wejściowy,
" Y min  określający minimalną wartość jaką może przyjąć sygnał wejściowym,
" delta Y  określający rozdzielczość siatki na osi Y dla okna wejścia.
Jak widać parametry czasowe są identyczne zarówno dla wejścia jak i dla wyjścia.
Przycisk USTAW SIATK ustawia odpowiednio siatkę w obu oknach na podstawie
wyżej wymienionych parametrów. Dodatkowo po użyciu tego przycisku zawartość obu
okien jest kasowana.
Wyjściem oraz wejściem układu do zadawania charakterystyki są 8 bitowe rejestry
umieszczone w przestrzeni adresowej XRAM mikrokontrolera. Oznacza to, że wartość
sygnału wyjściowe (charakterystyka procesu) jest zamieniana na postać cyfrową
kodowaną jako naturalny kod dwójkowy i dopiero pózniej zapisywana w 8 bitowym
rejestrze wyjściowym. Istnieje możliwość zmiany kodowania z kodu NB na kod U2.
DO tego celu służą pola wyboru widoczne w ramce Kod wyjścia. Podobnie sytuacja
wygląda jeśli chodzi o wejście układu. Odczytana 8 bitowa wartość z rejestru
umieszczonego w pamięci XRAM jest zamieniana na odpowiadającą mu wartość danej
wielkości fizycznej która jest obserwowana w oknie wejścia. Również tutaj istnieje
możliwość zmiany interpretacji kodu wejściowego. W ramce Kod wejścia za pomocą
pól wyboru można spowodować to, że kod wejściowy będzie interpretowany jako NB,
lub jako U2.
Do rysowani/edycji charakterystyki w oknie wyjścia służy myszka. Po ustawieniu
nowych parametrów siatki automatycznie dodawane są dwa pierwsze punkty
charakterystyki, jest to punkt na samym jej początku oraz punkt na samym końcu. Są to
skrajne punkty, których nie można przesuwać w bok. Można jedynie zmieniać wartość
jaką reprezentuje dany punk przesuwając go w górę lub w dół. Nowe punkty
charakterystyki dokłada się za pomocą kliknięcia lewym klawiszem myszy w oknie
wyjścia. Nowo dodany punk pojawi się w miejscu kursora myszki. Po każdym dodaniu
nowego punktu cała charakterystyka automatycznie się odrysowuje. Punkty wyznaczają
między sobą kolejne odcinki z których składa się całą charakterystyka. Kliknięcie
prawym klawiszem na już istniejącym punkcie powoduje jego usunięcie. Można
usuwać całą grupę punktów przytrzymując wciśnięty prawy klawisz myszy
i przesuwając mysz w taki sposób aby powstał obszar zawierający punkty które należy
usunąć. Klikając lewym przyciskiem myszy na już istniejącym punkcie wchodzi się
w tryb jego edycji. Edytowany punkt przybiera czerwony kolor. Punkt taki można
25
dowolnie przesuwać w bok w obrębie dwóch sąsiadujących punktów oraz w górę
i w dół. Dodatkowo edytowanemu punktowi można przypisać odpowiednie wartości
współrzędnych za pomocą pół w ramce Punkt. Znajdują się w niej dwa pola edycyjne,
górne zawierające wartość współrzędnej t oraz dolne zawierające wartość współrzędnej
Y. Aby ustawić punkt we wpisanej pozycji należy użyć przycisku USTAW. Dodatkowo
całą charakterystykę można zapisać lun odczytać z pliku. Do tego celu służą dwa
przyciski widoczne w ramce Charakterystyka. Przycisk ZAPIS służy do zapisu
charakterystyki, natomiast przycisk ODCZYT do jej odczytu z pliku.
Jak zostało napisane wyżej układ posiada dwa rejestry umieszczone w pamięci
XRAM mikrokontrolera. Domyślnie rejestr wyjściowy znajduje się pod adresem 0H,
natomiast rejestr wejściowy pod adresem 1H. Adresy oby rejestrów można zmienić za
pomocą komendy jaką to urządzenie sobie rezerwuje. Jest to komenda uzcp. Jej
dwoma argumentami są adres rejestru wyjściowego i adres rejestru wejściowego.
Argumenty liczbowe w przypadku tego urządzenia są zawsze traktowane jako liczby
w zapisane systemie szesnastkowym. Dodatkowo jeśli użytkownik nie chce zmieniać
adresu któregoś z rejestrów to zamiast liczby wpisuje w jej miejsce znak  - .
Przykładowe wywołania komendy uzcp:
uzcp 100 200 ;rejestr wyjściowy pod adresem 100H, wejściowy pod
;adresem 200H
uzcp  1000 ;adres rejestru wyjściowego bez zmian, adres rejestru
;wejściowego równy 01000H
Układ zadawania charakterystyki procesu dostępny jest z modułu uzcp.dll.
1.6. Rozszerzenia interfejsu użytkownika
Do głównego programu emulatora dołączony został jeden moduł rozszerzenia
zawierający w sobie rozszerzenie interfejsu użytkownika. Rozszerzenie to nie
implementuje nowych funkcji dla emulatora. Można je jednak wykorzystać jako
przykład, podczas projektowania własnych rozszerzeń użytkownika.
1.6.1 Panel systemu emulatora
Panel systemu emulatora jest przykładowym rozszerzeniem użytkownika, które
całkowicie zastępuje podstawowy interfejs jakim jest okno główne emulatora. Po
26
uruchomieniu programu emulatora i załadowaniu tego rozszerzenia, główne okno
programu zostaje zastąpione przez nowy interfejs który pokazany został na rys. 4.15.
Rys. 4.15. Okno interfejsu oferowanego przez panel systemu emulatora
Nowy interfejs oferuje kilka standardowych funkcji emulatora. W ramce Symulacja
dostępne są przyciski służące do obsługi. Zaczynając od lewej są to kolejno:
" przycisk rozpoczynający symulację,
" przycisk kończący symulację,
" przycisk wykonujący pojedynczy rozkaz mikrokontrolera,
" oraz przycisk resetujący układ mikroprocesorowy.
W ramce HEX widać przycisk służący do wczytywania plików w formacie Intel HEX.
Przyciski w ramce Okna pozwalają na wyświetlenie okna z zawartością rejestrów
mikrokontrolera oraz okna głównego emulatora (podstawowego interfejsu
użytkownika). W ramce Urządzenia znajduje się rozwijana lista z której dostępne są
wszystkie zainstalowane urządzenia zewnętrzne. Poniżej wszystkich ramek znajduje się
okno komunikatów. Okno to jest częścią standardowego wyjścia, jakie panel
zarejestrował dla siebie podczas instalacji. Wyświetlane są w min wszystkie
komunikaty pochodzące od emulatora. Na samym dole znajduje się pasek edycyjny, do
którego można wpisać dowolną komendę i za pomocą widocznego obok paska
przycisku K tą komendę wykonać. Zamknięcie panelu powoduje zamknięcie całej
aplikacji emulatora. Rozszerzenie to dostępne jest z modułu panel.dll.
27
2. Przykładowe programy
Wszystkie przykładowe programy napisane zostały w C w środowisku Keil
Vision2. Do każdego programu dołączony jest skrypt, który powoduje załadowanie
potrzebnych rozszerzeń (avt, uart itd.). Aby uruchomić dany skrypt należy zdjąć
komentarz (znak ;) z jego wykonania w głównym skrypcie startowym. Należy pamiętać
aby uruchamiać dokładnie jeden przykładowy skrypt.
28


Wyszukiwarka

Podobne podstrony:
Instrukcja obsługi bankomatu 1
Instrukcja obsługi Przenośna uniwersalna ładowarka USB Nokia DC 18
instrukcja obslugi Sagemcom DSI83
Instrukcja obsługi alarm Logic CAN LC 5 wyd 1 (2)
Nokia16 UG pl instrukcja obsługi
Instrukcja obsługi Ferguson Ariva T65 PL v1 50
OLYMPUS µ [mju] III 80 instrukcja obsługi
INSTRUKCJA OBSŁUGI KUCHENKA MIKROFALOWA AMICA AMM 21E80GS PL
Instrukcja obsługi do GOCLEVER 5066 FMBT PL
Instrukcja obsługi silnika Mercury 1
Instrukcja obslugi podobny model
Instrukcja obsługi Radia samochodowego z Opla marki CDR 2005 SIEMENS VDO J ANG
LEMKEN Thorit 8 instrukcja obslugi [PL]
Ebook Instrukcja Obslugi Pralki Mechanicznej Pdf
2005 FOX RearShock DHX instrukcja obsługi

więcej podobnych podstron