Mikrořadiče. Ing. Jaroslav Bernkopf

Podobné dokumenty
Popis instrukční sady - procesory PIC Aritmetické a logické operace

Monolitické mikropoèítaèe II

MIKROKONTROLERY PIC16F84

Microchip. PICmicro Microcontrollers


Organizace pam ového prostoru 1

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus


Programování PICAXE18M2 v Assembleru

Mikroadie. Ing. Jaroslav Bernkopf

Mikrokontroléry. Doplňující text pro POS K. D. 2001

Pohled do nitra mikroprocesoru Josef Horálek

Architektura jednočipových mikropočítačů PIC 16F84 a PIC 16F877. Tato prezentace vznikla jako součást řešení projektu FRVŠ 2008/566.

MSP 430F1611. Jiří Kašpar. Charakteristika

PIC krok za krokem. Komentované příklady programů pro PIC

Architektury počítačů a procesorů

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Princip funkce počítače

Jihočeská univerzita v Českých Budějovicích

Komunikace modulu s procesorem SPI protokol

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Jednočipové mikropočítače (mikrokontroléry)

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Přednáška A3B38MMP. Bloky mikropočítače vestavné aplikace, dohlížecí obvody. 2015, kat. měření, ČVUT - FEL, Praha J. Fischer

Podrobný obsah CHARAKTERISTIKA A POROVNÁNÍ ØADY PIC16F87X A PIC16F87XA TYPY POUZDER A PØIØAZENÍ VÝVODÙ PIC16F87X TYPY POUZDER A PØIØAZENÍ

Nejčastěji pokládané dotazy

SEKVENČNÍ LOGICKÉ OBVODY

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Jak do počítače. aneb. Co je vlastně uvnitř

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Struktura a architektura počítačů (BI-SAP) 7

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Obr. 1 - Hlavní okno prostředí MPLAB


Technické prostředky počítačové techniky

Osmibitové mikrořadiče Microchip PIC16F887

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ. MEIII Paměti konstant

Principy komunikace s adaptéry periferních zařízení (PZ)

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

Strojový kód. Instrukce počítače

Paměti Flash. Paměti Flash. Základní charakteristiky

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Profilová část maturitní zkoušky 2015/2016

Architektury CISC a RISC, uplatnění v personálních počítačích

INFORMAČNÍ LED DISPLEJ

1. MIKROPROCESOR ATMEGA A/D PŘEVODNÍK MÓDY PŘEVODNÍKU Single Conversion Mode Auto Triggering Start...

Paměti. Paměť je zařízení, které slouží k ukládání programů a dat, s nimiž počítač pracuje

Procesor z pohledu programátora

Logické funkce a obvody, zobrazení výstupů

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Paměti a jejich organizace

Řízení IO přenosů DMA řadičem

JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH PEDAGOGICKÁ FAKULTA

Mikrokontrolery. Úvod do obvodů Atmega 328 a PIC16F88

Úvod do mobilní robotiky AIL028

Paměť počítače. 0 (neprochází proud) 1 (prochází proud)

Struktura a architektura počítačů (BI-SAP) 10

Úvod do mobilní robotiky NAIL028

ASYNCHRONNÍ ČÍTAČE Použité zdroje:

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Systém řízení sběrnice

Čísla, reprezentace, zjednodušené výpočty

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

RISC a CISC architektura

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Systém přerušení. České vysoké učení technické Fakulta elektrotechnická

Architektura počítačů

IMPLEMENTACE JÁDRA 8-BITOVÉHO MIKROKONTROLÉRU DO FPGA A ASIC

Cílem kapitoly je seznámit studenta s pamětmi. Jejich minulostí, současností a hlavnímu parametry.

MIKROKONTROLÉRY. Jednočipový počítač nebo také angl. Microcontroller (Mikrokontrolér, MCU, µc)

PROCESOR. Typy procesorů

Profilová část maturitní zkoušky 2014/2015

Programovací jazyk Pascal

Dělení pamětí Volatilní paměti Nevolatilní paměti. Miroslav Flídr Počítačové systémy LS /11- Západočeská univerzita v Plzni

Architekura mikroprocesoru AVR ATMega ( Pokročilé architektury počítačů )

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

CH_SW_71 - V1.0. Program vytváří z obvodu PIC16C71 / PIC16C711 přepínač vstupů pro NF zesilovač.

Návod k obsluze trenažéru

Použití programovatelného čítače 8253

Monolitické mikropočítače III

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Způsoby realizace této funkce:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 2. díl

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ

Integrovaná střední škola, Sokolnice 496

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

8. Laboratoř: Aritmetika a řídicí struktury programu

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

Základní uspořádání pamětí MCU

Čísla, reprezentace, zjednodušené výpočty

Osmibitové mikrořadiče Microchip PIC16F1937

1. Programování PLC. Programovatelné automaty II - 1 -

Pohled do nitra mikroprocesoru

ČÍSELNÉ SOUSTAVY PŘEVODY

Transkript:

Mikrořadiče Ing. Jaroslav Bernkopf 18. září 2016

OBSAH 1. Úvod... 4 2. Architektura počítačů... 5 2.1 Architektura Von Neumannova... 5 2.2 Architektura Harvardská... 6 2.3 Soubory instrukcí... 6 2.3.1 CISC... 6 2.3.2 RISC... 7 3. Mikrořadiče 16F84 a 16F883... 8 4. Blokové schéma... 10 4.1 Popis bloků...10 4.1.1 ALU Arithmetic and Logic Unit... 10 4.1.2 W register... 10 4.1.3 RAM File Registers... 10 4.1.4 EEPROM... 10 4.1.5 Flash Program Memory... 10 4.1.6 Program Counter... 10 4.1.7 Instruction Decode and Control... 11 4.1.8 Timing Generation... 11 4.1.9 Timers... 11 4.1.10 Timer0 Timer2... 12 4.2 Rozložení vývodů...14 4.3 Popis vývodů...14 4.3.1 Řídicí vývody... 14 4.3.2 Skupina RA... 14 4.3.3 Skupina RB... 14 4.3.4 Skupina RC... 15 4.3.5 Napájecí vývody... 15 5. Organizace datové paměti RAM 16F883... 17 5.1 Rozdělení paměti RAM...17 5.1.1 Rozdělení paměti RAM podle účelu a použití... 19 5.2 Význam některých registrů speciálních funkcí...20 6. Instrukční soubor... 25 6.1 Definice...25 6.2 Syntaxe asembleru...26 6.2.1 Malá, velká písmena... 26 6.2.2 Číselné formáty... 26 6.2.3 Komentáře... 27 2

6.2.4 Zkratky... 27 6.3 Instrukce aritmetických a logických operací...29 6.3.1 Operace s konstantou... 29 6.3.2 Operace s registrem RAM... 29 6.4 Instrukce přesunů...31 6.5 Instrukce skoků...32 6.6 Instrukce nulování a nastavení...33 6.7 Instrukce pro podprogramy a přerušení...33 6.8 Zvláštní instrukce...34 7. Úlohy... 36 7.1 Drát...36 3

