Emulator dydaktycznego systemu mikroprocesorowego DSM-51 firmy MicroMade
O autorze
Autorem programu jest Andrzej Lisiecki, student IV roku studiów inżynierskich na kierunku Informatyka na Politechnice Poznańskiej.
Niniejszy emulator jest przedmiotem pracy dyplomowej inżynierskiej autora.
Przeznaczenie emulatora
Głównym przeznaczeniem emulatora jest możliwość samodzielnego uruchamiania i korzystania z oprogramowania dla systemu DSM-51 w przypadku braku dostępu do rzeczywistego systemu tego typu. System DSM-51 jest systemem służącym do nauki programowania mikrokontrolerów 8051 i poznawania zasad obsługi typowych elementów spotykanych w systemach mikroprocesorowych.
W niniejszym tekście zakłada się, że użytkownik emulatora zna zasadę działania wszystkich elementów systemu i sposób ich wykorzystania programie pisanym dla DSM-51.
Zalecana konfiguracja sprzętowa i programowa
Zaleca się, żeby procesor komputera był dwurdzeniowy, rozdzielczość obrazu minimum 1280x800. W celu osiągnięcia wydajności zbliżonej do rzeczywistego systemu, procesor powinien być taktowany zegarem o częstotliwości minimum 2000Hz. Emulator wymaga środowiska uruchomieniowego .NET w wersji 2.0 lub nowszej, lub kompatybilnego, np. Mono.
Emulator przetestowano na następujących platformach programowych:
Microsoft Windows XP z zainstalowanym środowiskiem .NET w wersji 2.0.
OpenSUSE Linux z zainstalowanym środowiskiem Mono w wersji 2.4.2.3.
Na wymienionych platformach nie stwierdzono błędów uniemożliwiających wykorzystanie emulatora.
Pamięć ROM
System DSM-51 posiada pamięć ROM z zawartością określona przez producenta. Integralną częścią emulatora jest plik DSM-51.ROM o wielkości 32768 bajtów. Pamięć ROM zawiera oprogramowanie uruchamiane przy uruchamianiu systemu bez wczytania programu zewnętrznego oraz podprogramy do wykorzystania przez użytkownika systemu.
W przypadku braku pliku DSM-51.ROM, z emulatora można korzystać, jednak trzeba mieć na uwadze, że jeżeli program wczytany do pamięci RAM zawiera odwołania do przestrzeni adresowej w zakresie od 8000h do FFFFh i korzysta z zawartości pamięci ROM, to mnożenie działać prawidłowo.
Bezpośrednio po uruchomieniu emulatora, przestrzeń adresowa od 0000h do 7FFFh odwołuje sie również do pamięci ROM. Po wczytaniu programu zewnętrznego następuje automatyczna zmiana sposobu adresowania, że przestrzeń adresowa od 0000h do 7FFFh odwołuje się do pamięci RAM.
Za pomocą przycisku "Pamięć" można w dowolnej chwili zmienić, do której pamięci ma się odwoływać przestrzeń adresowa od 0000h do 7FFFh. Zmiana następuje poprzez przełączenie realizowane jednym kliknięciem w przycisk. Po każdej zmianie, w polu "Pamięć programu" w ramce "Pamięć" wyświetla sie rodzaj pamięci, do której odwołuje sie przestrzeń adresowa mikrokontrolera.
Korzystanie z programów zewnętrznych
Emulator obsługuje programy zewnętrzne zapisane w formacie Intel Hex. Pliki w tym formacie może generować praktycznie każdy kompilator oprogramowania na mikrokontroler 8051. Inne formaty plików nie są obsługiwane.
Aby wczytać program zewnętrzny, należy kliknąć przycisk "Wczytaj", a następnie wybrać plik w formacie Intel Hex.
Aby wyczyścić zawartość pamięci RAM, należy kliknąć przycisk "Wczytaj", a potem anulować wybór pliku i potwierdzić chęć wyczyszczenia pamięci RAM.
W przypadku wczytania pliku niezgodnego z Intel Hex lub błędu przy wczytywaniu, program zaproponuje wyczyszczenie pamięci RAM, co może być pomocne, gdy została wczytana część pliku.
Obsługa emulatora
Emulator pozwala uruchamiać i zatrzymywać pracę programu oraz wykonywanie krokowe, np. w celu znalezienia błędu w programie. Możliwe jest też resetowanie mikrokontrolera i całego urządzenia.
Uruchamianie i zatrzymywanie programu
Po wczytaniu programu, należy kliknąć przycisk "Start", aby rozpocząć prace programu. W celu zatrzymania pracy programu należy kliknąć przycisk "Stop", po czym można kontynuować pracę programu poprzez ponowne kliknięcie przycisku "Start".
Praca krokowa
Aby wykonać jeden krok (jeden rozkaz), należy kliknąć przycisk "Krok". Możliwe jest wykonywanie określonej liczby rozkazów lub rozkazów mieszczących się w określonej liczbie cykli jako jeden krok. W tym celu, w ramce "Ustawienia emulacji i wyświetlania", w polu "Rozkazów na krok" należy wpisać odpowiednia wartość (liczba rozkazów / cykli na jeden krok). Aby wpisana wartość była traktowana, jako liczba cykli, należy zaznaczyć pole "Liczba cykli".
Resetowanie i zerowanie
Emulator pozwala w dowolnym momencie zresetować mikrokontroler 8051, co wykonuje się za pomocą przycisku "Resetuj". Resetowanie nie przywraca domyślnych wartości parametrów urządzeń wchodzących w skład systemu DSM-51.
Natomiast kliknięcie przycisku "Zeruj" powoduje zresetowanie wszystkich elementów do wartości domyślnych, co jest zalecane w celu wczytania i uruchomienia innego programu, żeby nie było śladów pracy poprzedniego. Zarówno resetowanie, jak i zerowanie, nie czyści pamięci RAM.
Pułapki
Emulator posiada możliwość automatycznego zatrzymania programu w określonym miejscu. Polega to na utworzeniu listy adresów punktów przerwania (pułapki). Jeżeli w takcie pracy programu rejestr PC przyjmie jedną z wartości z listy, nastąpi automatyczne zatrzymanie programu bezpośrednio przez wykonaniem rozkazu rozpoczynającego się w punkcie przerwania. Należy pamiętać, że niektóre rozkazy zajmują więcej, niż jeden bajt, co powoduje, że przy wykonywaniu jednego rozkazu, rejestr PC zmienia wartość o 2 lub więcej. Jeżeli pod adresem ustawionym jako punkt przerwania znajduje się niepierwszy bajt rozkazu (opcode), to program nie zatrzyma się w tym punkcie mimo uaktywnienia pułapek.
Aby skorzystać z pułapek, należy w ramce "Pułapki" zaznaczyć pole "Uaktywnij", a następnie w polu poniżej wpisać adres punktu przerwania w systemie szesnastkowym i kliknąć przycisk "Dodaj". Niżej znajduje się lista wprowadzonych pułapek. Aby usunąć pułapkę, należy zaznaczyć jej adres na tej liście i kliknąć przycisk "Usuń". Aby wykonać program bez działania pułapek, należy przed jego uruchomieniem odznaczyć pole "Uaktywnij".
Urządzenia wejścia
System DSM-51 posiada dwie klawiatury, klawiaturę matrycową i przeglądaną sekwencyjnie. Obie klawiatury są obsługiwane w podobny sposób. Można je obsługiwać za pomocą klawiatury lub myszy.
Sterowanie klawiaturą
Aby obsłużyć emulowaną klawiaturę za pomocą klawiatury, należy najpierw myszką kliknąć białe pole znajdujące się w ramce "Sterowanie klawiaturą", a następnie wciskać klawisze odpowiadające klawiszom. Pozwala to w łatwy sposób sterować klawiaturą w trakcie pracy programu.
Do klawiszy klawiatury matrycowej przypisano klawisze z cyframi od "0" do "9" oraz z literami od "A" do "F", natomiast do klawiszy klawiatury przeglądanej sekwencyjnie przypisano klawisze ze strzałkami, klawisz "Enter" i klawisz "Escape".
W przypadku wciśnięcia jednego z wyżej wymienionych klawiszy (po uprzednim kliknięciu pola w ramce "Sterowanie klawiaturą"), odpowiadający klawisz zostanie zaznaczony na zielono, natomiast zwolnienie klawisza spowoduje przywrócenie białego koloru klawisza.
Sterowanie myszką
Można też sterować klawiaturami za pomocą myszki. Myszka umożliwia zatrzaskiwanie przycisku, czyli ustawienie go w stan nieustannego trzymania. Wykonuje się to poprzez klikniecie danego przycisku. Zatrzaśnięty klawisz jest zaznaczony na czerwono. W ten sposób można zatrzasnąć dowolna liczbę klawiszy obu klawiatur. Zwolnienie klawisza następuje przez ponownie kliknięcie w zatrzaśnięty klawisz lub przez wciśnięcie powiązanego z danym klawiszem klawisza klawiatury.
Zatrzaśnięcie przycisków jest użyteczne w przypadku uruchamiania programów, w których zdefiniowano inne działanie w przypadku trzymania klawisza w momencie uruchamiania programu.
Urządzenia wyjścia
System DSM-51 posiada trzy urządzenia wyjścia: wyświetlacz siedmiosegmentowy LED, wyświetlacz alfanumeryczny LCD oraz sygnalizator wizualny i akustyczny w postaci diody LED i buzzera.
Aby obserwować dane urządzenie wyjścia, należy zaznaczyć pole odpowiadające temu urządzeniu w ramce "Obserwowanie". Zaleca się odznaczenie elementów, których dany program nie wykorzystuje. Jest to celowo wprowadzona właściwość z tego względu, że śledzenie dowolnego urządzenia wiąże się z wykonywaniem dodatkowych operacji przez emulator, co może spowodować obniżenie wydajności emulacji.
Obserwację dowolnego elementu można włączać i wyłączać zarówno w czasie pracy programu, jak i w przypadku, gdy program nie jest uruchomiony.
Pamięć i rejestry
Emulator pozwala na podgląd i edycję zawartości pamięci i rejestrów mikrokontrolera 8051 oraz pamięci RAM. Aby wyświetlić bieżący stan rejestrów, należy kliknąć przycisk "Odśwież" w ramce "Pamięć" lub w ramce "Rejestry 8051". Możliwe jest też śledzenie zawartości pamięci i rejestrów w trakcie pracy programu, w tym celu należy zaznaczyć pole "Pamięć" lub "Rejestry" w ramce "Obserwowanie". Obserwowanie pamięci lub rejestrów na bieżąco może spowodować zmniejszenie wydajności pracy emulatora, podobnie, jak w przypadku urządzeń wyjścia.
Pamięć
W przypadku pamięci, dostępne są trzy typy: pamięć wewnętrzna 8051, pamięć ROM i pamięć zewnętrzna RAM. Wyświetlaną pamięć wybiera się poprzez zaznaczenie danego typu pamięci. W przypadku pamięci ROM i RAM, w danej chwili można wyświetlić zawartość 256 kolejnych bajtów pamięci. Aby zmienić wyświetlany zakres, należy w polu "Adres początkowy" wpisać adres początkowy w postaci hexadecymalnej i kliknąć przycisk "Odśwież". Klikając przyciski "<<<" i ">>>" można swobodnie przemieszczać się pomiędzy kolejnymi blokami po 256 bajtów każdy. W przypadku wyświetlania pamięci 8051, wprowadzony adres początkowy nie spełnia żadnej funkcji.
Możliwa jest też edycja zawartości dowolnej pamięci. W tym celu należy wyświetlić fragment, który zawiera bajty które chcemy edytować. Następnie należy myszką kliknąć bajt pamięci i wpisać żądaną wartość. W ten sposób można edytować kilka bajtów. Aby zatwierdzić zmiany, należy kliknąć przycisk "Zapisz". Ponieważ przycisk "Zapisz" powoduje zastąpienie wszystkich bajtów pamięci z podanego zakresu wyświetlanym bajtami, edycji nie zaleca się wykonywać w trakcie pracy programu, na czas edycji zaleca się zatrzymać program kliknięciem przycisku "Stop", a bezpośrednio przed edycją zaleca się kliknięcie przycisku "Odśwież".
Pamięć ROM również można edytować w taki sam sposób, jak pamięć RAM oraz wewnętrzną. Aby przywrócić oryginalną zawartość pamięci ROM, należy zamknąć i ponownie uruchomić emulator.
Rejestry
Wyświetlanie i edycja rejestrów wyglądają podobnie, jak w przypadku pamięci. Aby wyświetlić aktualną zawartość rejestrów, należy kliknąć przycisk "Odśwież". Aby edytować, należy wprowadzić nową wartość do dowolnego rejestru i kliknąć przycisk "Zapisz". Analogicznie, jak w przypadku pamięci, kliknięcie przycisku "Zapisz" spowoduje zmianę wartości wszystkich rejestrów na wartości wyświetlane na ekranie. Z tego względu nie zaleca się edytować rejestrów w trakcie pracy programu, a bezpośrednio przed dokonaniem edycji, zaleca sie kliknięcie przycisku "Zapisz".
Watchdog
Rzeczywisty system DSM-51 posiada układ watchdog, który wykonuje automatyczne reset po upływie 250 milisekund od momentu uaktywnienia go, o ile nie będzie on ponownie uaktywniony. W emulatorze jest on przedstawiony w ramce "Watchdog" w postaci paska o zmiennym wypełnieniu. Pusty pasek oznacza, że układ watchdog nie jest aktywny, natomiast częściowo wypełniony oznacza, że układ jest aktywny. Wraz z upływem czasu (kolejnych cykli maszynowych), wypełnienie się zmniejsza. W momencie uaktywnienia, czyli zresetowania licznika czasu, pasek jest całkowicie wypełniony. Samo zresetowanie mikrokontrolera przez układ watchdog ma identyczny skutek, jak kliknięcie przycisku "Resetuj".
Aby obserwować pracę układu watchdog, należy zaznaczyć pole "Watchdog" w ramce "Obserwowanie".
Porty systemu i komunikacja z zewnątrz
System DSM-51 posiada dwa porty szeregowe RS232, port równoległy, port izolowany galwanicznie oraz port analogowy. Aby śledzić wartości wystawiane na linie wyjściowe portów, należy w ramce "Obserwowanie" zaznaczyć odpowiedni typ portów. Dla ustawiania wartości na liniach wejściowych portów, nie jest potrzebne włączanie obserwowania portu.
Porty szeregowe RS232 i port izolowany galwanicznie
Linie tych portów reprezentowane są jako pola wyboru. Zaznaczone pole reprezentuje stan wysoki, a niezaznaczone reprezentuje stan niski na danej linii. Aby zmienić stan linii na porcie wejściowym, należy kliknąć myszką pole reprezentujące daną linię. Można to robić zarówno podczas pracy programu, jak i w przypadku, gdy program jest zatrzymany. Linie wejściowe i wyjściowe są oznaczone odpowiednio znakami "<" i ">". Zmiana zaznaczenia linii wyjściowych nie wpływa na działanie emulatora ani programu.
Port równoległy
Sposób obsługi jest identyczny, jak w przypadku portów szeregowych z tą różnicą, że kierunek danej linii może się zmieniać. Jeżeli w polu reprezentującym daną linię wyświetlony jest znak "<", to znaczy, że w danej chwili linia pracuje jako wejście. W przeciwnym wypadku jest wyświetlany znak ">".
Port analogowy
System DSM-51 posiada port analogowy zawierający osiem linii wejściowych i jedną linię wyjściową. Każda linia jest reprezentowana przez jeden suwak. Suwaki od "I0" to "I7" reprezentują linie wejściowe, natomiast suwak "O" reprezentuje linię wyjściową.
Aby ustawić wartość linii wejściowej, należy ustawić suwak na żądana wartość. Można to zrobić za pomocą myszki, a w celu precyzyjnego ustawienia można wciskać klawisze ze strzałkami w górę i w dół po uprzednim kliknięciu na suwak. Pod suwakiem wyświetlana jest aktualnie ustawiona wartość.
Suwak reprezentujący linie wyjściową ustawiany jest automatycznie, o ile jest włączona obserwacja portu analogowego. Pod suwakiem wyświetlana jest aktualna wartość na tej linii. Zmiana położenia suwaka reprezentującego linię wyjściową nie ma wpływu na działanie emulatora i programu.
Wyświetlane wartości na liniach portu analogowego mieszczą się w przedziale od 0 do 255, co reprezentuje wartość sygnału wejściowego po przekształceniu na postać cyfrową sygnału z linii wejściowej, oraz wartość sygnału wysyłaną do przetwornika cyfrowo-analogowego w przypadku linii wyjściowej. W rzeczywistym systemie, wartościom od 0 do 255 odpowiada napięcie od 0 do 5V.
Emulacja transmisji szeregowej
Bufor transmisji szeregowej ułatwia wymianę danych poprzez porty szeregowe. Ta funkcja została wprowadzona z tego względu, że ręczne wprowadzanie i wyprowadzanie danych przez te porty byłoby bardzo kłopotliwe. Aby uruchomić bufor, należy kliknąć przycisk "Bufor" znajdujący się w ramce "Transmisja".
Bufor umożliwia wymianę danych poprzez port COM1, COM2 lub port izolowany galwanicznie jako interfejs RS485 (w rzeczywistości jest to interfejs umożliwiający połączenie ze sobą kilku systemów DSM-51 poprzez port izolowany galwanicznie). W danej chwili, transmisja danych z wykorzystaniem bufora może odbywać się poprzez jeden port. W przypadku wyboru danego portu, pola wyboru reprezentujące linie tego portu w głównym oknie nie są brane pod uwagę.
Wybór portu i prędkości transmisji
Port wybiera sie w ramce "Port". Wybór pola "Brak" oznacza, że bufor nie jest wykorzystywany. Bufor może pracować (odbierać dane z DSM-51) również, jak jego okno nie jest otwarte. Należy wybrać ten port, z którego bufor ma przechwytywać dane i do którego ma te dane wysyłać. Po wybraniu portu, w polu "Transmisja danych", należy określić prędkość transmisji poprzez podanie liczby cykli maszynowych na jeden bit danych w polu "Liczba cykli na jeden bit". Obok tego pola wyświetlona jest wartość w bitach na sekundę aktualizowana na bieżąco. Należy wpisać taką prędkość, w jakiej program uruchomiony w emulatorze wysyła i odbiera dane. W przeciwnym wypadku, wyświetlane i przesyłane dane nie będą prawidłowe. Wartość "Liczba bitów miedzy bajtami" dotyczy danych wysyłanych z bufora do systemu DSM-51. Określa ona liczbę bitów miedzy kolejnymi bajtami w przypadku wysyłania więcej niż jeden bajt danych. W większości przypadków można pozostawić wartość domyślną. Jeżeli jednak w emulatorze uruchomi się program, który nie jest w stanie prawidłowo odbierać bajtów przesyłanych jeden za drugim, zwiększenie tej wartości pozwala rozwiązać problem.
Kontrola parzystości
Transmisja szeregowa asynchroniczna pozwala na dodanie dodatkowego, dziewiątego bitu, który jest wykorzystywany jako bit parzystości. Aby transmisja przebiegała prawidłowo, w buforze musi być ustawienie parzystości zgodne z implementacją parzystości w programie uruchamianym na emulatorze. Robi się to poprzez wybór odpowiedniej opcji w ramce "Bit parzystości". Wybranie nieprawidłowej opcji może skutkować odrzuceniem niektórych danych wysyłanych do systemu (w zależności od implementacji przetwarzania danych w programie), natomiast nie wpływa na wyświetlanie danych otrzymanych z DSM-51 (wyświetlane są wszystkie odebrane bajty). Jeżeli w ramce "Reprezentacja danych" zaznaczone będzie pole "Parzystość" i w ramce "Bit parzystości" będzie wybrana inna opcja niż "Brak", to przy każdym odebranym bajcie będzie wyświetlony znak "+" w przypadku poprawnego bitu parzystości, w przeciwnym przypadku jest wyświetlany znak "-".
Wyświetlanie otrzymanych danych
Możliwe są dwie reprezentacje otrzymanych danych. Pierwszy sposób to wyświetlanie danych jako tekst, a drugi to wyświetlanie ich w postaci hexadecymalnej. Określa się to przez wybór odpowiedniego pola w ramce "Reprezentacja danych". Zmiana reprezentacji danych dotyczy wyłącznie danych otrzymanych po dokonaniu tej zmiany. Wszystkie otrzymane dane są wyświetlane w polu "Dane otrzymane z DSM-51". W dowolnej chwili można usunąć zawartość tego pola poprzez kliknięcie przycisku "Wyczyść bufor danych otrzymanych".
W przypadku wyboru reprezentacji jako tekst, każdy bajt 0Ah lub 0Dh jest interpretowany jako znak końca linii, natomiast wszystkie bajty od 00h do 19h, oprócz 0Dh i 0Ah, są wyświetlane jako "*".
Natomiast w przypadku wyboru reprezentacji w postaci hexadecymalnej, kolejne bajty są wyświetlane jako liczby w systemie szesnastkowym oddzielone spacją.
Wysyłanie danych
Aby wysłać dowolne dane do systemu DSM-51, należy te dane wprowadzić do pola "Dane do wysłania do DSM-51". Reprezentacja wprowadzonych danych może być w formie tekstu lub hexadecymalnej i określa się ją w polu "Reprezentacja danych".
W przypadku wyboru reprezentacji jako tekst, do pola należy wprowadzić dowolny tekst do wysłania. Każdy znak końca linii jest wysyłany jako bajty kolejno 0Dh i0Ah. W przypadku niektórych znaków, szczególnie znaków z poza zakresu ASCII, może nie być możliwe określenie kodu ASCII danego znaku. Każdy taki znak jest traktowany jako bajt 20h (spacja).
Natomiast w przypadku wyboru reprezentacji w postaci hexadecymalnej, brane są pod uwagę tylko cyfry od "0" do "9", litery od "A" do "F" oraz litery od "a" do "f". Wszystkie inne znaki i znaki końca linii są ignorowane. Interpretacja polega na sklejeniu kolejnych znalezionych cyfr w systemie szesnastkowym w kolejne bajty do wysłania. Jeżeli liczba wszystkich znalezionych cyfr jest nieparzysta, to dopisuje się cyfrę "0".
Po wprowadzeniu danych, należy kliknąć przycisk "Wyślij zawartość bufora do DSM-51". W trakcie wysyłania zawartości bufora nie jest możliwe wysłanie innych danych, a także nie jest możliwe przerwanie wysyłania danych.
Ustawienia i parametry emulacji
Emulator posiada kilka opcji, które wpływają na szybkość emulacji oraz wyświetlanie urządzeń wyjścia. Wszystkie te parametry określa się w ramce "Ustawienia emulacji i wyświetlania". Osiągana szybkość emulacji wyświetlana jest w polu "Cykli na sekundę" i zależy od mocy obliczeniowej komputera i obserwowanych urządzeń wyjścia. Szybkość rzeczywistego systemu DSM-51 wynosi 921600 cykli na sekundę. Szybkość emulacji może się zmieniać w zależności od wykonywanych operacji oraz od działania obserwowanych urządzeń wyjścia.
Praca krokowa programu
Wymienione opcje określają, ile kolejnych rozkazów zostanie wykonanych po klikniecie przycisku "Krok", gdy program jest zatrzymany.
Pole "Rozkazów na krok" określa liczbę wykonywanych rozkazów na jeden krok pracy programu.
Pole "Liczba cykli" określa, że wartość wpisana w pole "Rozkazów na krok" jest liczbą cykli, które przemijają w trakcie wykonywania jednego kroku. Jest to liczba minimalna, więc jeżeli po przeminięciu określonej liczby cykli program przetworzy część rozkazu, to przeminie tyle cykli, ile jest wymagane do dokończenia przetwarzania programu.
Wykonywanie programu i płynność wyświetlanie urządzeń wyjścia
Wymienione opcje wpływają na szybkość wykonywania programu oraz na płynność wyświetlania urządzeń wyjścia, w tym linii wyjściowych portów i stanu układu watchdog. Wartości należy dobierać doświadczalnie, dla konkretnego przypadku.
Pole "Liczba rozkazów" na iterację określa liczbę rozkazów na jedną iteracje pętli programu. Im większa wartość, tym większa szybkość programu, ale zbyt duża wartość może spowodować trudności z obsługa interfejsu emulatora w trakcie pracy programu.
Pole "Okres czasu odświeżania" określa okres czasu między dwoma odświeżeniami stanu urządzeń wyjścia. Im mniejsza wartość, tym bardziej płynne wyświetlanie, ale może to spowodować zmniejszenie szybkości emulacji, szczególnie na procesorach jednordzeniowych.
Pole "Odświeżaj po iteracji" określa, że odświeżanie stanu urządzeń wyjścia odbywa się nie co określony czas, lecz po każdej iteracji. Na niektórych komputerach takie działanie może zwiększyć płynność wyświetlania, ale również spowodować zmniejszenie szybkości emulacji. Opcja przydatna w przypadku konieczności śledzenia bardzo szybkich zmian stanu urządzeń wyjścia, kosztem szybkości emulacji.
Pole "Wątki" określa, czy program może wykorzystywać wielowątkowość. To pole zwykle powinno być zaznaczone. Można próbować wyłączyć tą opcję w przypadku problemów z pracą emulatora.
Włączanie wyświetlacza LCD
Domyślnie, po uruchomieniu systemu, wyświetlacz LCD jest wyłączony. W rzeczywistym systemie DSM-51 wyświetlacz LCD jest domyślnie włączony, ponieważ zaraz po włączeniu systemu, automatycznie jest wykonywany program, który włącza wyświetlacz i wyświetla na nim pewne napisy, a program jest ładowany poprzez port COM1. Z tego powodu może się zdarzyć, że w uruchamianym programie nie ma rozkazów powodujących włączenie wyświetlacza LCD, tylko od razu są rozkazy powodujące wyświetlanie danych. Jeżeli program uruchomiony w emulatorze nie wyświetla żadnych danych na wyświetlaczu LCD, mimo, że w rzeczywistym systemie wyświetla na tym wyświetlaczu wszystkie dane prawidłowo, to należy zaznaczyć pole "LCD włączony", kliknąć przycisk "Zeruj" i ponownie uruchomić program.
Podtrzymywanie świecenia wyświetlacza LED
Wyświetlacz siedmiosegmentowy LED zwykle jest obsługiwany jako multipleksowany. Oznacza to, że w danej chwili świeci się tylko jeden znak (najczęściej cyfra), jednak świecący znak jest zmieniany w krótkich odstępach czasu, wynoszących najczęściej ok. 1ms. Taki sposób sterowania znacznie upraszcza budowę i sterowanie wyświetlaczem, oraz wykorzystuje bezwładność ludzkiego oka, co powoduje, że człowiek ma wrażenie, że świecą się wszystkie znaki i każdy znak może być inny.
Pełna implementacja bezwładności spowodowałaby znaczne spowolnienie pracy emulatora, a brak uwzględniania tego spowoduje, ze wyświetlanie nie będzie stabilne.
Z tego względu w emulatorze zastosowano uproszczoną metodę imitacji bezwładności ludzkiego oka poprzez podtrzymywanie świecenia segmentów przez określony czas (określony liczbą cykli) od momentu ustania świecenia danego segmentu w wyniku pracy programu uruchomionego w emulatorze.
W polu "Podtrzymywanie LED (cykle)" określa się liczbę cykli, przez którą każdy segment ma jeszcze świecić po ustaniu świecenia wynikającego z pracy programu. Wartość należy dobrać doświadczalnie, domyślna wartość jest optymalna w większości przypadków. Zbyt mała spowoduje niestabilne wyświetlanie wyświetlacza (znaki będą znikać, mimo, że na rzeczywistym systemie nie znikają), a zbyt duża spowoduje dużą bezwładność wyświetlacza, co objawia się tym, że po zmianie znaku w danym miejscu, przez pewien czas będą wyświetlane stary i nowy znak nałożone na siebie.
Kompatybilność i różnice w stosunku do rzeczywistego systemem DSM-51
Celem projektu jest wysoka kompatybilność emulatora z rzeczywistym systemem DSM-51. Z różnych powodów kompatybilność w 100% nie jest możliwa, więc poniżej wymieniono elementy, które nie są w 100% zgodne z rzeczywistym systemem DSM-51. Natomiast autor dołożył wszelkich starań, żeby poza wymienionymi elementami emulator był w 100% zgodny z rzeczywistym systemem.
Szybkość emulacji
Szybkość rzeczywistego systemu DSM-51 wynosi 921600 cykli maszynowych na sekundę. Emulacja ze stałą szybkością jest bardziej skomplikowana i wymaga wykonywania więcej dodatkowych operacji, co może sie przyczynić do znacznego obniżenia się wydajności.
TEST (dioda LED i buzzer)
W rzeczywistym systemie DSM-51 sygnalizator TEST składa się z dwóch elementów: dioda LED (sygnał wizualny) i buzzer (sygnał akustyczny). Oba elementy, podobnie, jak inne urządzenia wyjścia, są emulowane przez odpowiednie elementy graficzne w interfejsie emulatora. Emulator nie generuje dźwięków, ponieważ generowanie lub odtwarzanie dźwięku na bieżąco wiąże sie z obsługą DirectX lub MCI oraz wykonywaniem dodatkowych operacji.
Ze względu na odświeżenie w stałych odstępach czasu i braku implementacji bezwładności, nie jest możliwe pełne oddanie działania sygnalizatora w rzeczywistym systemie DSM-51. Dotyczy to między innymi załączania i wyłączania diody LED w tak krótkich odstępach czasu, żeby użytkownik odniósł wrażenie, że dioda świeci światłem ciągłym, ale ze zmniejszoną jasnością. To samo dotyczy wyświetlacza siedmiosegmentowego, który w rzeczywistym systemie również może świecić ze zmniejszoną jasnością poprzez odpowiednie sterowanie.
Układ 8255 - sterownik portu równoległego
W rzeczywistym systemie DSM-51 część A i B portu równoległego na układzie 8255 mogą pracować w jednym z kilku trybów. Dla części A przewidziano 3 tryby (0, 1 i 2), a dla części B przewidziano 2 tryby (0 i 1). Część C posiada jeden tryb. Domyślnym i najczęściej wykorzystywanym trybem dla wszystkich części jest tryb 0. Pozostałe tryby wykorzystuje się tylko przy transmisji danych z wykorzystaniem linii sterujących, które od strony systemu DSM-51 znajdują się w miejscu linii części C. Emulator obsługuje tylko tryb 0 dla części A i B.
Tryby 1 (dla części A i B) oraz 2 (dla części A) nie są zaimplementowane z tego względu, że te tryby są użyteczne tylko przy transmisji danych między systemami DSM-51 lub do drukarki LPT, gdzie transmisja wymaga potwierdzeń. W pozostałych przypadkach, np. do sterowania różnymi urządzeniami, wykorzystuje się tryb 0.
Sterownik transmisji szeregowej mikrokontrolera 8051
W rzeczywistym mikrokontrolerze 8051 znajduje się sterownik transmisji szeregowej, który może pracować w jednym z 4 trybów (0, 1, 2 i 3). Emulator obsługuje tylko tryby 1 i 3.
Wykorzystanie trybu 0 nie jest możliwe, ponieważ interfejs RS232 nie obsługuje transmisji synchronicznej zrealizowanej w ten sposób, w jaki jest to zrobione w mikrokontrolerze 8051. Prędkość transmisji 921600bps (wynika z zastosowania częstotliwości taktowania mikrokontrolera 11059200Hz) nie jest obsługiwana przez żaden komputer PC. Z tego względu tryb 0 nie jest zaimplementowany.
Natomiast tryb 2 zwykle nie jest używany, ponieważ ten tryb oferuje prędkości 172800bps i 345600bps, które nie są obsługiwane w komputerach PC. Poza tym, czas transmisji jednego bitu w tym trybie nie jest wielokrotnością czasu trwania jednego cyklu maszynowego, co znacznie komplikuje implementację obsługi tego trybu. Z tego względu tryb 2 również nie jest zaimplementowany.
Układ HD44780 - sterownik wyświetlacza LCD
Rzeczywisty sterownik HD44780 może obsługiwać różne wyświetlacze alfanumeryczne. Ustawienie sterownika w tryb właściwy dla podłączonego wyświetlacza realizuje się poprzez rozkaz "001xxxyy", gdzie trzy bity "xxx" określają parametry wyświetlacza, a dwa bity "yy" nie są brane pod uwagę. Zmiana ustawień parametrów w przypadku systemu DSM-51 nie jest użyteczna, ponieważ w tym systemie jest trwale zamontowany określony wyświetlacz. Z tego względu rozkaz "001xxxyy" nie jest obsługiwany w emulatorze, jego wykonanie nie powoduje żadnych skutków.
Urządzenia zewnętrzne produkowane przez MicroMade
Oprócz systemu DSM-51, firma MicroMade produkuje różne urządzenia przeznaczone do współpracy z tym systemem. Urządzenia zewnętrzne nie są obsługiwane, natomiast można symulować dowolne urządzenie poprzez obserwowanie i zmiany odpowiednich linii portów w trakcie pracy programu (ciągłej lub krokowej).
Wyszukiwarka
Podobne podstrony:
Opis zawodu AnkieterOpisFUNFACE DOS OPISDiagnostyka OBD EOBD OBD2 Opis VAG COMOpis wspólnoty z RybnaOpisEU1 sem09 10 opisOpisComputer Emulatoren Fremdsysteme auf dem PC nachgebildetopis bitwyPlatforma Stewarta opis programuOpis zawodu BiotechnologProjekt Opiswięcej podobnych podstron