1
1.
Spis tre
ś
ci
Spis treści ................................................................................................................................... 1
Dane techniczne i możliwości programu ................................................................................... 2
Ograniczenia........................................................................................................................... 2
Możliwości programu ............................................................................................................ 2
Zawartość okna programu .......................................................................................................... 2
Ustawienia symulatora ............................................................................................................... 3
Pierwsze uruchomienie .......................................................................................................... 3
Okno ustawień........................................................................................................................ 3
Uruchamianie symulacja programu ........................................................................................... 4
Wczytywanie programu ......................................................................................................... 4
Wczytywanie z pliku HEX................................................................................................. 4
Wczytanie z pliku ASM i kompilacja ................................................................................ 4
Ręczna edycja programu .................................................................................................... 4
Praca w trybie ciągłym ........................................................................................................... 4
Praca w trybie krokowym ...................................................................................................... 4
Praca ciągła z pułapką ............................................................................................................ 5
Podgląd i modyfikacja zawartości pamięci SRAM................................................................ 5
Część dolna pamięci........................................................................................................... 5
Część górna pamięci (rejestry SFR)................................................................................... 6
Podgląd stanu liczników......................................................................................................... 6
Kontrola czasu rzeczywistego ................................................................................................ 7
Narzędzia dodatkowe ................................................................................................................. 7
Wyprowadzenia zewnętrzne .................................................................................................. 7
Wyświetlacz 7-segmentowy................................................................................................... 8
Kontrolki – przyciski monostabilne ....................................................................................... 8
Terminal UART ..................................................................................................................... 9
Zachowywanie ustawień środowiska symulacji....................................................................... 10
Przykład.................................................................................................................................... 10
2
2.
Dane techniczne i mo
ż
liwo
ś
ci programu
2.1.
Ograniczenia
Na program pisany, którego działanie ma być symulowane, nałożone są pewne ograniczenia,
wynikające z konstrukcji mikrokontrolera 89C51. Niniejszy program symulacyjny jest pod
każdym względem zgodny z restrykcjami zawartymi w danych technicznych wyżej
wspomnianego układu. Najważniejszym ograniczeniem jest rozmiar programu, który nie
może przekraczać 4kB.
Emulator 8051 w wersji 1:
- nie obsługuje zewnętrznej pamięci ROM,
- nie obsługuje zewnętrznej pamięci XRAM.
Innym ważnym ograniczeniem jest szybkość symulacji. Najwyższa (domyślna) symulowana
częstotliwość to 12kHz (co daje 1000 instrukcji w ciągu sekundy). Program wyposażony jest
jednak w narzędzia umożliwiające śledzenie wykonywania programu w czasie rzeczywistym.
2.2.
Mo
ż
liwo
ś
ci programu
Niniejszy program umożliwia debugging programu oraz kontrolę jego przebiegu poprzez:
- podgląd i możliwość modyfikacji dolnego obszaru pamięci SRAM (bez ograniczeń),
- podgląd i możliwość modyfikacji obszaru rejestrów SFR (bez ograniczeń),
- możliwość interakcji z mikrokontrolerem, poprzez podgląd i wymuszanie zmian
rzeczywistych stanów wyprowadzeń zewnętrznych (wyjścia z otwartym kolektorem),
- komunikację z programem poprzez symulowany interfejs UART oraz dołączony do
symulatora wirtualny terminal,
- Tworzenie uproszczonego systemu z użyciem wyświetlacza 7-segmentowego (bez
dekodera) oraz tablicy przycisków monostabilnych (każdy posiadaa swój indywidualny opis).
Całość układu okna, stanu programu można zachować w pliku w celu późniejszego powrotu
do symulacji.
3.
Zawarto
ść
okna programu
10
1
2
4
5
6
7
8
9
3
11
12
13
14
15
16
3
1 – Wczytaj plik z programem (Intel-HEX lub nieskompilowany ASM)
2 – Otwórz plik MTS (plik symulatora, z zachowanymi parametrami symulacji oraz układem
okien i stanów kontrolek, zachowany wcześniej przez użytkownika)
3 – Zapis pliku MTS (zachowanie bieżącego stanu symulacji(
4 – Rozpoczyna symulacje programu w trybie ciągłym
5 – Wstrzymuje symulację programu
6 – Zatrzymuje symulację (ponownie inicjuje wirtualny mikrokontroler)
7 – Wykonuje jedna instrukcję
8 – Uruchamia program w trybie pracy „z pułapką” (tj. gdy wskaźnik programu przyjmie
wcześniej zdefiniowaną wartość, wykonywanie programu zostanie wstrzymane).
9 – Ustawienie szybkości odświeżania podglądu stanów rejestrów, pamięci, itd. (liczba
odświeżeń / sek.). Nie należy mylić z ustaleniem szybkości symulacji.
10 – Pasek menu
11 – Pokaż okno podglądu / modyfikacji zawartości rejestrów SFR
12 – Pokaż okno podglądu / modyfikacji zawartości dolnego obszaru RAM,
13 – Pokaz okno podglądu / modyfikacji stanu wyprowadzeń zewnętrznych
14 – Pokaż okno terminala UART
15 – Pokaż okno wyświetlacza 7-segmentowego
16 – Pokaż okno z łącznikami monostabilnymi
4.
Ustawienia symulatora
4.1.
Pierwsze uruchomienie
Przy pierwszym uruchomieniu programu, użytkownik zostanie zapytany:
1 – o chęć skojarzenia plików MTS z symulatorem. Pliki MTS to pliki w formacje
wewnętrznym programu symulacyjnego. Są zapisywane przez użytkownika i zawierają
wszystkie ustawienia środowiska symulacyjnego, łącznie ze stanem rejestru i wskaźnika
programu, czasomierza, etc., oraz ścieżką do pliku z zawartością programu Intel-HEX;
2 – o chęć skojarzenia z symulatorem plików HEX. Jeżeli użytkownik korzysta z różnych
programów symulacyjnych, w szczególności symulujących inne układy programowalne niż
8051, kojarzenie plików HEX z „Emulatorem 8051” jest niewskazane. Należy uwzględniać
preferencje użytkownika.
4.2.
Okno ustawie
ń
Uwaga: Wszystkie ustawienia po zatwierdzeniu ich przyciskiem OK. zostaną zachowane w
rejestrze systemu Windows.
Dostęp: Menu Narzędzia -> Ustawienia
Okno ustawień umożliwia dostosowanie do własnych potrzeb kilka wybranych parametrów
symulatora. Widoczne od góry:
- Terminal UART – umożliwia wybór sposobu działania terminala UART. Jeżeli użytkownik
symuluje programy pisane w językach wyższego poziomu (np. C, Basic) zalecanym
ustawieniem (dla instrukcji Print i Input) jest „wyświetlaj tylko dane przychodzące”.
- Po wczytaniu programu. Po wczytaniu pliku programu domyślnie użytkownik jest pytany o
chęć wyzerowania (ponownej inicjacji) mikrokontrolera. W tej ramce istnieje możliwość
zadeklarowania chęci każdorazowego pytania, każdorazowego zerowania lub pozostawiania
zawartości pamięci SRAM w stanie z chwili poprzedzającej moment przeładowania
zawartości pamięci ROM.
- Po kompilacji. Jeżeli użytkownik używa wbudowanego edytora kodu programu, lub
wczytuje nie skompilowane pliki ASM, po kompilacji program pyta o chęć przejrzenia
wygenerowanego pliku wydruku. (jest to jedyna możliwość weryfikacji poprawności
4
zapisu/kompilacji programu). W tej ramce można zadeklarować chęć każdorazowego pytania,
każdorazowego wyświetlania lub pomijania tej możliwości.
W dwóch ostatnich ramkach możliwe jest skojarzenie z symulatorem plików MTS lub/i HEX,
lub likwidacja skojarzenia.
5.
Uruchamianie symulacja programu
5.1.
Wczytywanie programu
5.1.1.
Wczytywanie z pliku HEX
Menu Plik -> Wczytaj ROM…
W otwartym oknie wskazać plik z zawartością programu (plik w formacie Intel-HEX). Po
zatwierdzeniu przyciskiem Otwórz program z wybranego pliku zostanie wczytany do
wewnętrznej pamięci symulowanego mikrokontrolera. Zostanie także wyświetlone okno ze
zdekompilowaną zawartością programu.
5.1.2.
Wczytanie z pliku ASM i kompilacja
Menu Plik -> Wczytaj ROM…
W otwartym oknie wskazać plik z zawartością programu (plik w formacie tekstowym, z
rozszerzeniem .ASM). Po zatwierdzeniu przyciskiem Otwórz program zostanie
automatycznie skompilowany, i – jak podczas wczytywania pliku HEX – zostanie wczytany
do pamięci ROM symulowanego mikrokontrolera. Dodatkowo, wyświetlone zostanie okno z
zawartością pliku ASM. Możliwa będzie zmiana programu oraz ponowna jego kompilacja
(patrz nast. podrozdział).
5.1.3.
R
ę
czna edycja programu
Możliwe jest bieżące pisanie oraz symulowanie programu. Dostęp: menu Narzędzia ->
Edytor kodu.
Po otwarciu okna edytora kodu na pasku menu okna symulatora ukaże się dodatkowa pozycja
„Asembler”. Po rozwinięciu tego menu ukaże się opcja „Kompiluj i wczytaj do pamięci”. Po
jej kliknięciu, zawartość edytora kodu zostanie zapisana w pliku tymczasowym ASM, który
zostanie poddany kompilacji. Po skompilowaniu, program zostanie wczytany do pamięci
ROM symulowanego mikrokontrolera.
Uwag: Jeżeli wcześniej wczytywany był plik ASM, następnie użytkownik zmieniał zawartość
programu w oknie edytora kodu, po kompilacji zawartość oryginalnego pliku ASM nie
ulegnie zmianie. Jest to istotne – w celu zapisu zawartości zmodyfikowanego programu
należy jego treść skopiować z edytora kodu (poprzez zaznaczenie całości, i wciśnięcie
kombinacji klawiszy [Control] + [C] oraz wklejeniu skopiowanej treści do edytora
tekstowego (np. Notatnika) i zapisaniu jej w odpowiednim pliku.
5.2.
Praca w trybie ci
ą
głym
Po kliknięciu przycisku
wirtualny mikrokontroler zostanie uruchomiony. Wykonywanie
programu można wstrzymać (przycisk
) lub zatrzymać przyciskiem
, co spowoduje
ponowne zainicjowanie mikrokontrolera (bez kasowania zawartości pamięci ROM).
5.3.
Praca w trybie krokowym
Wykonanie programu „krok po kroku” możliwe jest przy użyciu przycisku
. Pojedyncze
jego kliknięcie spowoduje wykonanie jednej (bieżącej) instrukcji programu. Jeżeli widoczne
5
jest okno programu, a użytkownik nie kliknął pojedynczo w liście prezentującej
zdekompilowany program, zostanie wykonana aktualnie zaznaczona instrukcja. Możliwa jest
zmiana zawartości wskaźnika programu, poprzez dwukrotne kliknięcie na pożądanej
instrukcji w w.w. liście i odpowiedniej odpowiedzi na wyświetlone zapytanie). Aktualna
zawartość wskaźnika PC jest widoczna w oknie kontroli czasu (Menu Widok -> Przebieg
programu).
5.4.
Praca ci
ą
gła z pułapk
ą
Warunkiem możliwości pracy ciągłej „z pułapka” jest widoczność okna ze
zdekompilowanym programem. Jeżeli okno to nie jest widoczne, należy wybrać z menu:
Widok -> Zasoby wewnętrzne -> zdekompilowany program.
W w.w. oknie należy wskazać pojedynczym kliknięciem myszy rozkaz, na którym ma zostać
wstrzymane wykonywanie programu. (Wybrany rozkaz NIE zostanie wykonany). Następnie
należy uruchomić wykonywanie programu „z pułapką” przy pomocy przycisku
5.5.
Podgl
ą
d i modyfikacja zawarto
ś
ci pami
ę
ci SRAM
5.5.1.
Cz
ęść
dolna pami
ę
ci
Menu Widok -> Zasoby wewnętrzne -> Pamięć RAM (dolny obszar).
U dołu okna widoczne są pola wyboru opcji HEX i DEC. Umożliwiają przełączanie podstawy
wyświetlanych liczb (szesnastkowy / dziesiętny).
Dwukrotne kliknięcie którejkolwiek komórki pamięci powoduje wyświetlenie okna jak na
poniższym obrazku.
6
Umożliwia ono podgląd adresu wybranej komórki i jej zawartości. Pozwala także zmienić
zawartość – nową liczbę wpisuje się w pole tekstowe u dołu okienka. Akceptowane są
następujące formaty wpisywania:
- dziesiętny – np. 17d lub 56
- szesnastkowy – np. 15h
- binarny – npp. 01100110b
5.5.2.
Cz
ęść
górna pami
ę
ci (rejestry SFR)
Menu Widok -> Zasoby wewnętrzne -> Rejestry SFR.
W oknie podglądu/edycji zawartości SFR, podobnie jak w przypadku edycji zaw. Dolnego
obszaru pamięci ram – dwukrotne kliknięcie na polu z liczbową zawartością wybranego
rejestru powoduje ukazanie się okienka edycji jego zawartości. Dodatkowo, dwukrotne
kliknięcie na wybranym bicie dowolnego rejestru powoduje zmianę jego stanu na przeciwny.
5.6.
Podgl
ą
d stanu liczników
Menu Widok -> Układy peryferyjne wewnętrzne -> Timer0 oraz Timer1.
7
Okienka umożliwiają obserwację i zrozumienie aktualnego stanu układów licznikowych.
Umożliwiają zmianę parametrów pracy liczników, odczyt i zmianę stanu ich rejestrów.
Pojedyncze kliknięcie na danej pozycje listy informującej o trybie pracy licznika powoduje
zmianę odpowiednich bitów w rejestrze TMOD, przez to zmianę trybu pracy licznika.
5.7.
Kontrola czasu rzeczywistego
Menu Widok -> przebieg programu.
W oknie kontroli przebiegu programu możliwa jest kontrola rzeczywistego czasu
upływającego podczas wykonywania programu. Licznik czasu można zerować przyciskiem
„X” umieszczonym tuż obok niego, w dowolnym momencie wykonywania, lub wstrzymania
wyk. Programu. W celu zapewnienia prawidłowości pracy licznika czasu, oraz wskaźnika
szybkości układu UART, należy ustawić w polu (liście) u góry okna częstotliwość przebiegu
taktującego (lub oscylatora) jaki przewidziany jest w układzie, którego oprogramowanie jest
uruchamiane w symulatorze.
6.
Narz
ę
dzia dodatkowe
6.1.
Wyprowadzenia zewn
ę
trzne
Menu Widok -> Wyprowadzenia.
8
W tym oknie możliwa jest obserwacja stanu wyprowadzeń zewnętrznych. Możliwe jest także
wymuszanie zmiany ich rzeczywistego stanu – pojedyncze kliknięcie kontrolki danego
wyprowadzenia powoduje zanegowanie jego stanu. Warto przypomnieć, że 8051 posiada
wyjścia z otwartym kolektorem i tak też (tzn. jako iloczyn „na drucie”) należy rozumieć
„zmianę stanu zewnętrznego”.
Jeśli zmienić stan wyprowadzenia RESET na wysoki, tak jak w rzeczywistości –
mikrokontroler zostanie wyzerowany.
6.2.
Wy
ś
wietlacz 7-segmentowy
Menu Widok -> układy peryferyjne zewnętrzne -> wyświetlacz 7-seegmentowy,
W powyżej zaprezentowanym oknie możliwa jest graficzna reprezentacja stanu wybranych
pinów w formie znaków na 7-segmentowym wyświetlaczu LED. Są to wyświetlacza „o
wspólnej anodzie”. Warunkiem świecenia n-tej diody k-tego bloku jest stan wysoki na
anodzie k-tego bloku i stan niski na linii n-tego segmentu. Konfiguracja powiązań
poszczególnych linii z odpowiednimi pinami odbywa się poprzez wybór odpowiedniej
pozycji z list widocznych w w.w. oknie, lub wpisanie nazw pinów za pomocą klawiatury. W
tym drugim przypadku możliwe jest stosowanie notacji przyspieszającej pisanie – przykład:
P1.0 = p,10 = p10
6.3.
Kontrolki – przyciski monostabilne
Menu Widok -> układy peryferyjne zewnętrzne -> przyciski monostabilne.
9
Wyżej pokazane okno służy do tworzenia symulowanego interfejsu użytkownika. Ułatwia
komunikację z użytkownikiem, gdy program jest uruchamiany wyłącznie w symulatorze.
Każdy przycisk posiada możliwość powiązania go z jednym z wyprowadzeń mikrokontrolera,
oraz opatrzenia go etykieta opisująca jego funkcję. Konfiguracji powiązań z
wyprowadzeniami dokonuje się jak w przypadku wyświetlacza 7-segmentowego (patrz dział
poprzedni).
Wciśnięcie przycisku sygnalizowane jest świeceniem „lampki” w górnej połówce każdego
klawisza i jest równoznaczne z wymuszeniem stanu niskiego na linii powiązanej z daną
kontrolką.
6.4.
Terminal UART
Menu Narzędzia -> Terminal UART.
Okno terminala służy do komunikacji z programami terminalowymi. Przykładowo, użycie
instrukcji Print w językach wyższego poziomu (np. Bascom, C) powoduje wysłanie
zdefiniowanego ciągu danych przez UART. Dane te odbierane są przez terminal, który w
emulatorze symulowany jest w wyżej pokazanym oknie.
Terminal jest urządzeniem wejścia-wyjścia, a więc możliwe jest także wysyłanie danych z
terminala do mikrokontrolera. Ciąg danych należy wpisać w polu tekstowym u dołu okna
terminala i zatwierdzić przyciskiem „Wyślij”.
U góry okna terminala wyświetlony jest bieżący parametr „Baud Rate” (szybkość
komunikacji, uzależniona nastawami w odpowiednich rejestrach mikrokontrolera oraz
częstotliwością generatora zegarowego; jest to powiązane z ustawieniem w oknie kontroli
czasu rzeczywistego).
Ponieważ wysłanie i odbiór bajtu danych wymaga (zależnie od BR) upłynięcia dużej liczby
cykli maszynowych, a symulacja odbywa się z częstotliwością max. 1kHz, możliwe jest
zignorowanie ustawionej w mikrokontrolerze szybkości transmisji. Domyślnie po otwarciu
okna terminala ustawienie to jest aktywne. Poprzez zaznaczenia pola wyboru „Symulowana
rzeczywista szybkość transmisji” na powrót wymusza się na symulatorze odczekiwanie
odpowiedniej ilości cykli maszynowych niezbędnej do przesłania każdego bajtu informacji
(co znacznie spowalnia interakcje terminala z użytkownikiem).
10
7.
Zachowywanie ustawie
ń
ś
rodowiska symulacji
Możliwe jest zachowanie w pliku konfiguracji okien oraz stanu symulacji. Z menu Plik
wybiera się w tym celu pozycję Zapisz ustawienia symulatora. Należy wybrać lokalizacje i
nazwę pliku oraz zatwierdzić wybór przyciskiem „Zapisz”. W pliku zachowywane są:
- pozycja wszystkich otwartych okien,
- stan rejestrów SFR, oraz pamięci RAM i wskaźnika programu,
- ścieżka do pliku z zawartością programu.
Uwaga: Nie zachowywany jest stan systemu przerwań!
Po wczytaniu zapisanego wcześniej pliku symulacji, zostanie odtworzony stan symulatora,
oraz wczytany plik programu, którego ścieżka została zapisana w pliku symulatora. Uwaga:
Plik programu najpierw poszukiwany jest w tej samej lokalizacji, w której znajduje się
otwierany plik symulacji. Jeżeli nie zostanie tam znaleziony, poszukiwany jest bezpośrednio
w lokalizacji zapisanej w pliku symulacji. Umożliwia to przenoszenie plików symulacji (wraz
z plikami programu) między komputerami. Jedynym warunkiem jest to, aby plik programu
umieszczony w katalogu wraz z plikiem symulacji miał taką samą nazwę jak plik programu
zapisany „bezpośrednio zapisanej” lokalizacji.
8.
Przykład
Poniżej zostanie zaprezentowany przykładowy sposób zasymulowania prostego programu.
Program ten będzie zliczał impulsy pochodzące od jednej z kontrolek pochodzącej z tablicy
przycisków monostabilnych i wyświetlał wynik na pojedynczym bloku wyświetlacza 7-
segmentowego. Poniżej widać listing wspomnianego programu. Należy przepisać go do
edytora kodu (Menu Narzędzia -> Edytor kodu). Następnie, z menu Asembler wybrać
pozycję Kompiluj i wczytaj do pamięci. Po kompilacji, na ekranie ukaże się zapytanie o
chęć przejrzenia pliku wydruku. Jest to jedyna możliwość weryfikacji poprawności
asemblacji i kompilacji, ponieważ symulator nie otrzymuje od kompilatora informacji o
poprawności przebiegu asemblacji i kompilacji. Jeśli wybierzemy „tak” otworzy się okno
notatnika z wczytanym plikiem wydruku, który można przeanalizować w celu weryfikacji
poprawności kodowania programu.
11
JMP
START
ORG
3h
PUSH ACC
MOV
A, R0
INC
A
MOV
B, #10d
DIV
AB
XCH
A, B
MOV
R0, A
POP
ACC
CALL DISPLAY
RETI
ORG
100h
START:
MOV
R0, #0
CALL DISPLAY
MOV
TCON, #00000001b
MOV
IE, #10000001b
LOOP: LJMP $
DISPLAY:
PUSH ACC
MOV
DPTR, #TABLE
MOV
A, R0
MOVC A, @a+DPTR
MOV
P0, A
POP
ACC
RET
TABLE:
DB
00000011B
DB
10011111B
DB
00100101B
DB
00001101B
DB
10011001B
DB
01001001B
DB
01000001B
DB
00011111B
DB
00000001B
DB
00001001B
END
Po wczytaniu skompilowanego programu do pamięci ROM, można zająć się kreowaniem
ś
rodowiska symulacji.
Program wykorzystuje przerwanie zewnętrzne INT0, skonfigurowane jako układ wyzwalany
zboczem opadającym na linii INT0. Wywołajmy okno z tablica przycisków (Menu Widok ->
układy peryferyjne zewnętrzne -> przyciski monostabilne). Użyjemy pierwszego
przycisku. W liście konfigurującej powiązanie pierwszego przycisku z danym
wyprowadzeniem wybieramy (lub wpisujemy za pomocą klawiatury) P3.2
Otwórzmy teraz okno wyświetlacza 7-segmentowego (Menu Widok -> układy peryferyjne
zewnętrzne -> wyświetlacz 7-segmentowy). Z pierwszej od góry listy wybierzmy Vcc.
Wybór ten oznacza, że anoda pierwszego od prawej stron modułu jest zasilona. Katody
połączymy z wyprowadzeniami portu P0, który jest używany przez przykładowy program do
komunikacji z wyświetlaczem. Katoda a przyłączona do P0.7, katoda b do P0.6, …, katoda g
do P0.1.Po uruchomieniu symulacji przyciskiem
na wyświetlaczu ukaże się cyfra zero.
Każde przyciśnięcie klawisza powiązanego z P3.2 spowoduje inkrementację wyświetlanej
liczby (modulo 10).