1. Úvod Mikrořadič je integrovaný obvod, který na jednom čipu obsahuje všechny podstatné části počítače: aritmeticko logická jednotka paměť ROM paměť RAM vstupy / výstupy Mikrořadič obvykle obsahuje i další části, např. časovače hlídací časovač (watchdog) generátor taktovacího signálu Program mikrořadiče může být uložen v různých variantách paměti ROM: ROM EPROM EEPROM Flash ROM Paměť ROM se hodí tam, kde se budou vyrábět velká množství řadičů vybavených stejným programem. Její obsah je vytvořen už při výrobě a je neměnný. EPROM vyžaduje speciální vybavení pro mazání starého obsahu ultrafialovým světlem, a programátor, kterým se naprogramuje nový obsah. EEPROM se hodí pro menší kapacity a nepříliš časté přepisování. Je pomalá a počet přepisovacích cyklů je omezený. Flash ROM se hodí pro velké kapacity. Je rychlejší než EEPROM a umožňuje větší počet přepisovacích cyklů. 4

2. Architektura počítačů 2.1 Architektura Von Neumannova Počítač s Von Neumannovou architekturou má jen jedinou sběrnici, která je společná jak paměti pro data, tak paměti pro program. Sběrnice je obousměrná, tj. umožňuje čtení z paměti i zápis do ní. Program i data dokonce mohou sídlit v jediné společné paměti. Takto jsou uspořádány např. osobní počítače. Obrázek 1: Von Neumannova architektura počítače 5

2.2 Architektura Harvardská Počítač s Harvardskou architekturou má samostatné paměti jak pro program, tak pro data. Každá z těchto pamětí má samostatnou sběrnici. Sběrnice pro program je jen jednosměrná, tj. umožňuje jen čtení z paměti, ale ne zápis do ní. Tak jsou uspořádány nejznámější jednočipové mikropočítače (např. 8051) a mikrořadiče (např. 16F883). Obrázek 2: Harvardská architektura počítače Von Neumannova Harvardská Umístění instrukcí a dat V jediné společné paměti Ve dvou oddělených pamětech Přepsání programu jeho vlastní Je možné Není možné činností Současné vyzvednutí instrukce a Není možné Je možné dat Rychlost Menší Větší Složitost, počet propojení Menší Větší Tabulka 1: Porovnání vlastností Von Neumannovy a Harvardské architektury 2.3 Soubory instrukcí Procesory a řadiče jsou řízeny programem, který se skládá z jednotlivých pokynů instrukcí. Při tvorbě programu programátor používá instrukce k naprogramování činností, které má přístroj provádět. 2.3.1 CISC CISC = Complex Instruction Set Computer počítač se složitým instrukčním souborem. Procesor disponuje mnoha desítkami instrukcí. Programátor musí tyto instrukce zvládnout, musí se je naučit, což je náročné. Na druhou stranu jsou ale mnohé instrukce velmi výkonné, takže jedna taková instrukce nahradí několik jednodušších. Instrukce bývají specializované tak, že některé pracují jen s určitými registry 1, jiné zase s jinými registry. 1 Buňky paměti RAM uvnitř procesoru se často nazývají registry. 6

Při programování ve vyšších jazycích (např. C, Pascal) nejsou výkonné instrukce CISC příliš využity, protože překladač z vyššího jazyka do strojového kódu stejně pro složitější operace nepoužije výkonné, ale pomalé instrukce CISC, ale rozepíše tyto operace pomocí rychlých jednoduchých instrukcí. Procesor je složitý a má velkou spotřebu. Kvůli složitosti je obtížné dosáhnout velké rychlosti zpracování instrukcí. Procesory CISC obvykle používají Von Neumannovu architekturu. Ta procesoru umožňuje zapisovat jak do paměti dat, tak do paměti programu. To lze využít např. k tomu, aby program svojí činností změnil sám sebe. 2.3.2 RISC RISC = Reduced Instruction Set Computer počítač s omezeným instrukčním souborem. Procesor disponuje malým souborem instrukcí. Programátor se je snadno naučí, proto je snadné s takovým procesorem začít pracovat. Soubor instrukcí je ortogonální (nebo také symetrický). To znamená, že je možné většinu instrukcí provádět na kterémkoliv registru. Instrukce nevyžadují žádné speciální podmínky, výjimky, omezení, nemají žádné vedlejší vlivy. Proto je práce s nimi snadná a nezáludná. Programy vzniklé ve vyšších programovacích jazycích (např. C) jsou s RISC rychlé a účinné. Procesor je jednoduchý. Čip má malou plochu, málo vývodů, proto je levný. Spotřeba je malá. Instrukce jsou sice méně chytré, ale zato se vykonávají rychle. Procesory RISC obvykle používají Harvardskou architekturu. Ta umožňuje současný přístup k programu i k datům a současné vykonávání některých operací (overlapping překrývání). 7

3. Mikrořadiče 16F84 a 16F883 PIC 16F84 a 16F883 jsou typickými představiteli jednoduchých, ale výkonných mikrořadičů. Základní vlastnosti: Parametr 16F84 16F883 Technologie CMOS CMOS Počet vývodů 18 28 Počet instrukcí 35 35 Počet cyklů na instrukci (všechny kromě větvení) 1 1 Počet cyklů na instrukce větvení 2 2 Šířka instrukcí 14 bitů 14 Šířka datové sběrnice 8 bitů 8 Kapacita paměti programu [kb] 1,75 7 Kapacita paměti programu [kslov] 1 4 Kapacita paměti RAM [B] 68 256 Kapacita paměti EEPROM [B] 64 256 Počet speciálních funkčních registrů (SFR) 15 Víc, přibyly funkce Počet vstupů / výstupů 13 25 Počet vstupních analogových kanálů 0 11 Počet A/D převodníků 0 1 Možnost vlastního zápisu do paměti programu Ne Ano ICD In-Circuit Debugger Ne Ano Programově nastavitelný kmitočet interního oscilátoru --- 32 khz 8MHz Hloubka HW sklípku 8 8 Programování Sériové přes dva vývody Napájecí proud (5 V, 4 MHz) (2 V, 32 khz) (2 V, standby) < 2 ma 15 μa < 1μA < 1,4 ma < 19 μa 50 na Cena (18. září 2016) 3,50 USD 2,20 USD 8

Oba řadiče dále obsahují tyto obvody: Oscilátor nastavitelný do čtyř módů činnosti Časovač s nastavitelnou předděličkou Obvod pro resetování při náběhu napájení (Power on Reset) Časovač pro nabíhání oscilátoru (Oscillator Start-up Timer) Časovač pro náběh napájení (Power-up Timer) Hlídací časovač (Watchdog) Řadič 16F883 obsahuje tyto další obvody: Vestavěný oscilátor Komparátory A/D převodník Moduly pro sériovou komunikaci RS-485, RS-232 SPI, I 2 C 9

