PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY
BAKALÁŘSKÁ PRÁCE
Simulátor mikroprocesorů architektury 8051
2014
Petr Hrbek
Anotace Simulátor mikroprocesorů architektury 8051 umožňuje uživateli zkompilovat program napsaný v jazyku symbolických adres. Tento program je dále interpretován. Program je možné vyhodnocovat po krocích nebo spustit animaci. Také je možnost simulovat mikroprocesor v plné rychlosti. Vnitřní paměť a důležité registry jsou uživateli přehledně zobrazeny. Simulátor disponuje připojitelnými moduly pro LED, 7-segment a tlačítka.
Děkuji svému vedoucímu bakalářské práce RNDr. Arnoštu Večerkovi za rady a zápal pro věc.
Obsah 1. Úvod
8
2. Architektura mikroprocesorů řady 2.1. Pouzdro mikroprocesoru . . . . . 2.2. Vstupně výstupní porty . . . . . . 2.3. Organizace paměti . . . . . . . . 2.3.1. Paměť programu . . . . . 2.3.2. Paměť dat . . . . . . . . . 2.4. Čítače a časovače . . . . . . . . . 2.4.1. Registry TCON a TMOD 2.4.2. Módy časovačů . . . . . . 2.5. Přerušení . . . . . . . . . . . . . 2.5.1. Registry IE a IP . . . . . 2.6. Instrukční sada . . . . . . . . . . 2.6.1. Přesunové instrukce . . . . 2.6.2. Aritmetické instrukce . . . 2.6.3. Logické instrukce . . . . . 2.6.4. Skokové instrukce . . . . .
8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
9 9 11 11 11 12 15 16 17 18 19 20 21 22 23 24
3. Uživatelská příručka 3.1. Systémové požadavky . . . . . . . 3.2. Instalace a spuštění . . . . . . . . 3.3. Hlavní okno . . . . . . . . . . . . 3.4. Menu . . . . . . . . . . . . . . . . 3.4.1. Hlavní menu . . . . . . . . 3.4.2. Panel nástrojů . . . . . . . 3.5. Připojitelné moduly . . . . . . . . 3.5.1. LED modul . . . . . . . . 3.5.2. 7-segment modul . . . . . 3.5.3. Modul tlačítek . . . . . . 3.6. Simulace programu . . . . . . . . 3.6.1. Načtení programu . . . . . 3.6.2. Krokování . . . . . . . . . 3.6.3. Animace a reálná simulace 3.6.4. Breakpointy . . . . . . . . 3.7. Výpis paměti dat . . . . . . . . . 3.8. Klávesové zkratky . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
25 25 25 25 26 26 26 27 27 27 28 28 29 29 30 30 31 32
4. Programátorská příručka 4.1. Použité technologie . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Třídy a metody . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33 33 33
4
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
4.2.1. Třída Chip8051 . . . . . . . . . . . . . . . . 4.2.2. Třída RAM . . . . . . . . . . . . . . . . . . 4.2.3. Třída Pins . . . . . . . . . . . . . . . . . . . 4.2.4. Třída Instructions . . . . . . . . . . . . . . . 4.2.5. Interface Instruction . . . . . . . . . . . . . 4.2.6. Třída File . . . . . . . . . . . . . . . . . . . 4.2.7. Třída Compiler . . . . . . . . . . . . . . . . 4.2.8. Interface Translate . . . . . . . . . . . . . . 4.2.9. Třída Timer . . . . . . . . . . . . . . . . . . 4.2.10. Třída Interrupt . . . . . . . . . . . . . . . . 4.2.11. Třída MainWindow . . . . . . . . . . . . . . 4.2.12. Třída InsWidget . . . . . . . . . . . . . . . 4.2.13. Třída PinWidget . . . . . . . . . . . . . . . 4.2.14. Třída ByteLabel . . . . . . . . . . . . . . . 4.2.15. Třídy SumWidget, RamWidget a SfrWidget 4.2.16. Třídy LedModule a SegModule . . . . . . . 4.2.17. Třída ButtonModule . . . . . . . . . . . . . 4.3. Sestavení aplikace . . . . . . . . . . . . . . . . . . . 4.3.1. Příprava a kompilace . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
35 35 36 36 36 37 37 37 37 38 38 38 39 39 39 39 39 40 40
Závěr
41
Reference
42
A. Obsah přiloženého CD/DVD
43
5
Seznam obrázků 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Blokové schéma 8051 . . . . . . . . . . . . . Pouzdro 8051 . . . . . . . . . . . . . . . . . Vnější paměť . . . . . . . . . . . . . . . . . Organizace paměti dat . . . . . . . . . . . . Organizace paměti RAM . . . . . . . . . . . Organizace speciálních funkčních registrů . . Vnitřní provedení čítače/časovače . . . . . . Registr TCON . . . . . . . . . . . . . . . . . Registr TMOD . . . . . . . . . . . . . . . . Znázornění struktury přerušení . . . . . . . Registr IE . . . . . . . . . . . . . . . . . . . Registr IP . . . . . . . . . . . . . . . . . . . Hlavní okno simulátoru 8051 . . . . . . . . . LED modul . . . . . . . . . . . . . . . . . . 7-segment modul . . . . . . . . . . . . . . . Modul tlačítek . . . . . . . . . . . . . . . . . Seznam instrukcí a ovládací prvky simulace Zobrazení paměti RAM . . . . . . . . . . . . Diagram tříd . . . . . . . . . . . . . . . . .
6
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
9 9 11 12 14 14 15 16 16 18 19 19 25 27 28 28 29 31 34
Seznam tabulek 1. 2. 3. 4. 5. 6.
Módy čítače/časovače . . Adresy skoků podle typu Přesunové instrukce . . . Aritmetické instrukce . . Logické instrukce . . . . Skokové instrukce . . . .
. . . . . . přerušení . . . . . . . . . . . . . . . . . . . . . . . .
7
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
17 18 21 22 23 24
1.
Úvod
Mikroprocesor 8051 byl vyvinut v 80. letech 20. století společností Intel pro použití v embedded systémech (bankomaty, kalkulačky, semafory...). Jedná se o jednočipový osmibitový mikroprocesor Harvardské architektury V dnešní době existuje spousta odnoží původního 8051 mikroprocesoru, které mají stejnou instrukční sadu a dokáží zpracovat stejný kód. Využití tohoto mikroprocesoru je velice pestré, od USB flash disků přes klávesnice až po pračky či mikrovlnné trouby. Díky malé spotřebě a dostačující rychlosti se dochoval do dnes. Tento simulátor vznikl za účelem testování jednoduchých programů. Jelikož programovací zařízení a mikroprocesory jsou drahé a někdy i těžce dostupné, je zapotřebí kód odladit jiným způsobem. Simulátor mikroprocesorů architektury 8051 umožňuje uživateli interpretovat instrukce mikroprocesoru na desktopovém počítači. Kód vstupního programu je v jazyce symbolických adres, assembleru. Tento kód je zkontrolován a přeložen do strojového kódu. Uživatel má možnost vyhodnocovat program krok po kroku a sledovat stav vnitřní paměti RAM, speciálních registrů a vstupně/výstupních portů. Dále je možné si výstupní porty zobrazit na virtuálním modulu LED nebo 7-segment. Simulátor se zaměřuje na obecné jádro 8051 s čtyřmi vstupně-výstupními porty, 256kB vnitřní paměti RAM a dvěma časovači.
8
2.
Architektura mikroprocesorů řady 8051
Původní model mikroprocesoru 8051 obsahuje čtyři vstupně/výstupní porty (brány) P0-P3, dva 16-ti bitové čítače označované T0 a T1, paměť RAM o velikosti 128B, paměť programu o velikosti 4kB, řadič přerušení, sériový kanál, CPU a oscilátor.
Obrázek 1. Blokové schéma 8051
2.1.
Pouzdro mikroprocesoru
Mikroprocesor 8051 se vyrábí v mnoha provedeních. Nejčastější je 20-ti nebo 40-ti pinové (vývodové) pouzdro a další SMT varianty. Základní je pouzdro 40-ti pinové označované jako 40DIL, ostatní jsou od něj odvozeny, většinou se liší jen v počtu vstupně/výstupních portů.
Obrázek 2. Pouzdro 8051 • Pin 1-8 – Port 1 (P1) - čistě vstupně/výstupní port • Pin 9 – Reset (RST) - přivedením logické 1 na tento pin dojde k restartovaní mikroprocesoru a paměti RAM, program se začne vykonávat od první instrukce 9
• Pin 10-17 – Port 3 (P3) stejný jako P1, piny mají ale další funkce: – Pin 10 – RXD - vstup/výstup sériového kanálu – Pin 11 – TXD - hodinový signál sériového kanálu – Pin 12 – INT0 - externí přerušení 0 – Pin 13 – INT1 - externí přerušení 1 – Pin 14 – T0 - externí hodinový vstup časovače 0 – Pin 15 – T1 - externí hodinový vstup časovače 1 – Pin 16 – WR - zápis na externí RAM – Pin 17 – RD - čtení z externí paměti RAM • Pin 18-19 – X1, X2 - piny pro připojení krystalu, který určuje frekvenci oscilátoru, standardně 12MHz • Pin 20 – GND - zem (záporný pól napájení) • Pin 21-28 – Port 2 (P2) - vstupně/výstupní port, také slouží pro připojení externí programové paměti • Pin 29 – PSEN - je-li připojena externí paměť, je tento pin nastaven na logickou nulu při každém čtení z paměti • Pin 30 – ALE - při logické jedna na tomto pinu je P0 nastaven jako adresový výstup pro externí paměť, jinak jako datový výstup • Pin 31 – EA - při logické nula na tomto pinu jsou P2 a P0 použity pro přístup do externí paměti, bez ohledu na to zda-li je připojena, a vnitřní paměť programu je ignorována • Pin 32-39 – Port 0 (P0) - podobný P2, přepínán pomocí pinu ALE mezi adresovým(1) a datovým(0) výstupem • Pin 40 – Ucc - napájení +5V
10
2.2.
Vstupně výstupní porty
Mikroprocesor 8051 disponuje čtyřmi vstupně/výstupními porty P0-P3. Každý port lze použít pro vstup a výstup, některé však mají speciální funkce. P3 se používá pro komunikaci se sériovým kanálem, vnějšímu přerušení a vnějšímu hodinovému signálu pro čítače. P2 a P0 můžou být použity pro čtení a adresaci dat z externí paměti. Každému portu odpovídá speciální registr v paměti mikroprocesoru, změna v tomto registru se projeví na určitém portu. Pokud chceme používat port jako vstupní, je nutné do tohoto registru zapsat hodnotu 255.
2.3.
Organizace paměti
V základním provedení disponuje mikroprocesor 8051 pamětí programu o velikosti 4 095 bajtů a uživatelskou pamětí RAM o 128 bajtech. Většina verzí tohoto mikročipu má navíc 128 bajtů paměti RAM, která je dostupná přes nepřímé adresování. 2.3.1.
Paměť programu
Jak již bylo řečeno, vnitřní programová paměť je velká jen 4kB. Průměrná instrukce má velikost 1-2 bajty. Vnitřní paměť tedy dokáže uchovat 2000-4000 instrukcí. Mikroprocesor dokáže adresovat 216 bajtů (0-FFFFH). Máme tedy více jak 60 000 nevyužitých adres. Proto lze k mikroprocesoru připojit přes port P2 a P0 vnější programovou pamět o velikosti 64kB.
Obrázek 3. Vnější paměť Pokud je pin EA (31) nastaven na logickou jedna, je vnější paměť adresována od 0000H do FFFFH a vnitřní paměť je ignorována. Při logické nula na pinu EA je vnitřní paměť adresována od 0000H do 0FFFH a vnější paměť následuje od adresy 1000H.
11
2.3.2.
Paměť dat
Až na výjimky jsou všechny registry 8-mi bitové. Stejně tak má adresa vnitřní paměti RAM 8 bitů. Máme tedy 256 adres (00H-FFH), což je 256 adresovatelných bajtů. Spodních 128 adres odkazuje na vnitřní paměť RAM a horních 128 adres je vyhrazeno pro speciální funkční registry. Zároveň adresy 80H-FFH odkazují do rozšířené paměti RAM s kterou lze manipulovat přes nepřímé adresování.
Obrázek 4. Organizace paměti dat Prvních 128 bajtů (00H-79H) je uživatelská paměť RAM (obrázek 5.). Obsahuje čtyři registrové banky po osmi registrech R0-R7 od 00H do 1FH. Dále obsahuje 16 po bitu adresovatelných registrů (20H-2FH) a 80 obyčejných registrů pro běžné použití (30H-7FH). První bit v těchto šestnácti registrech má adresu 00H a poslední bit 7FH. Tyto adresy na první pohled kolidují s pamětí RAM, záleží však která zda-li adresu zpracovává bitová nebo bajtová instrukce, např.: SETB 22H nastaví druhý bit ve čtvrtém registru na 1. Zbytek volných adres, 80H-FFH, odkazuje na registry speciálních funkcí (SFR, obrázek 6.). Tyto registry jsou spjaty s během mikroprocesoru. Každý osmý registr je bitově adresovatelný podobně jako bitové registry v uživatelské paměti. Obsahuje následující registry: • B (90H) – pomocný registr pro násobení a dělení • ACC (E0H) – akumulátor, registr pro aritmetické a jiné operace • PSW (D0H) – program status word, obsahuje flagy procesoru a nastavení aktivní registrové banky • IP (B8H) – interrupt priority, nastavuje prioritu různých přerušení • P3 (B0H) – registr spjatý s portem P3, změny v tomto registru se projeví na pinech mikroprocesoru
12
• IE (A8H) – interrupt enable, nastavuje vypnutí/zapnutí přerušení • P2 (A0H) – registr spjatý s portem P2, změny v tomto registru se projeví na pinech mikroprocesoru • SCON (98H) – serial port control, řízení sériového portu • SBUF (99H) – buffer pro sériový port • P1 (90H) – registr spjatý s portem P1, změny v tomto registru se projeví na pinech mikroprocesoru • TCON (88H) – nastavení časovačů, zapnutí, vypnutí a přetečení • TMOD (89H) – kontrolní registr časovačů, nastavení módu a zdroje hodin • TL0/1 a TH0/1 (9AH-9BH) – čítací registry, virtuálně tvoří TH0/1 a TL0/1 16bit registr T0/1 • P0 (80H) – registr spjatý s portem P0, změny v tomto registru se projeví na pinech mikroprocesoru • SP (81H) – stack pointer, obsahuje adresu na vrchol zásobníku v uživatelské paměti, výchozí hodnota 7 • DLP a DHP (82H-83H) – společně tvoří 16bit registr DPTR, který se používá na adresaci vnější paměti Adresování paměti – rozlišujeme dva druhy adresování, přímé a nepřímé. Přímé adresování umožňuje přístup do spodních 128 bajtů paměti RAM a do SFR. Adresy se zapisují přímo do kódu v numerické formě nebo pomocí jmen registrů, např.: MOV R0, 90h přesune obsah registru na adrese 90H (registr B z SFR) do registru R0 (00H v uživatelské paměti). Nepřímé adresování se provádí přes hodnotu registru R0 nebo R1, kde hodnota tohoto registru je adresa. Zapisuje se @R0 nebo @R1. Například MOV R0, #90H uloží do R0 hodnotu 90H, potom MOV @R0, #33H uloží na adresu obsaženou v R0 hodnotu 33H. Pokud je tato adresa v rozsahu 80H-FFH, v normálním případě adresa v SFR, potom je hodnota zapsána do rozšířené paměti RAM, nikoliv do SFR. Tímto způsobem je tedy možné adresovat horních 128 bajtů paměti RAM.
13
Obrázek 5. Organizace paměti RAM
Obrázek 6. Organizace speciálních funkčních registrů
14
2.4.
Čítače a časovače
Oscilátor mikroprocesoru využívá pro svou činnost krystal připojený na pinech 18 a 19. Generuje tedy pulzy o frekvenci použitého krystalu. Jelikož krystalové oscilátory jsou v daných podmínkách velice stabilní, dají se použít na měření času. Dvanáct pulzů oscilátoru odpovídá jednomu strojovému cyklu procesoru. Časovač je inkrementován s každým strojovým cyklem procesoru. Standardní frekvence používaná v mikroprocesorech 8051 je 12MHz. To znamená milion strojových cyklů za vteřinu, tedy jeden strojový cyklus trvá jednu mikrosekundu. Mikroprocesor 8051 obsahuje dva časovače, T0 a T1. Režim provozu těchto časovačů je řízen registrem TMOD, který určuje v jakém režimu fungují. Registr TCON slouží k zapnutí či vypnutí jednotlivých časovačů a detekci přetečení. Cykly jsou čítány do registrů TH0/1 a TL0/1. Společně tyto dva registry tvoří 16bit registr kde THx je horních osm bitů a TLx je dolních osm bitů.
Obrázek 7. Vnitřní provedení čítače/časovače
15
2.4.1.
Registry TCON a TMOD
TCON je osmibitový bitově adresovatelný registr, který se přímo stará o chod časovače a o nastavení vnějšího přerušení.
Obrázek 8. Registr TCON • TF0/1 – nastaví se automaticky na 1 při přetečení časovače • TR0/1 – zapnutí/vypnutí časovače • IE0/1 – nastaví se na 1 při vnějším přerušení • IT0/1 – aktivace vnějšího přerušení na sestupnou hranu(1) nebo log. nulu(0) TMOD je osmibitový registr. Určuje mód časovače a zdroj jeho hodinového signálu. Horní polovina registru nastavuje časovač T1, dolní polovina T0. Není bitově adresovatelný.
Obrázek 9. Registr TMOD • G0/1 – pokud je 1, časovač je řízen hodinovým signálem z INT0/1 • CT0/1 – určuje oscilátor, 0 - vnitřní, 1 - pin T0/1 • M0/1 – dva bity určují mód časovače
16
2.4.2.
Módy časovačů
Časovač vždy nastaven do jednoho ze čtyř módů. Mód který je použit určují bity 0 a 1 (pro časovač T0) nebo 4 a 5 (pro časovač T1) registru TMOD. Binární hodnota těchto bitů odpovídá číselnému označení módu. Mód M1 0 0 1 0 2 1 3 1
M0 0 1 0 1
Charakter 13 bitový 16 bitový 8 bitový 2x 8 bitový
Tabulka 1. Módy čítače/časovače
Mód 0 představuje třinácti bitový časovač/čítač. Pro čítání pulzů se používá celý registr TH0/1 a pět spodních bitů registru TL0/1. Po 32 pulzech je registr TL vynulován a registr TR inkrementován. Po načtení 8192 pulzů, tj při přetečení TH registru, je nastaven příslušný TF flag v registru TCON a čítání pokračuje on nuly. Mód 1 je nejpoužívanější časovač. TH a TL se spojí do šestnáctibitového registru. Po 256 pulzech TL přeteče a inkrementuje se TH. Po přetečení TH je nastaven příslušný TF flag a čítání pokračuje od nuly. Čítač tedy přeteče po 65 636 pulzech. Mód 2 pracuje jako osmibitový čítač. K čítání pulzů je použit TL registr. TH registr obsahuje hodnotu na kterou se automaticky nastaví TL při přetečení. TL přeteče po 256 pulzech a čítání pokračuje od hodnoty v TH. Tento mód je užitečný pokud potřebujeme stále počítat určitý počet pulzů. Mód 3 se chová jako dva osmibitové čítače, kde TL je řízen čítačem ke kterému patří a TH je řízen druhým čítačem, včetně flagů TF a TR. Jediné využití tohoto módu je jako generátor signálu pro sériový kanál.
17
2.5.
Přerušení
V základní architektuře 8051 je zavedeno 5 druhů přerušení, kdy při určité události mikroprocesor přestane vykonávat hlavní program a obslouží danou událost. Následně se vrátí na místo v hlavním programu kde skončil. Zdrojem přerušení může být sériový kanál (ES), vnější přerušení (EX0 a EX1) nebo přerušení časovače (ET0 a ET1). Vnější přerušení je vyvoláno pokud je na daný pin (INT0, INT1) přivedena logická nula, nebo reakcí na sestupnou hranu. Přerušení z časovače je vyvoláno při přetečení, tzn. při logické jedna ve flagu TF, který je automaticky vynulován při obsloužení. Jednotlivě i celkově lze přerušení zapnout/vypnout v registru IE. Když se projeví dvě přerušení ve stejnou chvíli nebo v době kdy se právě jedno přerušení obsluhuje, je dána přednost přerušení s vyšší prioritou. Priority jsou nastavené v registru IP. Logická jedna znamená nepřerušitelné. Nejvyšší prioritu má reset. Při přerušení je aktuální hodnota uložena na zásobník a program skočí na adresu podle typu přerušení: Zdroj přerušení IE0 Vnější přerušení 0 TF0 Časovač 0 IE1 Vnější přerušení 1 TF1 Časovač 1 RT/TI Sériový kanál
Adresa 3H BH 13H 1BH 23H
Tabulka 2. Adresy skoků podle typu přerušení
Obrázek 10. Znázornění struktury přerušení
18
2.5.1.
Registry IE a IP
Registr IE je osmibitový bitově adresovatelný registr. Slouží k zapnutí/vypnutí přerušení. Přerušení je zapnuto pokud je jeho bit nastaven na logickou jedna. Výchozí hodnota registru je 0.
Obrázek 11. Registr IE • EA – globální zapnutí přerušení • ES – přerušení sériového kanálu • ET0/1 – přerušení časovače T0/1 • EX0/1 – vnější přerušení INT0/1 Registr IP je osmibitový bitově adresovatelný registr. Určuje prioritu (důležitost) přerušení. Pokud je bit daného přerušení nastaven na logickou jedna, bude v případě konfliktu dvou a více přerušení obsloužen první. Pokud mají stejnou prioritu vyhodnotí se v pořadí: Vnější přerušení 0, přerušení časovače 0, vnější přerušení 1, přerušení časovače 1, sériový kanál.
Obrázek 12. Registr IP • PS – priorita přerušení sériového kanálu • PT0/1 – priorita přerušení časovače T0/1 • PX0/1 – priorita vnějšího přerušení INT0/1
19
2.6.
Instrukční sada
Instrukční sada 8051 obsahuje 255 instrukcí. Každá instrukce má předepsán počet bytů a počet cyklů. Počet bytů odpovídá struktuře instrukce. První byte je vždy identifikátor instrukce, další byty představují data nebo adresu. Počet cyklů značí, kolik strojových cyklů instrukce potřebuje k vykonání. Počet strojových cyklů instrukce je důležité znát pro výpočet časových prodlev. Instrukce se zapisují ve tvaru ’
, ’. Počet operandů závistí na instrukci. Kompletní instrukční sadu lze nalézt na internetových stránkách společnosti Atmel[4]. V tabulkách instrukcí jsou použity následující zkratky a symboly: • Rn - registr n z aktuální registrové banky • @Ri - nepřímá adresa uložena v registru R0 nebo R1 • dir - přímá adresa, např.: 90H, P0, TMOD • #data - hodnota mezi 0 a 255, např.: #0F2H, #10 • bit - adresa bitu, např.: P0.1, TF0, 22H • C - carry flag z registru PSW • adr16 - šestnáctibitová adresa • ← - přiřazení • ? : - ternární operátor, podmínka ? true : false • label - návěstí, musí se nacházet v rozmezí +127/-128 bytů od instrukce
20
2.6.1.
Přesunové instrukce Instrukce MOV @Ri,#data MOV @Ri,A MOV @Ri,dir MOV A,#data MOV A,@Ri MOV A,Rn MOV A,dir MOV C,bit MOV DPTR,#data MOV Rn,#data MOV Rn,A MOV Rn, dir MOV bit,C MOV dir,#data MOV dir,@Ri MOV dir,A MOV dir,Rn MOV dir_dst,dir_src MOVX @DPTR, A MOVX @Ri,A MOVX A,@DPTR MOVX A,@Ri XCH A,Rn XCH A,dir XCH A,@Ri XCHD A,@Ri PUSH dir POP dir
Operace (Ri) ← data (Ri) ← A (Ri) ← dir A ← data A ← (Ri) A ← (Rn) A ← dir C ← bit DPTR ← data Rn ← data Rn ← A Rn ← dir bit ← C dir ← data dir ← (Ri) dir ← A dir ← Rn dir_dst ← dir_src (DPTR) ← A (Ri) ← A A ← (DPTR) A ← (Ri) A ↔ Rn A ↔ dir A ↔ (Ri) A(b0 − b3 ) ↔ (Ri)(b0 − b3 ) (SP) ←dir, SP ← SP + 1 dir ← (SP), SP ← SP - 1
Tabulka 3. Přesunové instrukce
21
B 2 1 2 2 1 1 2 2 3 2 1 2 2 3 2 2 2 3 1 1 1 1 1 2 1 1 2 2
SC 1 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 2 2 2 2 2 2 1 1 1 1 2 2
2.6.2.
Aritmetické instrukce Instrukce INC @Ri INC A INC DPTR INC Rn INC dir ADD A,#data ADD A,@Ri ADD A,Rn ADD A,dir ADDC A,#data ADDC A,@Ri ADDC A,Rn ADDC A,dir DA A SUBB A,#data SUBB A,@Ri SUBB A,Rn SUBB A,dir DEC @Ri DEC A DEC Rn DEC dir MUL AB DIV AB
Operace (Ri) ← (Ri) + 1 A←A+1 DPTR ← DPTR + 1 Rn ← Rn + 1 dir ← dir + 1 A ← A + data A ← A + (Ri) A ← A + Rn A ← A + dir A ← A + C + data A ← A + C + (Ri) A ← A + C + Rn A ← A + C + dir A na desítkový tvar A ← A - C - data A ← A - C - (Ri) A ← A - C - Rn A ← A - C - dir (Ri) ← (Ri) - 1 A←A-1 Rn ← Rn - 1 dir ← dir - 1 AB ← A * B AB ← A : B
Tabulka 4. Aritmetické instrukce
22
B 1 1 1 1 2 2 1 1 2 2 1 1 2 1 2 1 1 2 1 1 1 2 2 2
SC 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2.6.3.
Logické instrukce Instrukce CLR A CLR C CLR bit SETB C SETB bit CPL C CPL A CPL bit ANL/ORL A,@Ri ANL/ORL A,Rn ANL/ORL A,dir ANL/ORL C,bit ANL/ORL C,/bit ANL/ORL dir,#data ANL/ORL dir, A XRL A,#data XRL A,@Ri XRL A,Rn XRL A,dir XRL dir,#data XRL dir, A RL A RLC A RR A RRC A SWAP A
Operace A←0 C←0 bit ← 0 C←1 bit ← 1 C ← !C A← A bit ← !bit A ← A and/or (Ri) A ← A and/or Rn A ← A and/or dir C ← C and/or bit C ← C and/or !bit dir ← dir and/or data dir ← dir and/or A A ← A xor data A ← A xor (Ri) A ← A xor Rn A ← A xor dir dir ← dir xor data dir ← dir xor A rotace A vlevo rotace A vlevo přes carry rotace A vpravo rotace A vpravo přes carry A(b0 − b3 ) ↔A(b4 − b7 )
Tabulka 5. Logické instrukce
23
B SC 1 1 1 1 2 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 2 2 2 2 3 2 2 1 2 1 1 1 1 1 2 1 3 2 2 1 1 1 1 1 1 1 1 1 1 1
2.6.4.
Skokové instrukce
Instrukce CALL adr16 RETI RET JMP adr16 SJMP label JMP @A+DPTR JZ label JNZ label JC label JNC label JB bit,label JNB bit,label JBC bit,label CJNE @Ri,#data,label CJNE Rn,#data,label CJNE A,#data,label CJNE A,dir,label DJNZ Rn,label DJNZ dir,label NOP
Operace (SP) ← PC, SP ← SP + 2, PC ← adr16 PC ← (SP), SP ← SP - 2 PC ← (SP), SP ← SP - 2 PC ← adr16 PC ← PC + label PC ← (A) + DPTR A = 0 ? PC ← PC + label A ̸= 0 ? PC ← PC + label C = 1 ? PC ← PC + label C = 0 ? PC ← PC + label bit = 1 ? PC ← PC + label bit = 0 ? PC ← PC + label bit = 1 ? PC ← PC + label, bit ← 0 (Ri) ̸= data ? PC ← PC + label, (Ri) < data ? C ← 1 : C ← 0 Rn ̸= data ? PC ← PC + label, Rn < data ? C ← 1 : C ← 0 A ̸= data ? PC ← PC + label, A < data ? C ← 1 : C ← 0 A ̸= dir ? PC ← PC + label, A < dir ? C ← 1 : C ← 0 Rn ← Rn - 1, Rn = 0 ? PC ← PC + label dir ← dir - 1, dir = 0 ? PC ← PC + label Tabulka 6. Skokové instrukce
24
B 3 1 1 3 2 1 2 2 2 2 3 3 3 3
SC 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3
2
3
2
3
2
2 3 1
2 2 1
3.
Uživatelská příručka
Tato sekce slouží jako návod pro obsluhu aplikace Simulátor 8051 mikroprocesorů.
3.1.
Systémové požadavky
• Operační systém: Windows Vista/7 nebo Linux • Operační paměť: 64MB a více • Procesor: 1.8GHz a více
3.2.
Instalace a spuštění
Instalaci spustíte instalačním souborem Setup.exe ve složce bin/ na instalačním CD. Simulátor 8051 mikročipů spustíte souborem Simulator8051.exe z adresáře určeného při instalaci.
3.3.
Hlavní okno
Hlavní okno programu shrnuje všechny důležité ovládací i informační prvky. Na nástrojové liště jsou umístěny nejdůležitější a nejpoužívanější funkce. V levé části okna se nachází simulovaný kód a tlačítka pro ovládání simulace. Znázornění mikroprocesoru uprostřed hlavního okna zobrazuje logické hodnoty na pinech mikroprocesoru, červená barva pro logickou jedna, modrá pro logickou nula. V pravé části okna je umístěn výpis nejdůležitějších registrů, paměti RAM a obsah speciálních funkčních registrů.
Obrázek 13. Hlavní okno simulátoru 8051
25
3.4. 3.4.1.
Menu Hlavní menu
Hlavní menu obsahuje všechny ovládací prvky simulátoru. Struktura hlavního menu je následující: • Soubor – Otevřít - zobrazí dialogové okno pro vybrání souboru – Zobrazit log - zobrazí okno se záznamem kompilace – Ukončit - ukončí simulátor • Simulace – Run - spustí simulaci – Stop - zastaví simulaci – Step - vykoná jednu instrukci programu – Step call - jako step, ale pokud je instrukce call vykoná celé volání funkce na pozadí a pokračuje následující instrukcí – Reset - vymaže RAM a program se vrátí na první instrukci • Moduly – LED Modul - otevře nové okno LED modulu – 7-Seg Modul - otevře nové okno 7-segment modulu – Tlačítka - otevře nové okno modulu tlačítek • Nápověda – Instrukční sada - zobrazí okno s instrukční sadou 8051 – Nápověda - zobrazí okno s uživatelskou příručkou – O Programu - zobrazí informace o programu 3.4.2.
Panel nástrojů
Na panelu nástrojů jsou umístěny často používané prvky z hlavního menu pro rychlý přístup. Prvky umístěné na panelu z leva jsou: • Otevřít - zobrazí dialogové okno pro vybrání souboru • LED Modul - zobrazí nové okno LED modulu • 7-Seg Modul - zobrazí nové okno 7-segment modulu 26
• Tlačítka - zobrazí nové okno modulu tlačítek • Reset - uvede RAM do výchozího nastavení, program skočí na první instrukci
3.5.
Připojitelné moduly
Simulátor disponuje virtuálními moduly, které lze připojit na libovolný port mikroprocesoru. Modul pak zobrazuje nebo řídí aktivitu na daném portu. 3.5.1.
LED modul
Základní modul obsahující osm LED. Nejpravější LED zobrazuje bit 0, nejlevější bit 7. V pravé části modulu lze nastavit port, na který má být modul připojen (P0-P3) a nastavení typu modulu. Pokud je typ nastaven na SA (společná anoda), modul reaguje na logickou nulu na připojeném portu, jinak na logickou jedna.
Obrázek 14. LED modul
3.5.2.
7-segment modul
Pomocí tohoto modulu je možné zobrazovat čísla, ale i jiné znaky. Modul lze, stejně jako LED modul, připojit na libovolný port mikroprocesoru a nastavit typ. Horní segment zobrazuje bit 0, další bity jsou vzestupně přiřazeny segmentům po směru hodinových ručiček. Prostřední segment odpovídá bitu 6 a tečka bitu 7. Zatrhnutím boxu ztmavit nastaví 7-segmentu černé pozadí. Je možné přepnout modul do režimu BCD. V tomto režimu bude modul číselně zobrazovat hodnotu portu na který je připojen v rozmezí 0-9.
27
Obrázek 15. 7-segment modul 3.5.3.
Modul tlačítek
Tento modul obsahuje osm tlačítek, které jsou virtuálně připojeny na zem. Pokud je port, na který je tento modul připojen, ve vstupním režimu (tzn. má na výstupech logickou jedna) je možné stisknutím tlačítka vynutit na daném pinu daného portu logickou nula. Tlačítko lze přepnout do sepnutého stavu zatrhnutím boxu pod tlačítkem. Číslo vedle tohoto boxu určuje, který pin tlačítko ovládá.
Obrázek 16. Modul tlačítek
3.6.
Simulace programu
Simulátor 8051 mikroprocesorů interpretuje uživateli instrukce napsané v jazyku symbolických adres (assembler). Uživatel načte soubor s těmito instrukcemi. Ty jsou pak přeloženy do strojového kódu a jsou postupně vyhodnocovány. O simulaci se stará panel v pravé části hlavního okna.
28
Obrázek 17. Seznam instrukcí a ovládací prvky simulace 3.6.1.
Načtení programu
Pro otevření souboru s instrukcemi, které se mají simulovat, vyberte z hlavního menu v sekci Soubor položku Otevřít. Zobrazí se dialog pro výběr souboru. Preferované jsou souboru s příponou "asm", ale je možné otevřít jakýkoliv textový soubor. Při úspěšném načtení souboru se v levé části hlavního okna, obrázek 17., zobrazí načtené instrukce a mikroprocesor je resetován. Pokud při zpracování instrukcí došlo k chybě, zobrazí se okno s výpisem kompilátoru, ve kterém je řádek s chybou označen. Pro zjištění strojového kódu instrukce stačí najet kurzorem myši na danou instrukci. Instrukce, která se vyhodnotí v dalším kroku, je zvýrazněna modře. 3.6.2.
Krokování
Instrukce lze vyhodnocovat manuálně krok po kroku prvním a druhým tlačítkem z panelu instrukcí (obrázek 17.). Tlačítko "Step"vyhodnocuje instrukce stejným způsobem jako skutečný běh mikroprocesoru. Následuje veškeré skoky a funkce. Tlačítko "Step call"vyhodnotí volanou funkci na pozadí a a skočí na další instrukci hlavního programu. Po každém kroku je možné sledovat změnu hodnot v paměti dat mikroprocesoru.
29
3.6.3.
Animace a reálná simulace
Poslední čtyři ovládací prvky na panelu simulace (obrázek 17.) slouží k automatickému krokování programu. Tlačítko "Run"zapíná simulaci, tlačítko "Stop"vypíná simulaci. Zaškrtávací box vedle tlačítka Run určuje mód simulace. Zaškrtnutý box znamená, že se mají instrukce animovat. V tomto módu je ihned vidět změna paměti RAM po každé instrukci. Rychlost animace je kolem tří instrukcí za vteřinu, rychlost lze změnit posuvníkem i během animace. Odškrtnutý box uvádí simulátor do módu reálné simulace. V tomto módu simulátor vykonává přibližně milión instrukcí za sekundu. Obsah paměti RAM je obnoven až po zastavení simulace. 3.6.4.
Breakpointy
Dvojklikem na první sloupec v panelu lze k dané instrukci přidat/odebrat breakpoint (obrázek 17.). Breakpointů může být nastaveno více. Simulace se před vykonáním této instrukce automaticky zastaví.
30
3.7.
Výpis paměti dat
V pravé části hlavního okna je umístěn panel paměti RAM (obrázek 18.). Pomocí tlačítek umístěných v horní části panelu lze přepínat obsah zobrazení. Sekce "Sum"zahrnuje nejdůležitější registry z celé paměti RAM. Ve spodní části lze "zoomovat"na vybrané registry. Sekce "RAM", "SFR"a "ARAM"zobrazují výpis vnitřní paměti RAM, registrů speciálních funkcí a rozšířené paměti RAM. Tučně vyznačené číslo na začátku řádku určuje adresu v hexadecimálním formátu. Tabulka je řádkovaná po osmi bytech. Při najetí kurzorem myši na registr paměti se zobrazí nápověda s hodnotami registru v binární, decimální a hexadecimální formě. Registry, jejichž hodnota se při chodu programu změní, jsou zvýrazněny modře.
Obrázek 18. Zobrazení paměti RAM
31
3.8.
Klávesové zkratky
• Otevřít soubor - Ctr + O • Ukončit - Ctrl + Q • Run - F9 • Stop - F10 • Step - F8 • Step call - F7 • Reset - F4 • Nápověda - F1
32
4.
Programátorská příručka
V této sekci je popsána základní struktura aplikace Simulátor 8051, knihovny které aplikace využívá, základní třídy a metody.
4.1.
Použité technologie
Aplikace je napsána v jazyce C++, pod standardem gnu++11. K realizaci bylo využito Qt frameworku. Qt je velice rozšířená multiplatformní knihovna pro tvorbu GUI aplikací. Aplikace byla vyvíjena pod operačním systémem Gentoo Linux ve vývojovém prostředí Qt Creator 2.8.1.
4.2.
Třídy a metody
Jádro aplikace tvoří třída Chip8051, která obsahuje všechny třídy realizující bloky mikroprocesoru. Mikroprocesor se skáldá ze tříd RAM, symbolizující datovou paměť, dále třídy Instructions, která slouží jako hlavička seznamu pro interface Inscruction. Tento interface realizuje všech 255 instrukcí jako samostatné třídy. Každá třída pro instrukci implementuje tento interface a metodu eval, která simuluje vyhodnocení odpovídající instrukce mikroprocesoru. Pro simulaci tedy stačí postupně volat metodu eval pro prvky seznamu Instructions. Pro vytvoření seznamu instrukcí slouží třída Compiler, která projde předaný soubor a pomocí interface Translate přeloží instrukce. Z těchto přeložených instrukcí jsou následně vytvořeny třídy, které je implementují. Grafickou podobu aplikace zajišťuje třída MainWindow, která implementuje QMainWindow a zprostředkovává okno aplikace. V tomto okně jsou zobrazeny widgety SumWidget, RamWidget a PinWidget, které zobrazují stav paměti RAM mikroprocesoru. Třída InsWidget zobrazuje tabulku instrukcí a ovládací prvky pro simulaci instrukcí.
33
Obrázek 19. Diagram tříd
34
4.2.1.
Třída Chip8051
Tato třída spojuje jednotlivé třídy implementující funkční bloky mikroprocesoru 8051. Nad těmito bloky umožňuje vyhodnocovat jednotlivé instrukce. Metody: • void step() - vykoná jednu instrukci a posune ukazatel PC na další v pořadí • void run() - spustí opakovaně metodu step() v novém vlákně, animace instrukcí • void stop() - zastaví vlákno pokud běží, ukončí animaci • void setIns(Instructions*) - nastaví seznam instrukcí, který se má vykonávat • void enableAnimate(bool) - nastaví režim animace • void endOfCode() - zjistí zda existuje další instrukce, zastaví animaci • void reset() - uvede moduly do výchozího stavu a skočí na první instrukci 4.2.2.
Třída RAM
Implementuje paměť dat mikroprocesoru 8051. Obsahuje bytové pole představující paměť RAM a SFR a metody pro přístup k těmto datům. Metody: • void setByteAt(byte adress, byte value) - nastaví hodnotu bytu na adrese "adress"na value • byte getByteAt(byte adress) - vrátí hodnotu bytu na adrese "adress" • void setBitAt(byte adress, bool val) - nastaví daný bit paměti na hodnotu val • bool getBitAt(byte adress) - vrátí bit na adrese "adress" • byte getCurrentRnVal(byte n) - vrátí hodnotu registru Rn z aktivní registrové banky • void setCurrentRnVal(byte n, byte val) - nastaví hodnotu Rn na val v aktivní registrové bance • byte getIndirectRnAdressVal(byte n) - vrátí hodnotu bytu, jehož adresa je uložena v Rn
35
• void setIndirectRnAdressVal(byte n, byte val) - nastaví byte, jehož adresa je uložena v Rn, na hodnotu val • void addToPC(unsigned short i) - inkrementuje registr PC o hodnotu i • void setPC(unsigned short i) - nastaví registr PC na hodnotu i • unsigned short getPC() - vrátí hodnotu registru PC • void reset() - vynuluje bytové pole 4.2.3.
Třída Pins
Obsahuje boolean pole o velikosti 40 bytů symbolizující piny pouzdra mikroprocesoru 8051. Toto pole je obnoveno pokud je změněn některý z registrů vstupně/výstupních portů nebo při změně vnější vyvolané tlačítkem. Metody: • bool* getPins() - vrátí pole představující piny • void reloadPins(byte addr) - obnoví piny pokud addr odpovídá adrese některého z portů 4.2.4.
Třída Instructions
Implementuje hlavičku seznamu pro instrukce. Dále obsahuje seznam návěstí použitých v těchto instrukcích a "továrnu"pro inicializaci tříd implementujících interface Instruction. Instrukce jsou uloženy v poli o pevné velikosti 65536 (maximální počet bytů, který dokáže adresovat mikroprocesor 8051). Metody: • bool add(byte id, byte arg1, byte arg2) - vytvoří třídu podle id, nastaví jí argumenty a přidá si ji do seznamu • Instruction** getList() - vrátí pole obsahující instance inteface Instruction • ushort getTopPC() - vrátí adresu poslední instrukce v seznamu 4.2.5.
Interface Instruction
Představuje předlohu pro třídy implementující jednotlivé instrukce instrukční sady 8051. Obsahuje jedinou důležitou metodu - eval, která je implementována každou třídou představující instrukci. Vyhodnocením této metody se simuluje činnost mikroprocesoru 8051. 36
4.2.6.
Třída File
Stará se o načtení souboru, jeho zpracování preprocesorem a zkompilování instrukcí. Ty jsou pak jako instance třídy Instructions předány třídě Chip8051. Preprocesor a kompilátor jsou implementovány v pomocné třídě Compiler. Metody: • File(QString fName, QWidget *parent=0) - konstruktor, uloží předanou cestu k souboru • bool open() - otevře soubor předaný v konstruktoru a načte jeho obsah • bool compile() - zkompiluje obsah souboru předaného v konstruktoru • void showCompileLog() - zobrazí dialog s logem kompilace 4.2.7.
Třída Compiler
Implementuje preprocesor a kompilátor jazyku symbolických adres. Výsledkem kompilace je seznam tříd implementující instrukce. Využívá pomocných tříd implementujících interface Translate. Metody: • void preprocess(File *f, int depth=4) - projde předaný soubor, odstraní z něj komentáře, nadbytečné bílé znaky a doplní include soubory • Instructions *Compile(File *f) - přeloží instrukce v souboru na strojový kód, vytvoří z nich třídy, doplní adresy návěstí a detekuje chyby 4.2.8.
Interface Translate
Obsahuje jedinou důležitou metodu - translate, která je dále implementována třídami představující kompilátor pro danou sadu instrukcí (MOV, ADD, XRL...). Tato metoda vrací pole intů. V tomto poli jsou uloženy jednotlivé bajty strojového kódu. 4.2.9.
Třída Timer
Implementuje časovač/čítač mikroprocesoru 8051.
37
Metody: • void pulse(byte p) - zjistí aktivní časovače a jejich módy, zavolá pak metodu daného módu pro daný časovač • void modeZero(byte timer, byte count) - inkrementuje časovač "timer"o hodnotu "count"podle pravidel módu 0 • void modeOne(byte timer, byte count) - inkrementuje časovač "timer"o hodnotu "count"podle pravidel módu 1 • void modeTwo(byte timer, byte count) - inkrementuje časovač "timer"o hodnotu "count"podle pravidel módu 2 • void modeThree(byte timer, byte count) - inkrementuje časovač "timer"o hodnotu "count"podle pravidel módu 3 4.2.10.
Třída Interrupt
Implementuje řadič přerušení mikroprocesoru 8051. Metody: • void CheckInterrupts() - zkontroluje, došlo-li k přerušeni, pokud ano uloží pozici aktuální instrukce a skočí na obslužnou rutinu 4.2.11.
Třída MainWindow
Implementace třídy QMainWindow z knihovny Qt. Tato třída představuje hlavní okno aplikace. V tomto okně se zobrazují další widgety. Tato třída nemá žádné speciální metody. 4.2.12.
Třída InsWidget
Implementace třídy QWidget z knihovny Qt. Widget se skládá z čtyř tlačítek, checkboxu, posuvníku a tabulky. V tabulce je zobrazen stav vykonávání simulace. Tlačítka slouží k obsluze této simulace. Tlačítka nemají metody, jsou propojeny signály a sloty přímo s metodami třídy Chip8051. Metody: • void initializeTable(Instructions *ins) - načte do tabulky jednotlivé instrukce • void rowChanged(ushort pc) - vyznačí instrukcí v tabulce • void toggleBrakpoint(int r, int c) - nastaví/zruší breakpoint 38
4.2.13.
Třída PinWidget
Implementace třídy QWidget z knihovny Qt. Widget obsahuje statický obrázek pouzdra mikroprocesoru a 40x QLabel symbolizující pin. Tyto piny jsou obarvovány podle hodnot v instanci třídy Pins. Metody: • void pinChanged() - obnoví barvy pinů 4.2.14.
Třída ByteLabel
Implementace třídy QLabel z knihovny Qt. Zobrazuje hodnotu bytu z instance třídy RAM. • ByteLabel(QWidget *parent, RAM *r, byte addr, QString name, byte display = 5, byte baseVal = 0) - konstruktor. Zobrazí hodnotu z "r"na adrese "addr"s jmenovkou "name". Hodnota display určí v jakých formátech se má byte vypsat, 1 pro binární, 2 pro decimální a 4 pro hexadecimální. • void ramChanged(byte adr) - obnoví zobrazenou hodnotu 4.2.15.
Třídy SumWidget, RamWidget a SfrWidget
Třídy implementují QWidget z knihovny Qt. Obsahují instance třídy ByteLabel, které seskupují do prezentovatelné podoby. 4.2.16.
Třídy LedModule a SegModule
Dědí z třídy Module a implementují QDialog z knohovny Qt. Zobrazují graficky informace z instance třídy Pins jako sérii LED nebo 7-segment. Obsahují dva QComboBox pro nastavení typu PN přechodu a výstupního portu který zobrazuje. • void pinChanged() - obnoví vykreslení modulu • void typeChanged(int) - pokud je předaná hodnota jedna, neguje zobrazení • void portChanged(int) - změní zdroj dat 4.2.17.
Třída ButtonModule
Podobně jako třídy LedModule a SegModule. Nečte však data z instance třídy Pins ale nastavuje je. Modul se skládá z osmi tlačítek, které při stisknutí nastaví do příslušného bytu v poli třídy Pins hodnotu false.
39
4.3.
Sestavení aplikace
Pro úspěšné sestavení aplikace je potřeba mít nainstalovaný kompilátor g++ verze 4.8.2 nebo vyšší a knihovny Qt verze 4.8.6. Pro windows je možné použít kompilátor MinGW g++ 4.8.2 a vyšší. 4.3.1.
Příprava a kompilace
Pro sestavení projektu z vývojového prostředí Qt Creator otevřete soubor Simulator8051.pro a po nastavení kompilátoru spusťte funkci Build all z menu Build. Projekt zle sestavit bez vývojového prostředí z příkazové řádky ve dvou krocích: 1. Vytvoření makefile: OS Linux: qmake Simulator8051.pro -r -spec linux-g++ Windows: qmake.exe „Simulator8051.pro“ -r -spec win32-msvc2012 2. Kompilace a sestavení: OS Linux: „make“ Windows: C:\MinGW32\bin\mingw32-make -f Makefile
40
Závěr Výsledkem práce je jednoduše ovladatelný simulátor mikroprocesorů architektury 8051. Aplikace umí přeložit jednoduchý jazyk symbolických adres do strojového kódu a tento kód následně interpretovat. Simulaci je možné provádět manuálně krok po kroku, animovat rychlostí až 10 instrukcí za vteřinu nebo simulovat skutečný běh mikroprocesoru v plné rychlosti. Hlavní okno aplikace prezentuje následující údaje: • Instrukce zdrojového programu • Právě vykonávanou instrukci • Obsah paměti RAM • Hodnoty speciálních funkčních registrů • Stav portů mikroprocesoru • Stav pinů mikroprocesoru K portům mikroprocesoru je možné připojit tři základní moduly. Modul LED, modul 7-segment a modul tlačítek. Dále aplikace disponuje nápovědou a tabulkou instrukční sady 8051. V budoucnu plánuji přidat moduly pro externí generátor, klávesnici a multiplexor. Dále bych chtěl přidat editor pro snadnou editaci a kompilaci kódu přímo v simulátoru a export zkompilovaného kódu do formátu pro programátory mikroprocesorů, například Intel HEX.
41
Reference [1] Skalický, Petr. Mikroprocesory řady 8051. BEN 2012. [2] Fronc, Vojtěch; Klúčik, Ján. Mikrokontroléry Atmel s jádrem 8051. BEN, 2011. [3] Verle, Milan Architecture and Programing of 8051 Microcontrollers. Elektronická publikace. [4] Atmel 8051 Microcontroller Instruction Set. Elektronická publikace.
42
A.
Obsah přiloženého CD/DVD
bin/ Instalátor Setup.exe programu a další program Simulator8051.exe spustitelné přímo z CD a knihovny potřebné k jeho spuštění. doc/ Dokumentace práce ve formátu PDF a zdrojový text dokumentace ve formátu LATEX. src/ Kompletní zdrojové texty programu Simulátor 8051. readme.txt Instrukce pro instalaci a spuštění programu Simulátor 8051, včetně požadavků pro jeho provoz. Navíc CD obsahuje: data/ Testovací data použitá v práci a pro potřeby obhajoby práce.
43