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).