4. Blokové schéma Blokové schéma uvedené na obrázku dále je velmi zjednodušené. Sběrnice jsou naznačené šipkami, které jsou jednosměrné tam, kde je přenos jednosměrný (např. přenos adres), obousměrné tam, kde je přenos obousměrný (např. přenos dat). Skutečné sběrnice uvnitř mikrořadiče jsou mnohem komplikovanější a nedají se jednoznačně rozdělit na adresové, datové, řídicí. 4.1 Popis bloků 4.1.1 ALU Arithmetic and Logic Unit Aritmeticko logická jednotka. Je to obvod, ve kterém se provádějí aritmetické a logické operace. Do těchto operací mohou vstupovat data z registrů SFR a GPR, ze kterých se skládá paměť RAM (viz dále) a data z registru W. Výsledky operací se mohou uložit do SFR a GPR, nebo do registru W. 4.1.2 W register W register (Working register = pracovní registr) je osmibitový pracovní registr používaný pro operace v aritmeticko logické jednotce. Při operacích, do kterých vstupují dva operandy, obvykle jeden operand je v pracovním registru (W), druhý operand je v registru v paměti RAM. Druhý operand může také být konstanta, kterou do programu vložil už programátor. Výsledek aritmetické nebo logické operace může být vložen do pracovního registru (W) nebo do registru RAM. 4.1.3 RAM File Registers Registry, RAM. Blok zahrnuje speciální funkční registry (Special Function Registers SFR) a registry pro všeobecné účely (General Purpose Registers GPR). Registry mohou vstupovat jako operandy do aritmetických a logických operací, a výsledky těchto operací mohou do nich být uloženy. SFR slouží k nastavení různých módů činnosti. Ovlivňují stav a činnost ostatních částí řadiče. Např. registr TRISA určuje, zda jednotlivé vývody portu A budou vstupy nebo výstupy. SFR jsou na adresách 0 0BH, 80H 8BH. GPR slouží ke krátkodobému uložení informací. Je jich 68 a jsou na adresách 0CH - 4FH. 4.1.4 EEPROM Je to paměť dat typu EEPROM. Obsahuje 64 paměťových buněk po 8 bitech na adresách 0-3FH. Tyto adresy nepatří do stejného prostoru jako adresy SFR a GPR. Buňky paměti dat nelze adresovat přímo, nelze ani přímo číst a přepisovat jejich obsah. Toto vše se musí dělat prostřednictvím pomocných registrů EEADR (přenáší adresu) a EEDATA (přenáší data). Druh operace je při tom určen registry EECON1, EECON2 (nejsou na blokovém schématu). 4.1.5 Flash Program Memory Přepisovatelná ROM paměť programu. Obsahuje 1024 míst po 14 bitech. Dá se naprogramovat pomocí jednoduchého programátoru, nebo přímo v zařízení, ve kterém je řadič použit. 4.1.6 Program Counter Čítač instrukcí programu. Po vykonání každé instrukce programu zvyšuje svůj stav o jedničku, a tak ukazuje na další instrukci programu, která se má vykonat. Výjimkou jsou 10

instrukce větvení, po kterých může dojít ke skokové změně stavu čítače, a tím ke skoku do jiného místa programu. 4.1.7 Instruction Decode and Control Dekódování instrukcí. Zde se každá instrukce rozepíše na podrobné pokyny pro jednotlivé bloky, jak mají instrukci provést. 4.1.8 Timing Generation Časování. Obsahuje obvody, které s pomocí vnějších součástí (R, C, krystal) mohou generovat taktovací kmitočet. Nebo lze bez použití vnějších součástí přivádět taktovací kmitočet do vstupu OSC1/CLKIN. Z vývodu OSC2/CLKOUT lze v obou případech taktovací signál odebírat. 4.1.9 Timers a) Power up Timer (PWRT) Časovač při zapnutí. Po zapnutí napájení drží po dobu 72 ms celý řadič ve stavu reset. Tím např. zabrání případnému nežádoucímu zápisu do datové paměti EEPROM. b) Oscillator Start-up Timer (OST) Po zapnutí napájení drží řadič ve stavu reset, dokud nenaběhne oscilátor. Stav reset se zruší, až když se napočítá 1024 impulsů hodinového signálu. Pokud by napájecí napětí nabíhalo velmi pomalu, nemuselo by toto stačit. V takovém případě je vhodné použít vnější RC obvod, připojený k obvodu Power-on Reset přes vstup MCLR (viz dále). c) Power-on Reset (POR) Obvod POR generuje resetovací signál vždy, když je na napájecím napětí vzestupná hrana. Připojíme-li vstup MCLR na napájecí napětí, generuje se reset při každém náběhu napájení. Pokud napájení nabíhá velmi pomalu, je vhodné doplnit na vstup MCLR následující RC obvod: Obrázek 3: RC obvod zajišťující správný start i při pomalém náběhu napájení d) Watchdog Timer (WDT) Hlídací časovač. (Watch-dog je hlídací pes.) WDT je obvod, který když je aktivován, provede po 18 ms reset řadiče, pokud není do té doby vynulován instrukcí CLRWDT. Umožní to předejít tomu, že by se řadič zaseknul a přestal pracovat. To se může stát např. tak, že program zůstane trčet v nějaké nekonečné smyčce (chyba programátora nebo rušivý impuls v napájecím napětí), nebo přestal fungovat oscilátor (chyba hardwaru). 11

Chceme-li WDT používat, zapneme ho nastavením konfiguračního bitu WDTE na 1. Pak programově vždy nejpozději do 18 ms provedeme instrukci CLRWDT. Pokud tato instrukce do 18 ms nepřijde, WDT provede reset řadiče. To umožní vzpamatování z nežádoucích stavů, po kterých by jinak řadič zůstával v nedefinovaném stavu. Pokud je doba 18 ms příliš krátká, můžeme před WDT programově zařadit předděličku (prescaler). WDT se tedy chová jako znovuspustitelný monostabilní obvod, který je spouštěn instrukcí CLRWDT. Není-li spuštěn včas (do 18 ms), vyvolá reset řadiče. WDT má svůj vlastní integrovaný oscilátor, jehož perioda je dána hodnotami R, C na čipu. Tím je WDT nezávislý na ostatních obvodech řadiče, především na jeho hodinovém kmitočtu. Na druhou stranu to znamená, že doba 18 ms nemusí být vždy přesně 18 ms, ale bude záviset např. na teplotě, napájecím napětí, výrobní sérii. Což ale nevadí, protože jde o to, aby se řadič vzpamatoval z havarijního stavu, a nezáleží příliš na tom, zda k tomu dojde o několik ms dříve nebo později. Příklad Mikrořadič má řídit pumpování vody do zásobníku tak, aby v zásobníku byl dostatek vody, ale zároveň aby zásobník nepřetekl. Mikrořadič může být při tom řízen např. takovýmto programem (některé jeho řádky jsou psány jazykem lidským, nikoliv tedy v asembleru): ZNOVU: Hladina dosažena? Ne, zapni čerpadlo. Ano, vypni čerpadlo. CLRWDT Jdi na ZNOVU. ; Vynuluj WDT Za normálních okolností řadič stále obíhá v této smyčce a zapíná vypíná čerpadlo tak, aby hladina byla na správné výši. Pokud dojde k takové chybě, která způsobí, že řadič tuto smyčku opustí (např. po neúplném výpadku napájení brown-out), WDT po 18 ms způsobí reset. Součástí programu po resetu může být např. i přivolání obsluhy. e) Brown-out Reset Aktivuje se a vyvolá restart při neúplném výpadku napájení. 1 4.1.10 Timer0 Timer2 Osmibitové časovače (timer) a čítače (counter). Mohou počítat události, třeba počet impulzů. Mohou dělit kmitočet, odměřovat časové intervaly. 1 Black-out je výpadek, který vyvolá úplnou (černou = black) tmu. Brown-out je pokles napětí, který způsobí pouze snížení jasu žárovek. Jejich vlákna jsou pak hnědá (= brown). 12

