STEDNÍ PRMYSLOVÁ ŠKOLA, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7. (studijní text)



Podobné dokumenty
Programátorský model procesoru x51

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

Mikrořadiče řady 8051.

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Simulátor mikroprocesorů architektury 8051.

STEDNÍ PRMYSLOVÁ ŠKOLA, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7. (studijní text)

Podprogram DELAY.INC. - konstanty časových prodlev. RB3 equ 11b DEL1MS: DEL800: DEL400: DEL200 DEL100 DELAY: ret DEL1MS



Mikroprocesory v přístrojové technice

LABORATORNÍ CVIENÍ Stední prmyslová škola elektrotechnická

Základy programování 8051

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

Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3

Překladač - Assembler, úloha SW_ UART

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

A51 MACRO ASSEMBLER POKUSNY PROGRAM DATE 10/3/007 PAGE 1

Mikrořadiče pro přístrojovou techniku

MIKROPOČÍTAČOVÉ SYSTÉMY

Překladač - Assembler. kat. měření, ČVUT - FEL, Praha A3B38MMP, X38MIP Přednáška 3 - část. J. Fischer

1 VERZE DOKUMENTU VERZE SOFTWARE ZÁKLADNÍ POPIS ZÁKLADNÍ P EHLED HYDRAULICKÝCH SCHÉMAT HYDRAULICKÁ SCHÉMATA...


Mikroprocesorová technika

Automaty. Modelování chování systému pomocí automatu. Automat vyjádený grafem. Prostedek k programování složitjších, víceúlohových aplikací

MIKROPOČÍTAČOVÉ SYSTÉMY

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

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

3. ZÁKLADNÍ INSTRUKCE JAZYKA TECHNOL

NÁVOD K OBSLUZE NEZÁVISLÉHO NAFTOVÉHO TOPENÍ S RUNÍM OVLÁDÁNÍM III

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1.

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

Kubatova Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR Kubátová Y36SAP-strojový kód 1

22. TVORBA UŽIVATELSKÝCH INSTRUKCÍ A MAKER

a operačních systémů

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

Assembler - 2.část. poslední změna této stránky: Zpět

Digitální teploměr s LCD

1. Co je elektrický proud? Elektrický proud je projev pohybu elektrického náboje. Vyjadujeme ho jako celkový náboj, který projde za jednotku asu.

od jaké adresy bude program umístěn? Intel Hex soubor, co to je, z čeho a jak se získá, k čemu slouží? Pseudoinstrukce (direktivy) překladače ORG, SET

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

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

Y36SAP - aritmetika. Osnova

STEDNÍ PRMYSLOVÁ ŠKOLA, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7. (studijní text)

Vyhláška. Ministerstva financí. ze dne..2004,

D/A převodník. Třída: 4.C Elektrotechnická Havířov Protokol do MIT Skupina: 3. Střední Průmyslová Škola. Zpráva číslo: 4

Asynchronní pevodník RS-232 /485 s automatickým ízením penosu a galvanickým oddlením rozhraní ELO E069. Uživatelský manuál

Jazyk symbolických adres

Mikroprocesory v přístrojové technice

zení Koncepce připojení V/V zařízení POT POT ... V/V zařízení jsou připojena na sběrnici pomocí řadičů. Řadiče Připojení periferních zařízení

Mikroprocesory v přístrojové technice

Instrukce pro obsluhu a montáž

MENDELOVA ZEMDLSKÁ A LESNICKÁ UNIVERZITA V BRN. ORGANIZANÍ ÁD ŠKOLNÍHO ZEMDLSKÉHO PODNIKU ŽABICE.j. : 1080/2001

Servisní návod [CZ] VMS 08. Øídící jednotka pro pøesné mìøení spotøeby nápojù. Verze: 1.4 Datum: Vypracoval: Vilímek

MIDAM MW 240 modbus 2 x DI, 2 x DO

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ UNIVERZÁLNÍ ČASOVACÍ ZAŘÍZENÍ FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV RADIOELEKTRONIKY

Paměti a jejich organizace

Mikroprocesor Intel 8051

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

1 KOMBINATORIKA, KLASICKÁ PRAVDPODOBNOST

Síový analyzátor / rekordér pechodových jev

Obvody a architektura počítačů. Jednoprocesorové počítače

Mikroprocesory v přístrojové technice

Kontaktní osoba: PhDr.Jitka Šimková, tel./fax: , mobil

DOPRAVNÍ INŽENÝRSTVÍ

Technická Univerzita v Liberci, Fakulta Mechatroniky. Učební text k předmětu. Číslicové počítače

UŽIVATELSKÁ PÍRUKA SERD ECR 465TF, 466TF (RESTAURANÍ POKLADNY)

Regulátor prostorové teploty s tíbodovým výstupem

Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

POPIS A NÁVOD K OBSLUZE PROGRAMOVATELNÉHO REGULÁTORU R101

maximalizace okna složka - je něco jako pořadač, kam se mohou ukládat soubory, ale lze tam umísťovat i další složky

DOPRAVNÍ INŽENÝRSTVÍ

velikosti vnitřních pamětí? Jaké periferní obvody má na čipu a k čemu slouží? Jaká je minimální sestava mikropočítače z řady 51 pro vestavnou aplikaci

GIS aplikace pro podporu rozhodování a plánování v rostlinné výrob a pro realizaci zásad nitrátová smrnice

IMPORT DAT Z TABULEK MICROSOFT EXCEL

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

Popis instrukční sady procesoru ADOP

Dokumentaní píruka k aplikaci. Visor: Focení vzork. VisorCam. Verze 1.0

ISU Cvičení 7. Marta Čudová

8. Struktura údaj na LCD displeji

Algoritmizace a programování

Ladící pípravek DisplayKit

ISU Cvičení 3. Marta Čudová

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

Registry 8*32bit ERn (=16*16bit En+Rn, 8*16bit+16*8bit En+RnH+RnL)

Historie osmibitových mikroprocesoru a mikroradicu ZILOG.

MIDAM UC 301 modbus regulátor topeni, otočné tlačítko, RTC, 2xDO, 1x DI, externí odporové čidlo PT1000, RS485

PROTOKOL O LABORATORNÍM CVIČENÍ

ICS Identifikaní systémy a.s.!"#$%&

MIDAM UC 101 modbus regulátor topení, teplota, 1x DO, 1x DI, RS485

MPASM a IDE pro vývoj aplikací MCU (Microchip)


PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

KUSOVNÍK Zásady vyplování

zařízení. :r3 Počítač obsahuje procesor, DMA kanál a operační paměť.

Kryogenní technika v elektrovakuové technice

ST ˇ REDOˇ SKOLSK A ODBORN A ˇ CINNOST Mikroprocesorov y v yukov y syst em Vojtˇ ech Drbohlav Jiˇ c ın 2010

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

TLAKOVÝ PEVODNÍK TMG N/JB

VYŠŠÍ ODBORNÁ ŠKOLA Měřič tepové frekvence M-3909

Převodník sériového rozhraní SLC-67/73/74

Transkript:

STEDNÍ PRMYSLOVÁ ŠKOLA, OSTRAVA - MORAVSKÁ OSTRAVA, KRATOCHVÍLOVA 7 (studijní text) µ-procesorová TECHNIKA Studijní text smí být používán pouze k výuce µ-procesorové techniky v SPŠ, Ostrava Moravská Ostrava, Kratochvílova 7 Není dovoleno dokument jakkoliv upravovat a samostatn používat jeho ásti