Obrázek 4: Blokové schéma 16F883 13

4.2 Rozložení vývodů 1 Vývody 16F883 4.3 Popis vývodů Obrázek 5: Rozložení vývodů 16F883 Většina vývodů má více funkcí. Popíšeme zde jen některé hlavní funkce. 4.3.1 Řídicí vývody OSC1/CLKIN, OSC2/CLKOUT slouží k připojení vnějších součástí, které jsou zapotřebí pro vytvoření vlastního oscilátoru. Vlastní oscilátor může podle zvoleného módu být buď krystalový, nebo RC. OSC1/CLKIN může sloužit jako vstup vnějšího hodinového signálu v případě, že řadič si nevyrábí vlastní hodinový signál, ale bere ho zvenku. OSC2/CLKOUT může sloužit jako výstup hodinového signálu, a to jak v případě vlastního oscilátoru, tak i v případě vnějšího hodinového signálu. MCLR (Master CLeaR hlavní nulování) resetuje celý řadič. Je aktivní v nule. Po resetu se začíná vykonávat program z paměti programu od jeho první instrukce. VPP Při programování obvodu slouží VPP k přivedení programovacího napětí. 4.3.2 Skupina RA Vývody RA0 RA4 jsou souhrnně označovány jako PORTA. Mohou být naprogramovány jako vstupy nebo výstupy, a to každý zvlášť. Můžeme naprogramovat libovolnou kombinaci vstupů a výstupů. Např. mohou být vývody RA0, RA2, RA4 jako vstupy, vývody RA1 a RA3 jako výstupy. RA4/T0CKI může být naprogramován také jako vstup čítače TMR0 (T0CKI = Timer ClocK Input). 4.3.3 Skupina RB Vývody RB0 RB7 jsou souhrnně označovány jako PORTB. Také mohou být naprogramovány jako vstupy nebo výstupy, a to každý zvlášť, podobně jako vývody PORTA. Je-li některý vývod RB naprogramován jako vstup, lze mu programově přiřadit interní tzv. pull-up rezistor, který zajistí úroveň 1 na vstupu v případě, že na něj není nic připojeno (když necháme vstup ve vzduchu ). RB0/INT je možno naprogramovat jako vstup externího přerušení. 1 PDIP = Plastic Dual In line Package; SOIC = Small-Outline Integrated Circuit 14

RB0-RB7 je možno naprogramovat tak, že při změně stavu na kterémkoliv z nich se vyvolá přerušení. RB6 slouží při sériovém programování obsahu paměti programu jako vstup sériového programovacího hodinového signálu. RB7 slouží při sériovém programování obsahu paměti programu jako sériový vstup dat. 4.3.4 Skupina RC Vývody RC0 RC7 jsou souhrnně označovány jako PORTC. Také mohou být naprogramovány jako vstupy nebo výstupy, a to každý zvlášť, podobně jako vývody PORTA, PORTB. 4.3.5 Napájecí vývody VSS je zem pro napájení a signály. VDD je vstup pro kladné napájecí napětí. 15

16

5. Organizace datové paměti RAM 16F883 5.1 Rozdělení paměti RAM Datová paměť je (jakoby vodorovnou čarou) rozdělena do dvou oblastí podle účelu a použití: SFR Special Function Registers registry speciálních funkcí GPR General Purpose Registers univerzální registry Další dělicí čáry si můžeme představit svislé, a ty dělí datovou paměť na čtyři stránky (Banks): Bank 0 banka 0 Bank 1 banka 1 Bank 2 banka 2 Bank 3 banka 3 Z tabulky (Tabulka 2) je vidět, že celý adresový prostor paměti RAM je od adresy 000H do adresy 1FFH. Pro jeho adresování je tedy zapotřebí 9 bitů: když číslo 1FFH rozepíšeme do binární podoby, dostaneme 1 1111 1111, tj. 9 bitů. Ve čtrnáctibitových instrukcích je ale pro adresu paměti vyhrazeno jen 7 bitů. Instrukce pracující s pamětí tedy mohou přímo adresovat nejvýše do binární adresy 111 1111, tj. 7FH. To podle tabulky (Tabulka 2) odpovídá jen rozsahu banky 0. Abychom se dostali i do bank 1, 2, 3, musíme dodat ještě další dva adresové bity, které rozhodnou o bance, se kterou se bude pracovat. Tyto další dva bity, když se nevejdou do instrukcí, musí být někde jinde. Jsou v registru STATUS, což je jeden z registrů speciálních funkcí SFR (viz dále). Bity číslo 6 a 5 registru STATUS, zvané RP1 a RP0, určují pracovní banku takto: Číslo bitu 7 6 5 4 3 2 1 0 Název bitu IRP RP1 RP0 TO PD Z DC C RP1 RP0 Banka 0 0 Banka 0 0 1 Banka 1 1 0 Banka 2 1 1 Banka 3 Potřebujeme-li se dostat do jiné banky, musíme předtím nastavit bity číslo 6 a 5 v registru STATUS. 17

Tabulka 2: Organizace datové paměti RAM 16F883 18

RP1 RP0 Adresa v instrukci Hex Banka 0 SFR 0 0 0 0 0 0 0 0 0 000 0 0 0 0 1 1 1 1 1 01F GPR 0 0 0 1 0 0 0 0 0 020 0 0 1 1 1 1 1 1 1 07F Banka 1 SFR 0 1 0 0 0 0 0 0 0 080 0 1 0 0 1 1 1 1 1 09F GPR 0 1 0 1 0 0 0 0 0 0A0 0 1 1 1 1 1 1 1 1 0FF Banka 2 SFR 1 0 0 0 0 0 0 0 0 100 1 0 0 0 1 1 1 1 1 11F GPR 1 0 0 1 0 0 0 0 0 120 1 0 1 1 1 1 1 1 1 17F Banka 3 SFR 1 1 0 0 0 0 0 0 0 180 1 1 0 0 1 1 1 1 1 19F GPR 1 1 0 1 0 0 0 0 0 1A0 1 1 1 1 1 1 1 1 1 1FF Hex2 Hex1 Hex0 Tabulka 3: Adresy paměti RAM (pro jednoduchost zde nejsou odlišeny adresy, které nejsou použité viz předchozí Tabulka 2) 5.1.1 Rozdělení paměti RAM podle účelu a použití a) SFR Special Function Registers Registry speciálních funkcí se používají pro řízení činnosti řadiče. Změnou jejich obsahu tedy můžeme programově měnit činnost řadiče. Registry speciálních funkcí jsou na adresách 00-1FH, 80H-9FH, 100H-10FH, 180H-18FH. Do některých registrů SFR je přístup ze všech bank, např. do registru STATUS, pomocí kterého se mimo jiné přepíná mezi bankami. Příklad Obsahem registru TRISB se určí, které vývody RB budou vstupy a které výstupy. Určitý bit registru nastavený na jedničku znamená, že odpovídající vývod bude pracovat jako vstup. Nastavení bitu na nulu znamená, že odpovídající vývod bude pracovat jako výstup. Např. zapíšeme-li do registru TRISB číslo 7BH (tj. 0111 1011 binárně), bude nastavení vývodů RB následující: 19

Vývod RB Bit registru TRISB Hodnota bitu TRISBx Funkce vývodu RBx RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 0 1 1 1 1 0 1 1 výstup vstup vstup vstup vstup výstup vstup vstup Tabulka 4: Příklad určení typu vstupu / výstupu pro vývody portu B b) GPR General Purpose Registers Univerzální registry slouží jako paměť RAM pro krátkodobé uložení informací. U řadiče 16F883 tyto registry leží na adresách 20H-7FH, A0H-EFH, 120H-16FH. Registry na horních adresách bank 1, 2, 3 nejsou plnohodnotné, neboť tyto adresy ukazují do horní oblasti banky 0. Pokročilejší programátoři toho mohou využít, umožní jim to ušetřit přepínání mezi bankami. Začátečníci se těmto adresám raději vyhnou. Začátečníci by měli vystačit s bankou 0 a do banky 1 se přepínat, jen když je to nezbytně nutné, např. při programování vstupů výstupů pomocí registrů TRISA, TRISB, TRISC. 5.2 Význam některých registrů speciálních funkcí INDF, Indirect Address, nepřímá adresa, 00H, 80H, 100H, 180H Není to fyzický registr. Při zápisu do něj nebo čtení z něj je k operaci použit registr, jehož adresa je v registru FSR. Tím je umožněno tzv. nepřímé adresování, při kterém není nutno adresu znát už při psaní programu, ale je možno ji vypočítat až za běhu programu. Kdybychom např. chtěli vynulovat deset vzájemně sousedících registrů, bez nepřímého adresování bychom při jejich nulování museli ve svém programu postupně vyjmenovat všechny jejich adresy. S nepřímým adresováním zadáme ve svém programu adresu počátečního registru, počet nulovaných registrů, a pak necháme smyčku programu, aby postupně vypočítala adresy dalších nulovaných registrů. TMR0, Timer / Counter, Časovač / Čítač, 01H, 101H Osmibitový čítač, jehož vstup může být připojen buď na interní signál (pak se mu říká časovač), nebo na externí signál (pak se mu říká čítač). Před něj je možno zařadit programovatelnou předděličku, která může dělit v poměru 1:2 až 1:256. TMR0 je možno naprogramovat tak, že při přetečení, tj. při přechodu ze stavu FFH do stavu 00H vyvolá přerušení. Až sem byl zatím text aktualizován a doplněn o údaje 16F883 12.10.2016 OPTION, Volba, 81H Nastavením jeho bitů je možno ovládat předděličku, vnější přerušení, čítač časovač, pull-up rezistory na portu PORTB. 20

7 6 5 4 3 2 1 0 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 Význam některých bitů Bit 0 bit 2: Prescaler Rate Select výběr dělicího poměru předděličky. Osm možných kombinací těchto tří bitů umožňuje výběr z osmi různých dělicích poměrů předděličky (2, 4, 8, 16, 32, 64, 128, 256). Bit 3: Prescaler Assignment přiřazení předděličky. Přiřazuje předděličku buď před čítač / časovač TMR0, nebo před hlídací časovač WDT. Bit 5: TMR0 Clock Source Select výběr zdroje hodin pro časovač TMR0. Připojuje vstup časovače TMR0 buď k vývodu RA4 / T0CKI, nebo na vnitřní hodiny (CLOCKOUT). Bit 7: PORTB Pull-up Enable aktivace interních rezistorů, které připojí vstupy portu B na kladné napájecí napětí. PCL, Program Counter Low, nižší část programového čítače, 02H, 82H Nižších 8 bitů programového čítače. Jeho přepsáním je možno způsobit skok na adresu, která nebyla známa v době psaní programu, ale je výsledkem výpočtu (Computed GOTO). STATUS, Stav, 03H, 83H Tři bity registru STAUS obsahují informaci o stavu ALU, nebo jinak řečeno o výsledku minulé operace : Zda výsledek byl nulový a zda při něm došlo k přenosu / výpůjčce. Dva bity informují o činnosti instrukce SLEEP a WDT. Dva bity jsou použity pro nastavení stránky paměti. 7 6 5 4 3 2 1 0 IRP RP1 RP0 TO/ PD/ Z DC C Register Bank Select Time-out Powerdown Zero Digit Carry Carry Význam některých bitů Bit 0: Carry přenos. Nastaví se na 1, když při sčítání dojde k přetečení (výsledek je větší než 255), když při odčítání dojde k podtečení (výsledek je menší než 0). Tento bit se také účastní operací rotace při instrukcích RRF, RLF. Bit 2: Zero nula. Nastaví se na 1, když výsledkem aritmetické nebo logické operace je nula. Bit 5: Register Bank Select výběr banky. Je-li jeho hodnota 0, směřují operace s pamětí do banky 0. Je-li jeho hodnota 1, směřují operace s pamětí do banky 1. Bit 6: Register Bank Select výběr banky. U 16F84 není využit. Má být udržován na hodnotě 0, aby programy byly kompatibilní s vyššími verzemi mikrořadičů, které ho budou využívat. 21

FSR, File Select Register, registr pro výběr místa v paměti, 04H, 84H Viz výše odstavec o INDF. PORTA, Port A, 05H Pětibitový registr, spojený s příslušnými vnějšími vývody. Tři jeho bity nejsou využity. Funkce jednotlivých vývodů (vstup / výstup) se programuje nastavením bitů registru TRISA. TRISA, TRI State A, 85H Nastavením jeho bitů se nastavuje funkce vývodů PORTA. Použití obdobné jako u registru TRISB, jehož funkce byla vysvětlena v příkladu výše. PORTB, Port B, 06H TRISB. Osmibitový registr, spojený s příslušnými vnějšími vývody. Funkce jednotlivých vývodů (vstup / výstup) se programuje nastavením bitů registru TRISB, TRI State B, 86H Viz popis TRISA a příklad o programování PORTB výše. 22

EEDATA, EEprom DATA, 08H Před zápisem do EEPROM umístíme do tohoto registru hodnotu, která se má zapsat. Při čtení z EEPROM se v tomto registru objeví čtená hodnota. EEADR, EEprom ADdRess, 09H Před zápisem do EEPROM umístíme do tohoto registru adresu, na kterou se má zapsat. EEPROM řadiče 16F84 má kapacitu 64 bajtů s adresami 00H 3FH. Uvedené adresy nejsou součástí adresového prostoru paměti RAM. Proto mohou mít stejné hodnoty jako adresy některých registrů SFR, GPR. EECON1, EEprom CONtrol 1, 88H Registr, jehož bity se řídí zápis a čtení do/z EEPROM. Bit WREN (WRite ENable) musí být nastaven před zápisem do EEPROM. Použijeme ho tak, že před zápisem do několika buněk EEPROM ho nastavíme, zapíšeme do buněk, a po skončení zápisu do poslední buňky ho vynulujeme. Bit WR (WRite) dává povel k vykonání jednoho zápisu do jedné buňky EEPROM. Po skončení zápisu je WR automaticky hardwarově vynulován. Před zápisem do další buňky se tedy musí znovu nastavit. Aby zápis byl možný, musí být nastavený WREN (viz výše). Bit RD (ReaD) dává povel k vykonání jednoho čtení z jedné buňky EEPROM. Po skončení čtení je RD automaticky hardwarově vynulován. Před čtením z další buňky se tedy musí znovu nastavit. EECON2, EEprom CONtrol 2, 89H Před zápisem do každé buňky EEPROM je nutno zapsat do EECON2 hodnotu 55H a potom 0AAH. Zápis do EEPROM je tak jištěn několikerým způsobem, aby nedošlo k nechtěnému přepsání jejího obsahu. Příklady užití EECON1, EECON2 Čtení z EEPROM BCF STATUS, RP0 ; Bank 0 MOVLW CONFIG_ADDR ; MOVWF EEADR ; Address to read BSF STATUS, RP0 ; Bank 1 BSF EECON1, RD ; EE Read BCF STATUS, RP0 ; Bank 0 MOVF EEDATA, W ; W = EEDATA 23