1 Charakteristika jazyka symbolických adres 3 11 Jazyk symbolických adres - úvod 3 12 Jazyk symbolických adres - peklad 3 13 Cviení k probrané kapitole 5 2 Operandy a výrazy 6 21 Struktura píkazové ádky 6 22 íselné soustavy direktívy assembleru 6 23 Cviení k probrané kapitole 7 3 Zpsoby adresování 8 31 Obecné pojmy 8 32 Styk s vnjší pamtí 8 33 Cviení k probrané kapitole 9 4 Instrukní soubor monolitického µ-poítae typu 8051 10 41 Úvod do problematiky 10 42 Dlení instrukcí podle funkce 11 43 Cviení k probrané kapitole 11 5 Instrukní soubor monolitických µ-poíta s jádrem I8051 12 51 Instrukce aritmetických operací 12 52 Instrukce logických operací a posun 13 53 Instrukce pesun dat 14 54 Instrukce bitových operací 15 55 Instrukce skok, volání a jiné 15 6 Píklady použití instrukcí v programu 17 61 Jednoduché programové segmenty 17 62 Cviení k probrané kapitole 17 7 Aritmetické operace s ísly v rzných íselných soustavách 18 71 Seítání osmi bitových a šestnácti bitových ísel 18 72 Seítání BCD ísel 20 73 Rozdíl osmi bitových ísel 21 74 Rozdíl šestnácti bitových ísel 22 75 Algoritmus násobení osmi bitových ísel 23 76 Cviení k probrané kapitole 24 8 Brzdící a zpožovací smyky 25 81 Brzdící smyky 25 82 Zpožovací smyky 28 83 Cviení k probrané kapitole 30 9 Zadání a rozbor projektu íslo jedna (pevodník BCD pro 7-mi segmentový display) 31 91 Zadání projektu 31 92 Rozbor projektu 32 10 Píloha instrukní soubor 33 2 / 33

1 Charakteristika jazyka symbolických adres Klíové pojmy: instrukce, pseudoinstrukce, editor, peklada, zdrojový text, strojový kód 11 Jazyk symbolických adres - úvod Program v pamti monolitického µ-poítae je tvoen posloupností instrukcí ve strojovém kódu Instrukce jsou zapsány v binárním tvaru a obvykle jsou interpretovány v hexa tvaru (lepší itelnost) Programování ve strojovém kódu je tedy velmi nároné na pozornost programátora (napsat delší program bez chyb je velmi obtížné) V souasné dob se k programování používá jazyk symbolických adres a peklada Existují i nástroje umožující zápis zdrojového textu napíklad v programovacím jazyce C Kompilátory však nejsou univerzáln optimalizovány Tento zpsob zápisu mže být sice rychlejší, ale obvykle neumožní dosažení maximálního využití pamtí monolitického µ-poítae ani dosažení maximální rychlosti pebhu programu V jazyce symbolických adres jsou instrukce vytváeny jednoduchou syntaxí (mnemonickou zkratkou) To umožní jejich snadné zapamatování Peklada je program provozovaný na hostitelském poítai Jeho úkolem je peklad programu ze zdrojové formy do strojového kódu monolitického µ-poítae Jazyk symbolických adres dovoluje ve spojení s pekladaem (assembler-em) následující: nahradit hexa tvar instrukce mnemonickým kódem; symbolický zápis operand (registry, adresy, konstanty); oznaení místa v programu symbolickým návštím; urení poátení adresy pro uložení programu v pamti; uložení poátk zvolených segment programu na zvolené adresy; zápis konstant v rzných íselných soustavách (nejastji: dec, hex, bin); použití pseudoinstrukcí (makroinstrukce a direktivy assembleru) K programování se používají píkazy (instrukce jsou ureny procesorovému jádru, pseudoinstrukce jsou ureny pekladai) Jazyk symbolických adres je tedy nástroj umožující relativn komfortní tvorbu program pro monolitický µ-poíta 12 Jazyk symbolických adres - peklad Peklada je software-ový nástroj umožující peklad programu z formy zdrojového textu (forma vhodná pro lovka) do formy strojového kódu (forma vhodná pro monolitický µ-poíta) Pi své innosti peklada obvykle podává informace o syntaktických chybách, soupis jmen a návští, výpis makroinstrukcí a jejich rozvoj Ped spuštním pekladae musí být k dispozici zdrojový text programu Použitý editor musí text generovat ve tvaru ASCII (American Standard Code for Information Interchange) Soubor musí být opaten píponou asm (*asm) K pekladu zdrojového souboru do strojového kódu lze využít napíklad peklada a51exe, jehož parametrem je jméno pekládaného souboru Výsledkem pekladu jsou soubory opatené píponou *obj (objekt) a *lst (listing) Soubor *obj obsahuje program urený k zápisu do pamti monolitického µ-poítae vyjádený v hexa tvaru Tento soubor musí být obvykle dále upravován Soubor *lst obsahuje pvodní zdrojový text a navíc ísla píkazových ádek, kódy instrukcí a jejich adresy v pamti programu V pípad, že se ve zdrojovém textu vyskytují syntaktické chyby obsahuje *lst komentovaná hlášení v místech jejich výskytu 3 / 33

Soubor *obj je použit ke konverzi do binárního tvaru *bin (Tento soubor bude použit programátorem 1 k zápisu kódu do pamti monolitického µ-poítae) Nkdy tato konverze probíhá ve skryté podob (konvertor je souástí programátoru) K realizaci pekladu je výhodné použít dávkový soubor (zde!bat), který obsahuje následující píkazy: a51 %1asm hexbin %1obj %1bin i del %1hex rename %1obj %1hex dávkový soubor zajistí peklad zdrojového textu *asm, vytvoení souboru *hex (ten je využíván simulátorem) Parametr i urí tvar souboru *bin K zápisu zdrojového textu programu lze využít editor EDIT, který je souástí operaního systému Windows Proces pekladu lze realizovat z píkazové ádky Oba programy mohou byt souasn spuštny v oknech Ukázka zápisu programu, pekladu a hlášení o chyb Ukázka zápisu programu (syntaktická chyba) Použití dávkového souboru pro peklad 1 Nástroj k zápisu programu do pamti monolitického µ-poítae 4 / 33

Ohlášení chyby pekladaem Oznaení chyby v listingu 13 Cviení k probrané kapitole Objasnte pojmy zdrojový text a strojový kód Popište postup realizace pekladu zdrojového textu do strojového kódu Vysvtlete funkci dávkového souboru použitého k pekladu zdrojového textu do strojového kódu 5 / 33