Zápis do EEPROM ; v EEADR je připravená adresa ; v EEDATA je připravená hodnota, která se má zapsat BSF STATUS, RP0 ; Bank 1 BCF INTCON, GIE ; Disable INTs. BSF EECON1, WREN ; Enable Write MOVLW 55h ; MOVWF EECON2 ; Write 55h MOVLW AAh ; MOVWF EECON2 ; Write AAh BSF EECON1,WR ; Set WR bit ; begin write BSF INTCON, GIE ; Enable INTs. PCLATH, PC LAtch High, 0AH, 8AH Registr PCLATH je určen spíše pro budoucí použití u řadičů, které budou mít větší paměť pro program. U řadiče 16F84 tento registr použijeme jen při tvorbě pokročilých programů. INTCON, INTerrupt CONtrol, 0BH, 8BH Pět bitů povoluje / zakazuje všechny druhy přerušení, které 16F84 umožňuje. Tři bity obsahují tzv. příznaky (flags), které informují o tom, zda k určitému přerušení došlo nebo ne. Aktualizováno 14/10/16 začátek 24

6. Instrukční soubor 6.1 Definice asembler jazyk, ve kterém píšeme program pro mikrořadič program (překladač), který překládá zdrojový program (napsaný v asembleru jazyku) do strojového kódu instrukční doba, za kterou se vykoná většina instrukcí; má délku čtyř period signálu cyklus oscilátoru komentář text uvozený středníkem, který slouží jako nadpis nebo vysvětlivka návěští označení místa v programu, které je cílem skoku nebo volání podprogramu podprogram část programu, která se v paměti programu vyskytuje jen jednou, ale během vykonávání programu se vykonává víckrát pomocí volání instrukcí CALL nebo pomocí přerušení programátor člověk tvořící program zařízení na programování PROM, EPROM, řadičů překladač program, který překládá zdrojový program do strojového kódu přerušení přerušení vykonávaného programu a skok na program obsluhy zařízení, které si přerušení vyžádalo sklípek paměť, do které se ukládá návratová adresa při přerušení smyčka část programu, která se díky zpětné vazbě (skoku z konce na začátek) vykonává opakovaně strojový program, jehož instrukce jsou v podobě binárních čísel tak, že je řadič může kód přímo vykonávat syntaxe zdrojový program pravidla pravopisu programovacího jazyka program napsaný v asembleru 25

6.2 Syntaxe asembleru Aby počítač rozuměl zdrojovému programu a byl schopen přeložit ho pomocí překladače do strojového kódu, musí být zdrojový program napsán podle přesných pravidel. 6.2.1 Malá, velká písmena V programu můžeme používat velká i malá písmena. Při psaní instrukcí a čísel jsou si malá i velká písmena rovnocenná. Příklad MOVLW movlw Movlw jsou tytéž instrukce. 0xD2 0xd2 0Xd2 Při psaní návěští můžeme rovněž používat malá i velká písmena, ale překladač je v tomto případě case sensitive, tj. rozlišuje malá a velká písmena. Příklad Pokud v programu použijeme slovo znovu jako návěští na začátku smyčky, a dále pak slovo Znovu v příkazu skoku na začátek smyčky, znovu: movlw b'10111110'...... goto Znovu ohlásí překladač chybu, protože znovu a Znovu jsou pro něj dvě různá slova. 6.2.2 Číselné formáty Pro vyjádření čísla můžeme v asembleru použít tři číselné soustavy: Desítková dekadická soustava Číslo v desítkové soustavě uvedeme písmenem D a vlastní číslo uzavřeme mezi apostrofy, například D 169. Po instrukci MOVLW D 169 tedy v registru W bude hodnota 169. Dvojková binární soustava Číslo ve dvojkové soustavě uvedeme písmenem B a vlastní číslo uzavřeme mezi apostrofy, například B 10101001. Po instrukci MOVLW B 10101001 tedy v registru W bude binární číslo 10101001, tj. 169 dekadicky. Šestnáctková hexadecimální soustava Číslo v šestnáctkové soustavě je možno vyjádřit třemi způsoby: a) Za číslem uvedeme písmeno H. Pokud číslo nezačíná číslicí, dáme před něj nulu, např. 0A9H. b) Před číslo napíšeme 0x, např. 0xA9. Po instrukci MOVLW 0xA9 nebo MOVLW 0A9H 26

tedy v registru W bude hodnota A9 hexadecimálně, tj. 169 dekadicky. c) Pokud číslo obsahuje jen číslice (a žádná písmena), můžeme je napsat bez úvodního 0x nebo závěrečného H. Po instrukci MOVLW 12 tedy v registru W bude hexadecimální číslo 12, tj. 18 dekadicky. Tento způsob psaní vůbec není vhodný, protože hexadecimální číslo pak působí mylným dojmem, že je dekadické. 6.2.3 Komentáře Komentáře používáme proto, abychom program učinili čitelným a srozumitelným pro toho, kdo na něm bude pracovat po nás, ale i pro sebe, až se k němu po čase vrátíme. Pro označení komentáře používáme znak ; (středník). Text od středníku až do konce řádku je překladačem ignorován, může v něm proto být cokoliv. Komentář může začínat hned na začátku řádku, nebo může následovat za instrukcí. Příklad ; Smyčka, která určuje dobu, po kterou LED svítí MOVLW 0xB1 ; nastavení počáteční hodnoty čítače 6.2.4 Zkratky Konstanta k f d b k konstanta Význam konstanta, se kterou instrukce pracuje registr, se kterým instrukce pracuje destination = místo určení; místo, kam se uloží výsledek operace bit; číslo bitu, se kterým instrukce pracuje Konstanta je veličina, jejíž hodnota se po celou dobu vykonávání programu nezmění. Většinou ji určí programátor už při psaní programu. Adresa v instrukci skoku GOTO a volání podprogramu CALL je také konstanta, která se během vykonávání programu nemění. Při psaní programu v asembleru ji ale neurčuje programátor, ale překladač. Příklad f registr Příklad MOVLW k ; obecný tvar instrukce pro vložení konstanty do W MOVLW D 58 ; vloží do registru W konstantu - číslo 58 (dekadické) Označuje číslo (adresu) registru, který je v instrukci použit. CLRF f ; obecný tvar instrukce pro nulování registru CLRF d destination 0x3A ; vynuluje registr na adrese 0x3A Destination je místo, kam se uloží výsledek operace, kterou instrukce provádí. Instrukce, které pracují s registrem W a zároveň s registrem v paměti RAM, ukládají výsledek do registru W (když d = 0), nebo do registru RAM (když d = 1). 27

V registru, do kterého se výsledek neukládá, zůstává hodnota, která v něm byla před instrukcí. Příklad ADDWF f, d ; obecný tvar instrukce pro sečtení W a registru Jsou-li v registrech hodnoty Jméno / adresa registru Obsah registru W D 12 0x3D D 6 pak po provedení instrukce ADDWF 0x3D, 0 ; sečte W a f, výsledek do W budou nové hodnoty Jméno / adresa registru Obsah registru W D 18 0x3D D 6 zatímco po provedení instrukce ADDWF 0x3D, 1 ; sečte W a f, výsledek do f budou nové hodnoty Jméno / adresa registru Obsah registru W D 12 0x3D D 18 b bit Příklad Určuje číslo bitu, se kterým instrukce pracuje. BCF f, b ; obecný tvar instrukce pro nulování jednoho bitu v ; registru Je-li obsah registru na adrese 0x05 (PORT A) Bit PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 Hodnota 1 0 1 1 1 1 1 0 a port je nastavený jako výstup, pak po provedení instrukce BCF 0x05, 3 ; vynuluje bit 3 registru 0x05 bude nový obsah registru na adrese 0x05 (PORT A) Bit PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 Hodnota 1 0 1 1 0 1 1 0 28

6.3 Instrukce aritmetických a logických operací 6.3.1 Operace s konstantou Do těchto instrukcí vstupuje konstanta, uváděná v pravé části instrukce, a obsah registru W. Výsledek se ukládá do W. Všechny instrukce této skupiny se vykonají za jeden instrukční cyklus. Slovo Literal zde znamená číslo. Zkratka Význam Činnost ADDLW k Add Literal to W Sečte W a k ANDLW k AND Literal with W Provede logický součin mezi odpovídajícími bity W a k IORLW k Inclusive OR Literal with W Provede logický součet mezi odpovídajícími bity W a k SUBLW k Subtract W from Literal Odečte W od k MOVLW k MOVe Literal to W Zapíše k do W XORLW k exclusive OR Literal with W Provede Exclusive-OR mezi odpovídajícími bity W a k: Pokud jsou odpovídající bity shodné, výsledkem je 0. Nejsou-li shodné, výsledkem je 1. Příklad Je-li v registru W hodnota D 61, pak po provedení instrukce SUBLW D 71 ; odečte W od k bude v registru W hodnota D 10. S konstantou pracuje také instrukce MOVLW k (zápis konstanty do registru W), která je popsaná dále v odstavci o instrukcích přesunů. 6.3.2 Operace s registrem RAM Do těchto instrukcí vstupuje obsah registru RAM, jehož adresa je uvedená v pravé části instrukce, a většinou také obsah registru W. Výsledek se ukládá do W nebo do registru RAM podle hodnoty d, jak bylo popsáno výše. Všechny instrukce této skupiny se vykonají za jeden instrukční cyklus. Slova File register zde znamenají jeden z registrů paměti RAM. Zkratka Význam Činnost ADDWF f, d ADD W and File register Sečte W a f ANDWF f, d AND W with File register Provede logický součin mezi odpovídajícími bity W a f COMF f, d COMplement File register Provede komplement (negaci) všech bitů f DECF f, d DECrement File register Dekrementuje f (sníží jeho hodnotu o 1) INCF f, d INCrement File register Inkrementuje f (zvýší jeho hodnotu o 1) IORWF f, d Inclusive OR W with File Provede logický součet mezi register odpovídajícími bity W a f SUBWF f, d SUBtract W from File register Odečte W od f XORWF f, d exclusive OR W with File register Provede Exclusive-OR mezi odpovídajícími bity W a f: Pokud jsou odpovídající bity shodné, výsledkem je 0. Nejsou-li shodné, výsledkem je 1. 29

Příklad Jsou-li v registrech hodnoty Jméno / adresa registru Obsah registru W B 0001 1010 0x3D B 1000 1011 pak po provedení instrukce IORWF 0x3D, 0 ; logický součet W a f, výsledek do W budou nové hodnoty Jméno / adresa registru Obsah registru W B 1001 1011 0x3D B 1000 1011 30

6.4 Instrukce přesunů Pokud instrukce obsahuje parametr d, výsledek se ukládá do W když d = 0 do f když d = 1 Všechny instrukce této skupiny se vykonají za jeden instrukční cyklus. Zkratka Význam Činnost MOVF f, d MOVe contents of File register d = 0... f se zkopíruje do W, hodnota v f zůstává beze změny. d = 1... nic se nepohne ani nezmění, ale nastaví se příznak Z podle f. MOVLW k Viz výše Viz výše MOVWF f MOVe W to File Zkopíruje W do f, W se nezmění register RLF f, d Rotate Left File register Rotuje obsah f doleva přes bit C stavového registru. RRF f, d Rotate Right File register d = 0... výsledek rotace se objeví ve W. f zůstává původní, beze změny. d = 1... výsledek rotace je v f. W zůstává původní, beze změny. Rotuje obsah f doprava přes bit C stavového registru. SWAPF f, d Příklad SWAP nibbles in File register d = 0, 1... jako u RLF Prohodí se levý a pravý půlbajt (nibble) registru f. d = 0, 1... jako u RLF Jsou-li v registrech hodnoty Jméno / adresa registru Obsah registru W cokoliv 0x3D 0xA5 pak po provedení instrukce SWAPF 0x3D, 0 ; prohoď levou a pravou část f, výsledek do W budou nové hodnoty Jméno / adresa registru Obsah registru W 0x5A 0x3D 0xA5 31

6.5 Instrukce skoků Po těchto instrukcích dojde k mimořádné *) změně obsahu čítače instrukcí, a to u instrukce GOTO vždy u ostatních instrukcí když je splněná testovaná podmínka. Pokud instrukce obsahuje parametr d, výsledek se ukládá do W když d = 0 výsledek se ukládá do f když d = 1 Všechny instrukce této skupiny se vykonají za jeden instrukční cyklus, pokud ke skoku nedojde za dva instrukční cykly, pokud ke skoku dojde. Jelikož při instrukci GOTO je skok nepodmíněný, trvá tato instrukce dva cykly vždy. Zkratka Význam Popis BTFSC f, b Bit Test of File register, Skip if Clear Testuje bit b registru f, přeskočí další instrukci, když b = 0. BTFSS f, b Bit Test of File register, Skip if Testuje bit b registru f, přeskočí další Set instrukci, když b = 1. DECFSZ f, d DECrement File register, Skip if Zero GOTO k GO TO address k Skočí na adresu k. INCFSZ f, d INCrement File register, Skip if Zero Příklad Dekrementuje f, přeskočí další instrukci, když po operaci f = 0. Inkrementuje f, přeskočí další instrukci, když po operaci f = 0. Část blikacího programu, která zajistí svícení LED, dokud je program ve smyčce: SMYCKA: DECFSZ CNT, 1 GOTO SMYCKA POKRACUJ: Před instrukcí DECFSZ programový čítač PC obsahuje adresu SMYCKA. Po instrukci DECFSZ bude: CNT = CNT 1 W beze změny, protože d = 1 když CNT 0, PC = adresa SMYCKA+1, tj. ukazuje na instrukci GOTO, která provede skok zpátky na SMYCKA. Program se točí dál ve smyčce. když CNT = 0, PC = adresa POKRACUJ, tj. opuštění smyčky *) Po každé normální instrukci se obsah čítače instrukcí zvýší o 1, tj. čítač instrukcí pak ukazuje na následující instrukci. Po instrukci, která uskutečnila skok, se obsah čítače instrukcí změní mimořádně. U instrukcí obskoků se zvýší o 2, u instrukce GOTO skočí na zadanou adresu. 32