2 Operandy a výrazy Klíové pojmy: návští, typ operace, operand, komentá, pseudoinstrukce 21 Struktura píkazové ádky Vzhledem k tomu, že název souboru (zdrojového textu) mže mít pouze osm znak, je vhodné na zaátku programu uvést bližší specifikaci programu, popis použitých I/O bran, pamových bunk a další informace, které umožní snadnou identifikaci souboru i po delší dob Vlastní program je zapoat píkazem (direktivou pekladae) code Další ádky obsahují program a na jeho konci je opt píkaz (direktiva pekladae) end Jednotlivé ádky programu lze dlit do ty polí (pole jsou z dvodu lepší pehlednosti zápisu od sebe oddlena tabulátorem) Navesti: typ_operace operand(y) ;komentá Návští ~ je nepovinné a slouží k oznaení poátku programového bloku, nebo adresy skoku (ádky zdrojového textu nejsou íslovány a není uvedena ani adresa instrukcí v pamti) Nkteré pekladae vyžadují, aby návští nebylo delší než šest znak, první znak musí být písmeno a návští je ukoneno znakem dvojteka Typ operace ~ obsahuje mnemonickou zkratku instrukce, nebo pseudoinstrukce Pole operand ~ obsahuje jména registr, návští, nebo data se kterými instrukce operuje V závislosti na použité instrukci se mní poet operand (0 3) P: add a,r3 Jednotlivé operandy jsou oddlovány árkou Ped nkterými operandy se používají prefixy (# ~ hash, nebo @ ~ obchodní a) Komentá ~ obsahuje rzné informace, které upesují a objasují funkci použitých píkaz Komentá je dležitou souástí tvoeného programu a jeho úelem je zajištní srozumitelnosti programu v prbhu zápisu, ladní a pi pípadné pozdjší modifikaci Komentá je pedznamenán znakem stedník Znaky vpravo od stedníku se neúastní pekladu (nemusí být psány cesky, mohou být psány esky) 22 íselné soustavy direktívy assembleru K zápisu operand se používají následující vyjádení: Hexadecimální íslo ~ k rozlišení se využívá dvojice znak h 2 Zápis musí zaínat znaky 0 9 (nelze h F7, ale h 0F7) Rozsah znak 0 F Dekadické íslo ~ k rozlišení se využívá dvojice znak d (jedná se o privilegovanou íselnou soustavu použití rozlišovacích znak je nepovinné) Rozsah znak 0 9 Oktávové íslo ~ k rozlišení se využívají dvojice znak o nebo q Rozsah znak 0 7 Binární íslo ~ k rozlišení se využívá dvojice znak b Rozsah znak 0 1 Znaková konstanta ~ slouží ke konverzi znak do ASCII Píklad: A ~ d 65, A +1 ~ d 66 Jméno s piazenou hodnotou ~ aplikuje se prostednictvím direktiv set nebo equ Jméno definované jako návští ~ k oznaení adresy v pamti programu Výraz ~ vzniká kombinací výše uvedených zápis Jména se používají ve zdrojovém textu k oznaení: instrukcí, pseudoinstrukcí, pamových bunk, konstant, návští a maker Používání jmen usnaduje zápis programu, ale i pemísování blok v pamti Podle zdroje jména dlíme na: o o o jména rezervovaná ~ oznaení instrukcí a direktiv; jména definovaná pekladaem ~ doasná jména používaná v prbhu pekladu; jména definovaná uživatelem ~ oznaení návští, pamových bunk, maker, 2 znak apostrof 6 / 33

Podle rozsahu platnosti dlíme jména na: lokální ~ mají platnost pouze v uritých programových segmentech; globální ~ mají platnost v rámci celého projektu Direktivy pekladae ~ ovlivují peklad zdrojového textu do strojového kódu Nejpoužívanjší direktivy code ~ poátek vlastního programu org ~ nastavení adresy pro následující instrukci (Napíklad obsluha perušení perušovací vektor Je poteba sledovat zda nedošlo k vícenásobnému použití adres) equ ~ piazení symbolického jména pamové buce, I / O brán, konstant, bitu set ~ obdoba equ, ale údaj lze v prbhu zápisu programu mnit db ~ vyhrazení pamového prostoru (až osm osmibitových položek (k uložení datových konstant) dw ~ jako db, ale až osm šestnácti bitových konstant end ~ oznaení ukonení zdrojového textu 23 Cviení k probrané kapitole Popište jak vypadá typická struktura píkazové ádky Vyjmenujte nejastji používané íselné soustavy Objasnte rozdíl mezi instrukcí a direktivou 7 / 33

3 Zpsoby adresování Klíové pojmy: pímá adresa, nepímá adresa, relativní adresa 31 Obecné pojmy Instrukce zapsaná v jazyce symbolických adres mnemonickou zkratkou provádí operace s uritými daty nebo pamovými bukami Adresa ~ íselné oznaení místa v pamti (pojem adresa se mže vztahovat i k I/O portm a registrm speciálních funkcí) Pímý operand ~ nejedná se o adresu v pravém slova smyslu, ale o íselnou hodnotu (konstantu) obsaženou v instrukci Pímá adresa ~ základní zpsob adresování Instrukce obsahuje poadové íslo buky v pamti (ale i oznaení registru nebo portu) y x z 0 M E M K objasnní pojmu relativní adresování Nepímá adresa ~ souástí instrukce je adresa místa, na kterém se nachází adresa pímá asto se používá k modifikaci datových oblastí prostednictvím smyek Registrové adresování ~ zvláštní pípad nepímého adresování (adresa se nachází v registru (registrech)) Relativní adresování ~ úplná (absolutní) adresa vyjaduje vzdálenost vybrané pamové buky od poátku pamti (p y-o nebo z-0) Relativní adresa je vzdálenost vybrané pamové buky od vztažné adresy x (p y-x nebo z-x) Tato adresa mže mít kladnou i zápornou orientaci Relativní adresa je kratší, to umožuje vyšší rychlost bhu programu a menší nároky na pamový prostor v pamti programu Auto relativní adresování ~ zvláštní pípad relativního adresování Bázovou adresou je adresa práv provádné instrukce 32 Styk s vnjší pamtí Ze schémat I/O bran je patrné, že pouze P0 je obousmrná Brány P1, P2 a P3 jsou tzv pseudoobousmrné Poznámka: Podle údaj výrobce mže být výstupní tranzistor (k zajištní logické úrovn L) zatžován proudem o velikosti až 1,6 ma 8 0 5 1 P0 ALE P2 latch data adresa (L) adresa (H) M E M RD WR RD WR Komunikace s vnjší pamtí dat Pi styku s externí pamtí programu je využíván signál PSEN, pi styku s pamtí dat signály RD a WR Pi tení programu se vždy využívá 16-ti bitová adresa Pi komunikaci s pamtí dat lze použít 16-ti bitovou, nebo 8-mi bitovou adresu Rychlost komunikace souvisí s použitím adresového prostoru Mnohdy je výhodné rozdlit pam do stránek o velikosti 256 B a jednotlivé stránky volit prostednictvím P2 Adresování v prostoru jedné stránky je pak rychlejší Nepesahuje-li externí pam dat velikost 256 B, lze P2 využít jako standardní I/O port Sestupná hrana signálu ALE zajistí zápis dolního bajtu adresy do vnjšího bufferu S uritým odstupem je generován signál PSEN (uruje dobu tení z pamti programu (ped vzestupnou hranou PSEN je tení bajtu z pamti programu dokoneno)) 8 / 33

Pro zahájení komunikace s pamtí dat musí být signály ALE, PSEN, RD a WR na úrovni H Signály RD a WR urují smr toku dat Ped vzestupnou hranou RD nebo WR je penos dat dokonen U monolitických µ-poíta s jádrem na bázi 8051 jsou využívány následující adresovací metody: pímý operand, pímé adresování, nepímé registrové adresování a auto relativní adresování K rozlišení rzných zpsob adresování se u 8051 používají prefixy Pímý operand je oznaen prefixem hash # Pímá adresa je používána nejastji a proto se realizuje bez prefixu K odlišení nepímé adresy slouží prefix obchodní a @ Adresa jednoho z operand je asto vyjádena nižšími temi bity operaního kódu (R0 R7 aktuální registrové banky, A, B, AB, DPTR, C) Instrukce je kratší a bh programu mže být rychlejší Pímý operand je tvoen jedno bajtovou konstantou Pímá adresa je tvoena druhým bajtem instrukce a lze takto adresovat nižších 128 B RWM nebo SFR Nepímé registrové adresování lze realizovat využitím R0 nebo R1 aktuální registrové banky (lze takto adresovat základní i rozšíenou pam (128 + 128 B)) Prostednictvím DPTR lze adresovat pam programu, nebo vnjší pam dat Auto relativní adresování se využívá k vtvení programu V souasné dob se asto používají pamti se sériovou sbrnicí (pomalejší komunikace, ale jednodušší struktura obvodu) 33 Cviení k probrané kapitole Objasnte pojem adresa Popište nepímé adresování Uvete signály, které souvisí s adresováním vnjší pamti 9 / 33

4 Instrukní soubor monolitického µ-poítae typu 8051 Klíové pojmy: instrukce, pseudoinstrukce, makroinstrukce 41 Úvod do problematiky Instrukce je kódovaný píkaz urený procesorovému jádru Krom instrukcí se používají tzv pseudoinstrukce, tyto jsou ureny pekladai (nepekládají se do cílového programu, ale ovlivují peklad) Pseudoinstrukce dlíme na direktivy assembleru (viz téma 22) a makroinstrukce (zjednodušen vyjádeno oznaují pedem definované posloupnosti instrukcí) Makroinstrukce nezkracují program, ale šetí as programátora a zlepšují pehlednost zápisu zdrojového textu Instrukní soubor monolitických µ-poíta na bázi jádra I8051 je tvoen 111 instrukcemi Je však použito pouze 43 rzných mnemonických zkratek pro 33 odlišných funkcí (Nkterým funkcím písluší vtší poet vyjádení (nap: mov, movx, movc ~ pesuny), jiné mají shodnou mnemonickou zkratku, ale jiný operand nebo jiný zpsob adresování) Celkový poet instrukcí tvoících instrukní soubor je dán aplikací požadovaných funkcí na rzné druhy operand Dlení instrukcí podle rzných kritérií Dlení s ohledem na dobu potebnou k provedení jedno taktové instrukce ~ 64 instrukcí dvou taktové instrukce ~ 45 instrukcí ty taktové instrukce ~ 2 instrukce Dlení s ohledem na velikost instrukce o o o jedno bajtové instrukce ~ 49 instrukcí dvou bajtové instrukce ~ 46 instrukcí tí bajtové instrukce ~ 16 instrukcí Dlení s ohledem na realizovanou funkci instrukce aritmetických operací ~ 24 instrukcí instrukce logických operací a posun ~ 25 instrukcí instrukce pesun ~ 28 instrukcí instrukce bitových operací ~ 12 instrukcí instrukce skok, volání a jiné ~ 22 instrukcí Legenda pro oznaení operand v obecném zápisu instrukcí rn ~ registry R0 R7 data ~ numerická hodnota ri ~ registry R0 a R1 Sreg ~ zdrojové místo dir ~ buka MEM (pímá adresa) Dreg ~ cílové místo rel ~ relativní adresa bit ~ oznaení bitu adr ~ absolutní adresa reg ~ místo nebo hodnota 10 / 33

42 Dlení instrukcí podle funkce Instrukce aritmetických operací ~ umožní zvtšení (zmenšení) obsahu pamového místa Jedná se o osmi bitový aritmetický souet (voliteln i s píznakem penosu) Rozdíl osmi bitových hodnot s ohledem na penos Korekci pi manipulaci s BCD ísly Souin a podíl osmi bitových ísel Lze pracovat jak s pamovými místy, tak i konstantami Instrukce logických operací a posun ~ umožní operace AND, OR (IOR), XOR, NOT a rotace Lze pracovat jak s pamovými místy, tak i konstantami Instrukce pesun ~ umožní (využitím pímého a nepímého adresování) realizovat pesuny osmi bitových hodnot v rámci celého adresového prostoru Dále umožní realizovat vzájemnou zámnu obsah pamových míst, naítání datových konstant z pamti programu a operace se zásobníkem Instrukce bitových operací ~ umožní nastavení (nulování) bit v bitov adresovaném prostoru pamti a ve speciálních funkních registrech pístupných bitovou adresou Logický souet nebo souin bitu s píznakem penosu (Funkce píznaku penosu je zde obdobná jako funkce akumulátoru pro aritmetické operace) Instrukce skok, volání podprogram a jiné ~ umožní nepodmínné i podmínné skoky v programu Dále umožní volání podprogram, návrat z podprogram a obsluhu perušení Zde adíme i instrukce využitelné k vtvení program na základ vyhodnocení podmínky po pedchozím provedení operace 43 Cviení k probrané kapitole Objasnte pojmy instrukce a pseudoinstrukce Popište kritéria použitá k dlení instrukcí Uvete symbolické oznaení operand pro zápis instrukcí 11 / 33

5 Instrukní soubor monolitických µ-poíta s jádrem I8051 Není-li to výslovn uvedeno, instrukce neovlivuje píznakové bity v PSW 51 Instrukce aritmetických operací add a,sreg ~ pitení obsahu zdrojového místa k obsahu akumulátoru Výsledek operace je uložen v akumulátoru Instrukce ovlivuje bity: C, AC, OV a P add a,rn ~ souet akumulátoru a registru aktuální registrové banky add a,dir ~ souet akumulátoru a pímo adresované buky pamti RWM add a,@ri ~ souet akumulátoru a nepímo adresované buky pamti RWM add a,#data ~ souet akumulátoru a datové konstanty addc a,sreg ~ pitení obsahu zdrojového místa a píznaku penosu k obsahu akumulátoru Výsledek operace je uložen v akumulátoru Instrukce ovlivuje bity: C, AC, OV a P addc a,rn ~ souet akumulátoru, C a registru aktuální registrové banky addc a,dir ~ souet akumulátoru, C a pímo adresované buky pamti RWM addc a,@ri ~ souet akumulátoru, C a nepímo adresované buky pamti RWM addc a,#data ~ souet akumulátoru, C a datové konstanty subb a,sreg ~ odetení obsahu zdrojového místa a C od obsahu akumulátoru Výsledek operace je uložen v akumulátoru Instrukce ovlivuje bity: C, AC, OV a P subb a,rn ~ rozdíl akumulátoru a registru aktuální registrové banky subb a,dir ~ rozdíl akumulátoru a pímo adresované buky pamti RWM subb a,@ri ~ rozdíl akumulátoru a nepímo adresované buky pamti RWM subb a,#data ~ rozdíl akumulátoru a datové konstanty inc reg ~ zvýšení obsahu adresovaného místa o jedna (inkrementace) inc a ~ inkrementace akumulátoru inc rn ~ inkrementace adresovaného registru aktuální registrové banky inc dir ~ inkrementace pímo adresované buky RWM inc @ri ~ inkrementace nepímo adresované buky RWM inc dptr ~ inkrementace ukazatele datové pamti dec reg ~ snížení obsahu adresovaného místa o jedna (dekrementace) dec a ~ dekrementace akumulátoru dec rn ~ dekrementace adresovaného registru aktuální registrové banky dec dir ~ dekrementace pímo adresované buky RWM dec @ri ~ dekrementace nepímo adresované buky RWM mul ab ~ aritmetický souin obsah akumulátoru a registru b Nižší bajt výsledku je uložen v akumulátoru, vyšší bajt výsledku v registru b Instrukce ovlivuje: OV, P, C=0 div ab ~ obsah akumulátoru je vydlen obsahem registru b Podíl je uložen v akumulátoru a zbytek v registru b Instrukce ovlivuje: OV, P, C=0 da a ~ dekadická korekce (obnoví BCD tvar ísla po aritmetické operaci) Instrukce ovlivuje: C, AC, P Funkce: 1) Je-li hodnota nižší tetrády akumulátoru vyšší než 9, nebo je-li nastaven píznak AC, bude k nižší tetrád pitena hodnota 6 2) Je-li hodnota vyšší tetrády akumulátoru vyšší než 9, nebo je-li nastaven píznak C, bude k vyšší tetrád pitena hodnota 6 12 / 33

52 Instrukce logických operací a posun anl a,sreg ~ logický souin obsahu zdrojového místa a obsahu akumulátoru Výsledek je uložen v akumulátoru Instrukce ovlivuje: P anl a,rn ~ logický souin akumulátoru a registru aktuální registrové banky anl a,dir ~ logický souin akumulátoru a pímo adresované buky anl a,@ri ~ logický souin akumulátoru a nepímo adresované buky anl a,#data ~ logický souin akumulátoru a konstanty anl Dreg,Sreg ~ logický souin obsahu zdrojového a obsahu cílového místa Výsledek je uložen v Dreg anl dir,a ~ logický souin akumulátoru a pímo adresované buky anl dir,#data ~ logický souin pímo adresované buky a konstanty orl a,sreg ~ logický souet obsahu zdrojového místa a obsahu akumulátoru Výsledek je uložen v akumulátoru Instrukce ovlivuje: P orl a,rn ~ logický souet akumulátoru a registru aktuální registrové banky orl a,dir ~ logický souet akumulátoru a pímo adresované buky orl a,@ri ~ logický souet akumulátoru a nepímo adresované buky orl a,#data ~ logický souet akumulátoru a konstanty orl Dreg,Sreg ~ logický souet obsahu zdrojového a obsahu cílového místa Výsledek je uložen v Dreg orl dir,a ~ logický souet akumulátoru a pímo adresované buky orl dir,#data ~ logický souet pímo adresované buky a konstanty xrl a,sreg ~ výluný logický souet obsahu zdrojového místa a obsahu akumulátoru Výsledek je uložen v akumulátoru Instrukce ovlivuje: P xrl a,rn ~ výluný logický souet akumulátoru a registru aktuální registrové banky xrl a,dir ~ výluný logický souet akumulátoru a pímo adresované buky xrl a,@ri ~ výluný logický souet akumulátoru a nepímo adresované buky xrl a,#data ~ výluný logický souet akumulátoru a konstanty xrl Dreg,Sreg ~ výluný logický souet obsahu zdrojového a obsahu cílového místa Výsledek je uložen v Dreg xrl dir,a ~ výluný logický souet akumulátoru a pímo adresované buky xrl dir,#data ~ výluný logický souet pímo adresované buky a konstanty clr a ~ nulování obsahu akumulátoru cpl a ~ negování obsahu akumulátoru rl a ~ rotace obsahu akumulátoru o jednu pozici vlevo rr a ~ rotace obsahu akumulátoru o jednu pozici vpravo rlc a ~ rotace obsahu akumulátoru pes píznak C o jednu pozici vlevo rrc a ~ rotace obsahu akumulátoru pes píznak C o jednu pozici vpravo swap a ~ zámna obsah vyšší a nižší tetrády akumulátoru 13 / 33

53 Instrukce pesun dat mov Dreg,Sreg ~ kopírování obsahu zdrojového místa do cílového místa (osm bit) mov a,rn ~ kopírování registru aktuální registrové banky do akumulátoru mov a,dir ~ kopírování pímo adresované buky do akumulátoru mov a,@ri ~ kopírování nepímo adresované buky do akumulátoru mov a,#data ~ vložení konstanty do akumulátoru mov rn,a ~ kopírování akumulátoru do registru aktuální registrové banky mov rn,dir ~ kopírování pímo adresované buky do registru mov rn,#data ~ vložení konstanty do registru aktuální registrové banky mov dir,a ~ kopírování akumulátoru do pímo adresované buky mov dir,rn ~ kopírování registru do pímo adresované buky mov Ddir,Sdir ~ kopírování pímo adresované buky do pímo adresované buky mov dir,@ri ~ kopírování nepímo adresované buky do pímo adresované buky mov dir,#data ~ vložení konstanty do pímo adresované buky mov @ri,a ~ kopírování akumulátoru do nepímo adresované buky mov @ri,dir ~ kopírování pímo adresované buky do nepímo adresované buky mov @ri,#data ~ vložení konstanty do nepímo adresované buky mov dptr,#data16 ~ vložení 16-bitové konstanty do ukazatele datové pamti movc a,@a+dptr ~ kopírování relativn adresovaných dat z pamti programu do akumulátoru movc a,@a+pc ~ auto relativní kopírování dat z pamti programu do akumulátoru movx a,@sreg ~ kopírování z vnjší pamti do akumulátoru s využitím nepímé adresy Instrukce ovlivuje: P movx a,@ri ~ -- -- horní bajt adresy je samostatn nastaven na portu P2 movx a,@dptr ~ -- -- celá 16-bitová adresa je generována instrukcí movx @Dreg,a ~ kopírování akumulátoru do vnjší pamti movx @ri,a ~ -- -- horní bajt adresy je samostatn nastaven na portu P2 movx @dptr,a ~ -- -- celá 16-bitová adresa je generována instrukcí xch a,sreg ~ zámna obsah zdrojového místa a akumulátoru Instrukce ovlivuje: P xch a,rn ~ zámna akumulátoru a registru aktuální registrové banky xch a,dir ~ zámna akumulátoru a pímo adresované buky xch a,@ri ~ zámna akumulátoru a nepímo adresované buky xchd a,@ri ~ zámna nižších tetrád akumulátoru a nepímo adresované buky Instrukce ovlivuje: P push dir ~ vložení pímo adresované buky do zásobníku Instrukce inkrementuje ukazatel zásobníku (K archivaci akumulátoru je nutno použít oznaení acc) pop dir ~ vložení informace z vrcholu zásobníku do pímo adresované buky Instrukce dekrementuje ukazatel zásobníku (K archivaci akumulátoru je nutno použít oznaení acc) 14 / 33

54 Instrukce bitových operací clr bit ~ nulování adresovaného bitu (bit = 0) clr c ~ nulování píznaku C setb bit ~ nastavení adresovaného bitu (bit = 1) setb c ~ nastavení píznaku C cpl bit ~ negace adresovaného bitu cpl c ~ negace píznaku C anl c,bit ~ logický souin adresovaného bitu a píznaku C Výsledek je uložen v C anl c,/bit ~ logický souin negace adresovaného bitu a píznaku C Výsledek uložen v C orl c,bit ~ logický souet adresovaného bitu a píznaku C Výsledek je uložen v C orl c,/bit ~ logický souet negace adresovaného bitu a píznaku C Výsledek uložen v C mov c,bit ~ kopírování adresovaného bitu do píznaku C mov bit,c ~ kopírování píznaku penosu do adresovaného bitu Je zejmé, že instrukce jejichž cílový registr se nachází v PSW obsah tohoto registru ovlivují 55 Instrukce skok, volání a jiné acall adr11 ~ krátké volání podprogramu (v rámci prostoru 2kB) Obsah PC je uložen na vrchol zásobníku Dolních 11 bit PC je pepsáno lcall adr16 ~ dlouhé volání podprogramu (v rámci prostoru 64kB) Obsah PC je uložen na vrchol zásobníku Obsah PC je pepsán ret ~ návrat z podprogramu Dva bajty z vrcholu zásobníku jsou vloženy do PC reti ~ návrat z podprogramu pro obsluhu perušení Dva bajty z vrcholu zásobníku jsou vloženy do PC Je povoleno perušení stejné a nižší priority ajmp adr11 ~ krátký nepodmínný skok Pepsání nižších 11 bit PC ljmp adr16 ~ dlouhý nepodmínný skok Pepsání všech16 bit PC sjmp rel8 ~ relativní skok na vzdálenost ± 2 7 =128 (Osmý bit uruje smr skoku) jmp @a+dptr ~ relativní nepímý skok Obsah akumulátoru je považován za sedmibitové íslo se znaménkem v druhém doplku jz rel ~ podmínný skok na relativní adresu byl-li výsledek pedchozí operace 0 jnz rel ~ podmínný skok na relativní adresu nebyl-li výsledek pedchozí operace 0 jc rel ~ podmínný skok na relativní adresu je-li nastaven píznak C jnc rel ~ podmínný skok na relativní adresu není-li nastaven píznak C jb bit,rel ~ podmínný skok na relativní adresu je-li adresovaný bit nastaven 15 / 33

jnb bit,rel ~ podmínný skok na relativní adresu není-li adresovaný bit nastaven jbc bit,rel ~ podmínný skok na relativní adresu je-li adresovaný bit nastaven a nulování adresovaného bitu cjne reg1,reg2,rel ~ podmínný skok na relativní adresu v pípad, že obsahy reg1 a reg2 nejsou shodné Je-li reg2 > reg1 dojde k nastavení píznaku C Je-li reg1 reg2 dojde k nulování píznaku C cjne a,dir,rel ~ podmínný skok po porovnání akumulátoru a pímo adresované buky cjne a,#data,rel ~ podmínný skok po porovnání akumulátoru a konstanty cjne rn,#data,rel ~ podmínný skok po porovnání registru aktuální registrové banky a konstanty cjne @ri,#data,rel ~ podmínný skok po porovnání nepímo adresované buky a konstanty djnz reg,rel ~ dekrementace registru a relativní skok v pípad, že obsah registru není 0 Instrukce ovlivuje: OV, P, C=0 djnz rn,rel ~ podmínný skok po dekrementaci registru aktuální registrové banky djnz dir,rel ~ podmínný skok po dekrementaci pímo adresované buky nop ~ prázdná instrukce (neprovádí žádnou innost a trvá jeden takt) 16 / 33

6 Píklady použití instrukcí v programu Klíové pojmy: tetráda, nulování, nastavení a negace vybraných bit v bajtu 61 Jednoduché programové segmenty Píklad 1: Zapište segment programu, který zkopíruje dolní tetrádu portu P1 do pamové buky (symbolicky oznaené zip) ve vnitní pamti equ zip,127 ; piazení jména zip hodnot 127 mov a,p1 ; kopírování informace z portu P1 do akumulátoru anl a,#b 00001111 ; nulování horní tetrády z portu P1 mov zip,a ; archivace výsledku Píklad 2: Zapište segment programu, který zkopíruje dolní tetrádu portu P3 do horní tetrády pamové buky zip ve vnitní pamti Obsah dolní tetrády zip nesmí být zmnn anl zip,#b 00001111 ; nulování horní tetrády ZIP mov a,p3 ; tení informace z portu P3 anl a,#b 00001111 ; nulování horní tetrády z portu P3 swap a ; píprava pro zápis do horní tetrády ZIP orl zip,a ; zápis do horní tetrády ZIP Píklad 3: Zapište segment programu, který neguje 0, 5 a 7 bit v buce zip Ostatní bity nech jsou zachovány xrl zip,#b 10100001 ; negování vybraných bit v buce ZIP Píklad 4 Zapište segment programu, který neguje bity 0, 5 a 7 v buce zip Ostatní bity nech jsou nulovány anl zip,#b 10100001 ; nulování bit 1, 2, 3, 4 a 6 v buce ZIP xrl zip,#b 10100001 ; negace bit 0, 5 a 7 v buce ZIP Píklad 5: Zapište segment programu, který neguje bity 0, 5 a 7 v buce zip Ostatní bity nech jsou nastaveny orl zip,#b 01011110 ; nastavení bit 1, 2, 3, 4 a 6 v buce ZIP xrl zip,#b 10100001 ; negace bit 0, 5 a 7 v buce ZIP Píklad 6: Zapište segment programu, který vloží do buky zip dvojnásobek hodnoty z portu P1 V pípad, že výsledek > 255 nech dojde k nastavení F0 v PSW clr c ; pro realizaci souinu mov a,p1 ; tení informace z portu rlc a ; A=A*2 mov zip,a ; archivace výsledku jnc Skip ; výsledek není > 255 (b 11111111) skok setb f0 ; výsledek je > 255 Skip: ; další ; ásti ; programu 62 Cviení k probrané kapitole Objasnte použití píkazu equ zip,127 Popište funkci instrukce anl a,#b 00001111 Uvete alternativní ešení k dosažení shodné funkce pro jnc Skip 17 / 33

7 Aritmetické operace s ísly v rzných íselných soustavách Klíové pojmy: pímá adresa, nepímá adresa, instrukce add, instrukce addc, programový cykl 71 Seítání osmi bitových a šestnácti bitových ísel start Píklad 1: Zakreslete algoritmus a zapište program realizující souet dvou osmi bitových konstant a výsledek archivujte v registru R7 aktuální registrové banky pøesun K1 do A pøiètení K2 k A pøesun A do R7 stop (1) (2) (3) Popis funkce algoritmu: (1) Do akumulátoru se vloží jedna z konstant urených k soutu (2) Po té se k obsahu akumulátoru (k první konstant) pite druhá konstanta (akumulátor již obsahuje výsledek) (3) Nakonec se výsledek zkopíruje do registru R7 Program pro souet 8-mi bitových ísel code mov a,#b 00101101 ; K1 je v binárním tvaru add a,#25 ; K2 je v dekadickém tvaru mov r7,a ; archivace výsledku end Algoritmus soutu 8-mi bitových ísel Popis funkce programu: Symbol # (hash) je zde ve funkci prefixu a íselná hodnota vpravo od nj je pekladaem považována za konstantu Symboly b oznaují íselnou soustavu (binární) íslo 25 nemá urenou íselnou soustavu (pedznamenání pro dekadickou íselnou soustavu je nepovinné) Všeobecné zásady: Jednotlivé píkazy v programu se píší na samostatné ádky Direktivy assembleru jsou pedznamenány znakem teka (konkrétní syntaxe je závislá na zvoleném pekladai) Jednotlivá pole píkazové ádky oddlujeme tabulátorem Za stedníkem je možno používat znaky s eskou diakritikou 18 / 33

Píklad 2: start Zakreslete algoritmus a zapište program realizující souet dvou šestnácti bitových ísel a dolní bajt výsledku archivujte v registru R7 a horní bajt výsledku v registru R6 aktuální registrové banky pøesun K1L do A pøiètení K2L k A (1) (2) Popis funkce algoritmu: Seítáme-li více bajtová ísla, postupujeme od bajt s nejnižší váhou (1) Do akumulátoru je zde umístn nižší bajt prvního ísla (2) V dalším kroku je k nmu piten nižší bajt druhého ísla (3) Takto získaný nižší bajt výsledku je archivován na požadovaném míst (R7) Obdobný postup je použit pro souet vyšších bajt obou ísel pøesun A do R7 pøesun K1H do A pøiètení K2H k A pøesun A do R6 stop (3) Program pro souet 16-ti bitových ísel code mov a,#h 0a2 ; K1L je v hexa tvaru add a,127 ; K2L je v RWM mov r7,a ; archivace výsledku mov a,@r0 ; K1H - nepímá adresa addc a,#27 ; K2H v dekadickém tvaru mov r6,a ; archivace výsledku end Popis funkce programu: Symboly h pedznamenávají íslo v haxa soustav íslo v hexa soustav má cifru s vyšší váhou vyšší než 9 a proto musí být pedazena 0 Algoritmus soutu 16-ti bitových ísel K soutu bajt s nejnižší váhou je použita instrukce add, je-li výsledek operace vyšší než 255, dojde k nastavení píznaku C (v opaném pípad bude píznak C nulován) Symbol @ pedznamenává nepímou adresu (zde do akumulátoru je pesunut obsah pamové buky jejíž adresa se nachází v registru R0 aktuální registrové banky) K soutu bajt s vyšší váhou je použito instrukce addc, která zohleduje pípadné nastavení píznaku C, ke kterému mohlo dojít v soutu nižších bajt 19 / 33

72 Seítání BCD ísel podprogram souètu pøesun alfa do R0 (1) Píklad 3: Zakreslete algoritmus a zapište program realizující souet ísel BCD uložených v RWM tak, že na nižších adresách jsou vyšší dvojice íslic Adresy nejnižších slabik ísel jsou symbolicky oznaeny ALFA a BETA Délka ísel (poet obsazených slabik) je symbolicky oznaena jako POET Pedpokládá se, že ísla mají shodnou délku a sudý poet íslic Výsledek a je uložen na místo pvodní hodnoty prvního ísla pøesun beta do R1 pøesun pocet do R2 nulování C pøesun hodnoty do A pøiètení hodnoty k A (1) (2) Popis funkce algoritmu: Souet bude realizován využitím cyklu za použití nepímého adresování K nepímému adresování lze použít registry R0 a R1 (1) Souet bude realizován postupn od cifer s nejnižší váhou (do R0 a R1 jsou umístny adresy cifer s nejnižší váhou) (2) Registr R2 poslouží jako poítadlo cykl (3) Poet prchod cyklem je závislý na velikosti ísel Program pro souet BCD ísel mov r0,#alfa ; poátení mov r1,#beta ; adresy ísel mov r2,#pocet ; poet cifer clr c ; addcadd dekadická korekce aktualizace adresy a poèítadla hotovo? souèet dokonèen (3) Cykl: mov a,@r0 ; cifra prvního ísla addc a,@r1 ; cifra druhého ísla da a ; obnovení BCD mov @r0,a ; archivace výsledku dec r0 ; píští dec r1 ; adresy djnz r2,cykl ; seteno? ; ano! Algoritmus soutu BCD ísel 20 / 33

73 Rozdíl osmi bitových ísel Píklad 4: Zapište programový segment realizující rozdíl dvou osmi bitových ísel Pedpokládejte použití µ-poítae jehož procesorové jádro nedisponuje instrukcí pro rozdíl ísel Úkol je tedy nutno ešit software-ov Rozbor úlohy: Úkol bude ešen využitím druhého doplku 13-4 9 1101-0100 1001 1 1011 + 0001 1100 Za pedpokladu, že menšenec menšitel = rozdíl lze tento rozdíl vypoíst tak, že k menšenci piteme druhý doplnk menšitele První doplnk menšitel získáme tak, že menšitele negujeme (0100 1011) Druhý doplnk vytvoíme z prvního doplku tak, že k tomuto piteme íslo 1 (1011 + 1 = 1100) Dojde-li pi soutu menšence a druhého doplku menšitele k penosu, je výsledek kladný, nedojde-li k penosu je výsledek záporný, a je poteba jej vyjádit v druhém doplku 2 1101 + 1100 11001 Program pro rozdíl 8-mi bitových ísel code equ dil,127 ; definice equ nec,126 ; použitých equ tel,125 ; MEM bunk 4-13 - 9 0100-1101 - 1001 mov a,tel ; první a cpl a ; druhý inc a ; doplnk add a,nec ; rozdíl jc Result ; výsledek 0 skok cpl a ; úprava záporného inc a ; výsledku 1 0010 + 0001 0011 setb f0 ; píznak záporného výsledku 2 0100 + 0011 00111 3 1000 + 0001-1001 Result: mov dil,a ; archivace výsledku end 21 / 33

74 Rozdíl šestnácti bitových ísel Píklad 5: Zapište programový segment realizující rozdíl dvou šestnácti bitových ísel Pedpokládejte použití µ-poítae jehož procesorové jádro nedisponuje instrukcí pro rozdíl ísel Úkol je tedy nutno ešit software-ov Program pro rozdíl 16-ti bitových ísel equ dill,127 ; nižší a vyšší equ dilh,126 ; bajt rozdílu equ tell,125 ; nižší a vyšší equ telh,124 ; bajt menšitele equ necl,123 ; nižší a vyšší equ nech,122 ; bajt menšence mov a,tell ; druhý doplnk cpl a ; dolního bajtu add a,#1 ; menšitele mov dill,a ; jeho archivace mov a,telh ; druhý doplnk cpl a ; horního bajtu addc a,#0 ; menšitele mov dilh,a ; jeho archivace mov a,dill ; rozdíl dolních add a,necl ; bajt mov dill,a ; uložení výsledku mov a,dilh ; rozdíl horních addc a,nech ; bajt mov dilh,a ; uložení výsledku K funkci programu: Pi realizaci rozdílu více bajtových rozdíl jsou druhé doplky vyšších bajt realizovány prostednictvím penosu z nižších bajt Vzhledem k tomu, že instrukce inc nemanipuluje s píznakem C, je nutno k inkrementaci použít instrukci add Instrukce addc a,#0 realizuje pitení píznaku C k obsahu akumulátoru 22 / 33

75 Algoritmus násobení osmi bitových ísel naètení èinitelù nulování poèítadla, souèinu a pøíznaku pøenosu Realizujeme-li aritmetický souin dvou osmi bitových ísel, výsledek mže být maximáln šestnácti bitový (255 * 255 = 65025 (65535 > 65025)) K uložení výsledku tedy postaí dva osmi bitové registry Píklad: 12 * 13 = 156 1100 * 1101 1100 0000 1100 1100 10011100 Souin je ešen postupnými souty initele1 v závislosti na tom, zda testované bity initele2 nabývají hodnoty 1 (viz pedmt CIT druhý roník) a = èinitel 2 rotace akumulátoru vpravo pres C èinitel2 = a Testované bity initele2 jsou postupn poínaje LSb b7 b6 b5 b4 b3 b2 b1 b0 C C == 1 souèinh = souèinh +èinitel1 rotace (souèinh) vpravo pøes C rotace (souèinl) vpravo pøes C ++ poèítadlo zavádny do píznaku C Posun druhého sítance vlevo, nebo posun prvního sítance vpravo vyvolá shodnou zmnu vzájemné polohy obou sítanc Druhé ešení je však s ohledem na zápis programu výhodnjší Bit pitený na poátku k LSb horního bajtu souinu bude po osmi rotacích pesunut na pozici LSb dolního bajtu souinu Píznak C musí být ped dvojitou rotací roven 0 Tato podmínka je pro další rotace zajištna tím, že i dolní bajt souinu je na poátku vynulován (bity Z jsou nulové) V prbhu rotace oznaené I se LSb horního bajtu (X) pesune do píznaku C V prbhu rotace II se obsah píznaku C (X) pesune na pozici MSb dolního bajtu (Y) I horní bajt X C Y Z poèítadlo == 8 II dolní bajt Dojde tak k propojení dvou osmi bitových registr, ímž vznikne požadovaný šestnácti bitový registr Algoritmus souinu 8-mi bitových ísel 23 / 33

76 Cviení k probrané kapitole Objasnte použití instrukce add k realizaci inkrementace Popište funkci instrukce da a Pi realizaci souinu uvete dvody vedoucí k použití posunu prvního sítance vpravo, místo posunu druhého sítance vlevo 24 / 33

8 Brzdící a zpožovací smyky Klíové pojmy: brzdící smyka, zpožovací smyka, vnoení U CC U CC 81 Brzdící smyky BT1 R1 PXY R2 BT2 PXY Pipojení mechanického spínae k I/O brán V technické praxi je asto poteba realizovat reakci µ-poítae na podnty z vnjšího prostedí (napíklad: ekání na stisk klávesy, signál z idla, ) Mechanický spína lze k µ-poítai pipojit v zásad dvojím zpsobem Sepnutím spínae BT1 se na I/O brán vytvoí úrove H, ale sepnutím spínae BT2 se na I/O brán vytvoí úrove L Druhý zpsob sice funguje v negativní logice, ale je energeticky mén nároný Uvedené algoritmy ukazují rzné zpsoby vyhodnocení sepnutí mechanických kontakt a liší se podle úelu použití: yes? yes? akce akce algoritmus 1 yes? yes? algoritmus 2 yes? yes? akce akce 1 akce 2 algoritmus 3 algoritmus 4 25 / 33

Po aktivaci kontaktu v pípad prvního algoritmu bude segment akce opakovan provádn až do deaktivace kontaktu Po aktivaci kontaktu v pípad druhého algoritmu bude segment akce proveden pouze jednou (pedpokládáme, že použitý kontakt je ešen jako bez zákmitový) Tetí algoritmus se od druhého liší v tom, že segment akce bude vykonán až po deaktivaci kontaktu V pípad tvrtého algoritmu slouží mechanický kontakt k vtvení programu Ukázka software-ového ešení: Program pro první algoritmus Button: jnb p37,button ; nesepnuto skok ; realizace akce ajmp Button ; návrat k testu kontaktu Program pro druhý algoritmus ButtNo: jnb p37,buttno ; nesepnuto skok ; realizace akce ButtYs: jb p37,buttys ; sepnuto skok ajmp ButtNo ; návrat k testu kontaktu ButtNo: Program pro tetí algoritmus jnb p37,buttno ; nesepnuto skok ButtYs: jb p37,buttys ; sepnuto skok ; realizace akce ajmp ButtNo ; návrat k testu kontaktu 26 / 33

Program pro tvrtý algoritmus jnb p37,akce2 ; nesepnuto skok ; realizace akce1 ajmp EndAkce ; vynechání segmentu akce2 Akce2: ; realizace akce2 EndAkce: ; pokraování programu 27 / 33

82 Zpožovací smyky Pi konstrukci poíta lze sledovat snahy o eliminaci veškerých zpoždní v zájmu dosažení maximálního výpoetního výkonu Pesto je však nkdy nezbytné realizovat v programech asové prodlevy (Napíklad: dosažení požadované doby signalizace, doba otevení elektromagnetického zámku dveí, ) K realizaci asové prodlevy lze využít ítae asovae v režimu asova, na požadovanou dobu lze µ- poíta uvést do režimu sleep, nebo lze µ-poíta zamstnat opakovaným provádním programového segmentu výchozí nastavení reg výchozí nastavení regi, rege - - reg - - regi reg = = 0 regi = = 0 Jednoduchá zpožovací smyka - - rege rege = = 0 Zpožovací smyka s vnoením Jednoduchá zpožovací smyka mov tau,#200 ; nastavení doby zpoždní acall Wait ; volání zpožovací smyky Wait: djnz tau,wait ; (I) je-li TAU > 0 skok ret ; (II) návrat z podprogramu 28 / 33

Výpoet doby potebné k realizaci segmentu: kde: t clk = 200 * I + II = 200* 24 + 24 = 4824 = kde: clk ~ poet period signálu z oscilátoru clk 200 ~ zde zvolená konstanta I, II ~ doba potebná k provedení instrukce (viz instrukní soubor) clk f = clk 4824 12*10 6 = 0,402 ms t ~ doba potebná k provedení programového segmentu f clk ~ použitá frekvence oscilátoru clk Doba zpoždní je pomrn krátká K realizaci delších asových prodlev lze adit programy zpožovacích smyek za sebe, ale výsledné zpoždní by bylo dáno pouze soutem dílích zpoždní Výhodnjší je použití zpožovací smyky s vnoením Wait: Zpožovací smyka s vnoením mov tau1,#100 ; nastavení mov tau2,#0 ; doby zpoždní acall Wait ; volání zpožovací smyky djnz tau2,wait ; (I) vnitní smyka djnz tau1,wait ; (II) vnjší smyka ret ; (III) návrat z podprogramu Výpoet doby potebné k realizaci segmentu: kde: t clk = ( 256* I + II)*100 + III = (256* 24 + 24)*100 + 24 = 616824 = kde: clk clk ~ poet period signálu z oscilátoru clk 256 ~ poet pebh vnitní smykou 100 ~ poet pebh vnjší smykou I, II, III ~ doba potebná k provedení instrukce (viz instrukní soubor) clk f = 616824 12*10 6 = 51,402 ms t ~ doba potebná k provedení programového segmentu f clk ~ použitá frekvence oscilátoru clk K dosažení zpoždní ádov sekundy lze snížit frekvenci oscilátoru clk (dojde i ke snížení výpoetního výkonu µ-poítae), nebo použít vícenásobného vnoení úkol Použijeme-li k realizaci asové prodlevy íta / asova, lze procesorové jádro využít k ešení jiných Není-li poteba navyšovat výpoetní výkon, lze systém uvést do režimu sleep a snížit tak spotebu zaízení 29 / 33

yes? wait yes? akce Kombinací brzdící a zpožovací smyky lze napíklad dosáhnout toho, že segment akce bude proveden až po déle trvajícím sepnutí kontakt (nebo po optovném sepnutí kontakt ve vhodném okamžiku) Reakce až na déle trvající sepnutí kontakt Press: jnb p37,press ; nestisknuto skok acall Wait ; zpožovací smyka jnb p37,press ; nestisknuto skok ; akce Pedpokládáme, že podprogram Wait je již napsán a je k dispozici 83 Cviení k probrané kapitole Objasnte úel s funkci jednoduché brzdící smyky Popište funkci jednoduché zpožovací smyky Uvete a popište vztah k výpotu doby pebhu programu Reakce až na "déle" trvající sepnutí kontakt 30 / 33

9 Zadání a rozbor projektu íslo jedna (pevodník BCD pro 7-mi segmentový display) 91 Zadání projektu Na bázi monolitických µ-poíta jsou asto realizována zaízení, která s obsluhou komunikují interaktivním zpsobem Ke komunikaci lze využít napíklad levný 7-mi segmentový displej íselné hodnoty v binárním tvaru je pak poteba pevést do tvaru vhodného k zobrazení na displeji K pevodu lze využít HW pevodník (napíklad D146-7), nebo lze pevod realizovat samotným µ-poítaem Toto ešení má adu výhod jednodušší struktura obvodu, nižší cena, vyšší spolehlivost, menší rozmry, nižší hmotnost a menší píkon Navrhované zaízení a binární kód pivedený na dolní tetrádu portu P3 zobrazuje na displeji, který je pipojen k nižším sedmi bitm portu P1 K zobrazení bude použita sedmi segmentová zobrazovací jednotka se spolenou anodou +5V K A K B K C K D K E K F K G 7xR p10 p11 p12 p13 p14 p15 p16 a f e g b c Schéma elektrického propojení prvk displeje a rezistor omezijících proud tekoucí jeho segmenty a uspoádání segment na displeji d K rozsvícení segmentu je poteba pivést k píslušnému vstupu úrove L Výpoet hodnot rezistor omezujících proud tekoucí segmenty není pedmtem tohoto návrhu Zadání: Na bázi -poítae 8051 navrhnte systém, který po stisku tlaítka pipojeného k portu P37 pevede binární hodnotu petenou z dolní tetrády portu P3 do tvaru vhodného k zobrazení 7-mi segmentovým displejem se spolenou anodou Jednomu stisku tlaítka nech odpovídá pouze jedna pevedená hodnota Návrh bude obsahovat: Zadání, teoretický rozbor, schéma zapojení, algoritmus s popisem, program s komentáem a závr 31 / 33

92 Rozbor projektu start výchozí nastavení enter? enter? input convert output Redukovaný algoritmus pevodu K pevodu binární hodnoty lze využít napíklad pevodní tabulku umístnou v pamti programu K natení požadované hodnoty z tabulky lze využít instrukci movc a,@a+dptr Popis funkce: Do dptr vložíme adresu poátku pevodní tabulky (v symbolickém tvaru) Do akumulátoru pak vložíme hodnotu urenou k pevodu a po provedení instrukce movc bude akumulátor obsahovat pevedenou hodnotu Vlastní tabulka je tvoena direktivami db Ukázka možného ešení pevodu Table: mov dptr,#table ; nastavení vztažné adresy movc a,@a+dptr ; tení hodnoty z tabulky ; poátek tabulky db b 11000000, b 11111001, b 10100100, db Pevod prostednictvím tabulky lze realizovat i využitím instrukce movc a,@a+pc Pevod lze realizovat i jinými zpsoby (napíklad naítáním hodnot z RWM využitím nepímého adresování, naítáním konstant) 32 / 33

10 Píloha instrukní soubor Na následujících stranách je uveden instrukní soubor monolitických µ-poíta s jádrem I8051 vyrábných firmou Atmel Instrukní soubor obsahuje: mnemonickou zkratku instrukce; symbolicky vyjádené operandy (pokud jsou u dané instrukce používány); struný popis funkce; údaj o velikosti instrukce (poet bajt); údaj o dob potebné k provedení instrukce Rozdlení instrukcí do kategorií se ponkud liší od rozdlení, které je uvedeno v kapitole 5 této publikace 33 / 33