6.6 Instrukce nulování a nastavení Tyto instrukce nulují nebo nastavují jednotlivý bit určitého registru (BCF, BSF), nulují celý registr (CLRF, CLRW), nastavují výchozí stav hlídacího časovače (CLRWDT). Všechny instrukce této skupiny se vykonají za jeden instrukční cyklus. Zkratka Význam Popis BCF f, b Bit Clear in File register Vynuluje bit b registru f. BSF f, b Bit Set in File register Nastaví na 1 bit b registru f. CLRF f Clear File register Vynuluje registr f. CLRW CLeaR Working register Vynuluje registr W. CLRWDT Clear WatchDog Timer Vynuluje WDT = Watch Dog Timer a předděličku. Příklad Jsou-li v registrech hodnoty Jméno / adresa registru Obsah registru W B 0001 1010 0x3D B 1000 1011 pak po provedení instrukce CLRF 0x3D ; vynulování registru 0x3D budou nové hodnoty Jméno / adresa registru Obsah registru W B 0001 1010 0x3D B 0000 0000 a dále po provedení instrukce CLRW ; vynulování registru W budou nové hodnoty Jméno / adresa registru Obsah registru W B 0000 0000 0x3D B 0000 0000 Aktualizováno 13/10/16 konec 6.7 Instrukce pro podprogramy a přerušení Po těchto instrukcích opět dojde k mimořádné změně obsahu čítače instrukcí. Při instrukci CALL program skočí na adresu podprogramu danou parametrem k (např. návěštím) a adresa následující instrukce (návratová adresa) se uloží do sklípku (STACK). Při instrukcích návratu (RETURN, RETFIE, RETLW) se ze sklípku vyzvedne návratová adresa a uloží se do programového čítače (PC = Program Counter). Tím dojde ke skoku (návratu) na instrukci, která následuje po té, která se jako poslední vykonala před skokem na adresu podprogramu. Pokračuje se tedy v práci, která byla předtím rozdělaná. Instrukce RETFIE kromě návratu na návratovou adresu také zajistí povolení dalších přerušení. Během obsluhy přerušení jsou totiž další přerušení zakázána. 33

Instrukce RETLW kromě návratu na návratovou adresu také vsadí do registru W hodnotu k. To umožňuje programu, aby si z obsluhy přerušení přinesl informaci o tom, jak obsluha přerušení proběhla. Všechny instrukce této skupiny se vykonají za dva instrukční cykly. Při všech totiž dochází k mimořádné změně obsahu čítače instrukcí. Zkratka Význam Popis CALL k CALL subroutine on address k Uloží do sklípku adresu následující instrukce (= návratovou adresu) a skočí na adresu danou parametrem k. RETURN RETURN from subroutine Vyzvedne ze sklípku návratovou adresu, dosadí ji do programového čítače, a tím vyvolá skok (návrat) na tuto adresu. RETFIE RETurn From Interrupt, Enable interrupts 34 Vyzvedne ze sklípku návratovou adresu, dosadí ji do programového čítače, a tím vyvolá skok (návrat) na tuto adresu. Nastaví bit GIE = General Interrupt Enable v registru INTCON, a tím umožní přijetí dalších přerušení. RETLW k RETurn with Literal in W Vyzvedne ze sklípku návratovou adresu, dosadí ji do programového čítače, a tím vyvolá skok (návrat) na tuto adresu. Do registru W dosadí hodnotu k. Příklad Řadič má pravidelně kontrolovat hladinu vody v nádrži. Příslušný podprogram má hladinu změřit a sdělit, zda už hladina dosáhla předepsané úrovně nebo ne. Podprogram může mít dva výstupy. Zjistí-li se, že hladina ještě nedosáhla předepsané úrovně, návrat z podprogramu se provede instrukcí RETLW 0x00 Pokud hladina už dosáhla předepsané úrovně, návrat z podprogramu se provede v jiném místě instrukcí RETLW 0x01 Pokud tedy hladina nedosáhla předepsané úrovně, najdeme v registru W po návratu z podprogramu hodnotu 0, pokud dosáhla, najdeme tam 1. 6.8 Zvláštní instrukce Všechny instrukce této skupiny se vykonají za jeden instrukční cyklus. Instrukce NOP se používá k záměrnému zpomalení chodu programu, nebo, při ručním programování, k vynechání místa v paměti pro případné vložení dalších částí programu. Zpomalení chodu programu může být zapotřebí tam, kde před odebráním stavu vstupu je třeba počkat na ustálení vstupní veličiny. Při programování časové smyčky, která má odměřovat přesný čas, lze vložením prázdných instrukcí jemně doladit délku trvání smyčky. Při ručním programování je největším problémem rozhrnutí dosavadního programu a vložení další části, protože se tím změní adresy skoků a volání. Pokud si v programu necháme prázdná místa, zaplněná jen instrukcemi NOP, můžeme pak tato místa využít ke vložení nových částí. Pokud ale pro psaní a překlad programu používáme počítač,

překladač tento problém řeší za nás. Po každé změně programu přepočítá adresy skoků a volání automaticky. Zkratka Význam Popis NOP NO Operation Prázdná operace SLEEP SLEEP Přechod řadiče do stavu SLEEP. Vynulování WDT a předděličky. Příklad Programujeme pravidelné blikání LED. Část programu, která určuje dobu svícení nesvícení může vypadat takto: ; svícení MOVLW D 66 ; smyčka se má proběhnout 66x MOVWF 0x0D ; registr 0x0D použijeme jako počítadlo DOKOLA: NOP ; vycpávka: prázdné instrukce NOP DECFSZ 0x0D, 1 ; dekrementuj počítadlo, výsledek nech v něm GOTO DOKOLA ; není hotovo? Jedeme dokola! MOVLW... ; hotovo, jedeme dál! Počtem instrukcí NOP můžeme měnit dobu, kterou potrvá jedno proběhnutí smyčky. Velikostí čísla v úvodní instrukci MOVLW měníme počet průchodů smyčkou. Aktualizováno 14/10/16 konec 35

7. Úlohy 7.1 Drát Funkce Stav jednoho vývodu (vstupu) se programově přenese na jiný vývod (výstup), jako kdyby tyto dva vývody byly propojeny drátem. HW příprava Na vývod č.1 (RA2) připojte přepínač tak, aby v jedné poloze byl vývod připojen na +5V, ve druhé poloze na zem. Na vývod č.2 (RA3) připojte LED tak, aby svítila, když na vývodu bude úroveň H. Rozbor úlohy Na začátku programu je nutno vývod č.1 (RA2) nastavit jako vstup, vývod č.2 (RA3) je nutno nastavit jako výstup. Během činnosti programu se bude stále testovat stav vývodu č.1 a zjištěná hodnota se bude posílat na vývod č.2. 36