Struktura a architektura počítačů

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

Struktura a architektura počítačů

Struktura a architektura počítačů

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Stručný úvod do programování v jazyce C 2.díl. České vysoké učení technické Fakulta elektrotechnická

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

MIKROKONTROLERY PIC16F84

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Systémová struktura počítače

ŘÍZENÍ ELEKTRICKÝCH POHONŮ. Systémová struktura počítače Řízení běhu programu. České vysoké učení technické Fakulta elektrotechnická

Algoritmizace a programování

Systém přerušení. Algoritmizace a programování. Struktura počítače - pokračování. Systémová struktura počítače pokrač.

Mikrokontroléry PIC a vestavěné systémy. PIC18 použití assembleru a jazyka C

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

CONFIGURATION zapisuje se na začátek programu použitím direktivy preprocesoru pragma

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Struktura a architektura počítačů

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


CONFIGURATION zapisuje se na začátek inicializační části programu použitím direktivy preprocesoru pragma

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Programování PICAXE18M2 v Assembleru

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Struktura a architektura počítačů

Microchip. PICmicro Microcontrollers

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


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

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

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

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

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

Monolitické mikropoèítaèe II

INFORMAČNÍ LED DISPLEJ

Základy digitální techniky

Struktura a architektura počítačů

Mikrořadiče. Ing. Jaroslav Bernkopf

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

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

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

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

MIDAM MW 240 modbus 2 x DI, 2 x DO

Metody připojování periferií BI-MPP Přednáška 2

Struktura a architektura počítačů

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 1. díl. České vysoké učení technické Fakulta elektrotechnická

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2

STŘEDNÍ PRŮMYSLOVÁ ŠKOLA SDĚLOVACÍ TECHNIKY Praha 1, Panská 856/3, , ,

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í

Osmibitové mikrořadiče Microchip PIC16F1937

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Opakování. České vysoké učení technické Fakulta elektrotechnická

Organizace pam ového prostoru 1

Mikrořadiče řady 8051.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Jednočipové mikropočítače

MIKROPOČÍTAČOVÉ SYSTÉMY

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

IMTEE Přednáška č. 11

Nejčastěji pokládané dotazy

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

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

Osmibitové mikrořadiče Microchip PIC16F887

Vstup-výstup Input-Output Přehled a obsluha

Model ver SYSTEM EXCLUSIVE KOMUNIKACE CHD Elektroservis

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

Úvod do mobilní robotiky NAIL028

Popis instrukční sady procesoru ADOP

A0M38SPP - Signálové procesory v praxi - přednáška 10 2

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

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

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


Historie osmibitových mikroprocesoru a mikroradicu ZILOG.

Příklady popisu základních obvodů ve VHDL

Jazyk symbolických adres

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

Průvodce programováním AMiNi-E jazykem STL Dipl. Ing. Pavel Votrubec

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 2. díl. České vysoké učení technické Fakulta elektrotechnická

Algoritmizace a programování

Algoritmizace a programování

dspic33: Přerušení, čítače a Change Notification

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

Periferní operace využívající přímý přístup do paměti

Přednáška - Čítače. 2013, kat. měření, ČVUT - FEL, Praha J. Fischer. A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1

Jazyk VHDL konstanty, signály a proměnné. Jazyk VHDL paralelní a sekvenční doména. Kurz A0B38FPGA Aplikace hradlových polí

Přerušení POT POT. Přerušovací systém. Přerušovací systém. skok do obslužného programu. vykonávaný program. asynchronní událost. obslužný.

PicoBlaze lekce 1: assembler, C překladač a simulační prostředí Jiří Svozil, Leoš Kafka, Jiří Kadlec svozil@utia.cas.cz

DIODOVÉ HODINY. Dominik Roček. Středisko Vyšší odborná škola a Středisko technických a uměleckých oborů Mariánská ulice 1100, Varnsdorf

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

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

Opakování programování

Algoritmizace a programování

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

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

Symbolický název Velik. Adresa Význam Jednotky

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

Procesor z pohledu programátora

Operační paměti počítačů PC

DESKA ANALOGOVÝCH VSTUPŮ A VÝSTUPŮ ±24mA DC, 16 bitů

Operační systémy. Přednáška 4: Komunikace mezi procesy

Transkript:

Struktura a architektura počítačů Systémová struktura počítače Instrukční soubor II Příklady návrhu České vysoké učení technické Fakulta elektrotechnická Ver.1.30 J. Zděnek / M. Chomát 2014

Assembler (Jazyk symbolických instrukcí) Assembler Jazyk symbolických instrukcí (též Jazyk symbolických adres) Nejbližší vyšší stupeň nad strojovým kódem Používá symbolická jména instrukcí, proměnných, konstant, adres paměti programu i dat Umožňuje využít všechny vlastnosti daného typu počítače a jeho instrukčního souboru Nekontroluje téměř žádné nedovolené (nevhodné) kroky programátora (rozdíl od vyšších programovacích jazyků JAVA, C) Používá se v časové kritických částech programů, nebo tam kde danou operaci nelze naprogramovat ve vyšším jazyku V řídicích aplikací je typická kombinace částí programu v assembleru a částmi v jazyku C Program v assembleru je nepřenosný na jinou platformu, je vázaný na instrukční soubor určitého typu procesoru A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 2

Direktivy assembleru Direktivy assembleru umožňují: Řídit překlad Označit začátek programu Označit konec programu Určit umístění programu v paměti programu Určit umístění proměnných v paměti dat Založit symbolická jména zvolených míst v programu (adres) Založit symbolická jména proměnných Zajistit inicializaci (nast. počáteční hodnoty) vybraných proměnných Založit symbolická jména konstant a nastavit jejich hodnoty Vkládat do programu konstanty v různých formátech (dec,hex,bin) Nastavit konfigurační bity počítače Vkládat (zatahovat) do programu další části programu ze souboru Označit části programu (moduly) symbolickým jménem (Makro) a pod timto jménem moduly v programu používat A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 3

Příklad (Tlačítko, LED, přerušení, časovač) Příklad návrhu Zadání: V asembleru mikropočítače pic18f87j11 napište program, který testuje zda bylo zmáčknuto tlačítko S1. Při každém zmáčknutí se rozsvítí vždy jedna další LED dioda počínaje diodou připojenou na nejnižší bit portu. Po osmi zmáčknutí S1 bude svítit všech 8 LED diod a při dalším mačkání tlačítka zůstávají všechny diody rozsvícené. Tlačítko je připojena na bit RB0 portu B. V klidové poloze (nezmáčknuto) je stav tlačítka snímán jako logická '1', po zmáčknutí se snímá logická '0'. Osm světelných diod je připojeno na port D. Pokud se na příslušný bit portu D vysílá logická '0', dioda nesvítí. Logická '1' vyslaná na bit portu D diodu rozsvítí. Pro řešení použijte vzorkování stavu tlačítka s periodou přibližně 200ms. Vzorkování tlačítka zorganizujte s využitím jednohladinového systému přerušení a časovače TIMER0. Časovač naprogramujte do 16bitového módu, s hodinami odvozenými od hodin procesoru. Použijte vhodnou hodnotu předděličky u časovače TIMER0. Činnost programu dle zadání zapište do ISR (Interrupt Service Routine), která budu volaná vždy po žádosti o přerušení od časovače TIMER0 (žádost se vyvolá po přetečení časovače z maximální hodnoty (samé '1') do nuly. Na pozadí programu (background) bude pouze prázdná nekonečná smyčka. A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 4

pic18f Family Interrupt System (Priority Mode) High Priority Enable GIEH HIGH PRIORITY Priority Encoder INTRQ LOW PRIORITY xip yip GIEL IPEN xie yie Priority System On xif yif Low Priority Enable INPUT Event Detector........ Clk Timer Interrupt Priority INTERRUPT RESOURCES Interrupt Enable Interrupt Flag (Request) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 5

pic18f Family Interrupt System (Non Priority Mode) Input Interrupt Enable NON PRIORITY MODE IPEN = 0 All Interrupt Enable INTRQ PEIE GIE IPEN = 0 xie yie Non Priority Mode xif yif INPUT Event Detector........ Clk Timer Interrupt Enable INTERRUPT RESOURCES Interrupt Flag (Request) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 6

Nastavení systému přerušení - RCON A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 7

Nastavení systému přerušení - RCON A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 8

Nastavení systému přerušení - INTCON A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 9

Nastavení systému přerušení - INTCON A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 10

Nastavení systému přerušení INTCON2 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 11

Nastavení systému přerušení INTCON2 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 12

Nepodmíněný skok, absolutní adresa A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 13

Nepodmíněný skok, relativní adresa A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 14

Nastavení bitu registru A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 15

Nulování bitu registru A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 16

Návrat z obsluhy přerušení (ISR) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 17

pic18f Family Program Memory PROGRAM COUNTER PROGRAM MEMORY SP STACK POINTER Top of Stack -TOS 5 PC STACK 1 31 018AF4h 21 21 000000h 000008h 000018h RESET HIGH PRIORITY LOW PRIORITY RESET VECTOR HIGH PRIORITY INTERRUPT VECTOR LOW PRIORITY INTERRUPT VECTOR INTERRUPT VECTOR TABLE TOS REGISTERS TOSU 01h 8 TOSH 8Ah 8 TOSL F4h 8 TABLE READ IMPLEMENTED MEMORY (FLASH) 01FFF8h 01FFFFh CONFIG. WORDs PROGRAM MEMORY ADDRESS SPACE Read as 0 1FFFFFh 16 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 18

pic18f Family Interrupt System (Non Priority Mode) Input Interrupt Enable NON PRIORITY MODE IPEN = 0 All Interrupt Enable INTRQ PEIE GIE IPEN = 0 xie yie Non Priority Mode xif yif INPUT Event Detector........ Clk Timer Interrupt Enable INTERRUPT RESOURCES Interrupt Flag (Request) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 19

Nastavení systému přerušení - inicializace ORG 0x00000 Reset_vector: goto Start ORG 0x00008 Interrupt_vector: goto Timer0_int ; Program start ; Interrupt vector table/ ; (one item here only) DIREKTIVY INSTRUKCE PROMĚNNÉ KONSTANTY ORG 0x00100 Start: ; bsf INTCON, TMR0IE ; Timer0 interrupt enable bsf INTCON, GIE ; Non priority mode (IPEN=0 by default) ; Loop: ; Background loop nop ; do nothing bra Loop KOMENTÁŘ A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 20

Obsluha žádosti o přerušení (Timer0 overflow) ; TIMER0 ISR (Interrupt Service Routine) ; Timer0_int: ; Save context, only example, background empty here/ ; (no context) ; bcf INTCON, TMR0IF ; Clear intrerrupt flag (NECESSARY) ; ; ; ; Restore context ; retfie ; Return from interrupt DIREKTIVY INSTRUKCE PROMĚNNÉ KONSTANTY KOMENTÁŘ A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 21

Časovač Timer0 konfigurace 16bitů TIMER0 Overflow Interrupt Flag TMR0IF A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 22

Nastavení časovače Timer0, 16bitů A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 23

Nastavení časovače Timer0, 16bitů A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 24

Konstanta do střadače A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 25

Střadač do registru A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 26

Nastavení časovače Timer0, 16bitů #define TIMER0_FOSC_PRESC8_16bit b'00000010' DIREKTIVY INSTRUKCE movlw TIMER0_FOSC_PRESC8_16bit movwf T0CON ; Configure Timer0 bsf T0CON, TMR0ON ; Timer0 ON PROMĚNNÉ KONSTANTY KOMENTÁŘ A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 27

Programovatelné vstupní nebo výstupní porty LAT nebo PORT Výstupní registr TRIS Nastavení směru 0 -> Output 1 -> Input PORT Vstupní registr A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 28

Nastavení vstupních a výstupních portů A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 29

Nulování střadače nebo registru A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 30

Rotace vlevo bez přenosu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 31

Test bitu a podmíněný skok A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 32

Registr do registru A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 33

Zapojení portu D a B (LED diody a tlačítka S1, S2) PORTD S1 PORTB bit RB0 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 34

Programovatelné vstupní nebo výstupní porty LAT nebo PORT Výstupní registr TRIS Nastavení směru 0 -> Output 1 -> Input PORT Vstupní registr A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 35

Inicializace a obsluha portu D a B ; Initialization clrf reg ; reg = 0 clrf WREG ; WREG = 0 movwf TRISD ; PORTD -> all bits outputs, LEDs movwf PORTD ; PORTD = 00h -> LEDs off bsf TRISB, BIT0 ; PORTB.bit0 = input, push button S1 DIREKTIVY INSTRUKCE PROMĚNNÉ KONSTANTY Timer0_int: ; ISR action ; rlncf reg, 1 ; Rotate one bit left, destination reg btfss PORTB, RB0 ;? Pushbutton S1 pressed bsf reg, BIT0 ; Yes, insert '1' to LSB movff reg, LATD ; Output reg to port D (or PORTD), LEDs ; retfie ; Return from interrupt KOMENTÁŘ A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 36

Souhrn programování SFR pro tento program A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 37

Příklad (Tlačítko, LED, přerušení, časovač) Souhrn informací k řešení příkladu Zadání: V asembleru mikropočítače pic18f87j11 napište program, který testuje zda bylo zmáčknuto tlačítko S1. Při každém zmáčknutí se rozsvítí vždy jedna další LED dioda počínaje diodou připojenou na nejnižší bit portu. Po osmi zmáčknutí S1 bude svítit všech 8 LED diod a při dalším mačkání tlačítka zůstávají všechny diody rozsvícené. Tlačítko je připojena na bit RB0 portu B. V klidové poloze (nezmáčknuto) je stav tlačítka snímán jako logická '1', po zmáčknutí se snímá logická '0'. Osm světelných diod je připojeno na port D. Pokud se na příslušný bit portu D vysílá logická '0', dioda nesvítí. Logická '1' vyslaná na bit portu D diodu rozsvítí. Pro řešení použijte vzorkování stavu tlačítka s periodou přibližně 200ms. Vzorkování tlačítka zorganizujte s využitím jednohladinového systému přerušení a časovače TIMER0. Časovač naprogramujte do 16bitového módu, s hodinami odvozenými od hodin procesoru. Použijte vhodnou hodnotu předděličky u časovače TIMER0. Činnost programu dle zadání zapište do ISR (Interrupt Service Routine), která budu volaná vždy po žádosti o přerušení od časovače TIMER0 (žádost se vyvolá po přetečení časovače z maximální hodnoty (samé '1') do nuly. Na pozadí programu (background) bude pouze prázdná nekonečná smyčka. A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 38

Sdílené prostředky (sdílí je procedury) Souhrn informací k řešení příkladu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 39

Dynamické přemapování a přímá adresa REMAPPING & SHORT DIRECT ADDRESS 000h DATA MEMORY 00h Souhrn informací k řešení příkladu BANK 0 05Fh 060h 5Fh 60h 0FFh 100h FFh 00h GPR ACCESS BANK 00h DISABLED (HIDDEN) BANK 1 BANK 14 EFFh F00h FFh 00h SFR WREG STATUS 8 5Fh 60h FFh BANK 15 F5Fh F60h WREG STATUS 5Fh 60h SPECIAL FUNCTION REGISTERS MEMORY MAPPED INPUT/OUTPUT SPACE FFFh 8 FFh REMAPPING A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 40

pic18f Family Program Memory SP STACK POINTER Top of Stack -TOS TOS REGISTERS 5 PC TOSU 01h PROGRAM COUNTER STACK 1 31 8 018AF4h TOSH 8Ah IMPLEMENTED MEMORY (FLASH) 8 TOSL F4h 21 21 8 000000h 000008h 000018h 01FFF8h 01FFFFh PROGRAM MEMORY RESET HIGH PRIORITY LOW PRIORITY CONFIG. WORDs Souhrn informací k řešení příkladu RESET VECTOR HIGH PRIORITY INTERRUPT VECTOR LOW PRIORITY INTERRUPT VECTOR INTERRUPT VECTOR TABLE TABLE READ PROGRAM MEMORY ADDRESS SPACE Read as 0 1FFFFFh 16 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 41

pic18f Family Interrupt System (Non Priority Mode) Souhrn informací k řešení příkladu Input Interrupt Enable NON PRIORITY MODE IPEN = 0 All Interrupt Enable INTRQ PEIE GIE IPEN = 0 xie yie Non Priority Mode xif yif INPUT Event Detector........ Clk Timer Interrupt Enable INTERRUPT RESOURCES Interrupt Flag (Request) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 42

Časovač Timer0 konfigurace 16bitů Souhrn informací k řešení příkladu TIMER0 Overflow Interrupt Flag TMR0IF A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 43

Zapojení portu D a B (LED diody a tlačítka S1, S2) Souhrn informací k řešení příkladu PORTD S1 PORTB bit RB0 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 44

Programovatelné vstupní nebo výstupní porty Souhrn informací k řešení příkladu LAT nebo PORT Výstupní registr TRIS Nastavení směru 0 -> Output 1 -> Input PORT Vstupní registr A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 45

Celý program (Timer0 overflow interrupt) - 1 ; Press Explorer pic18 S1 pushbutton -> switch on next led on port D #include P18F87J11.inc CONFIG FOSC = HS CONFIG WDTEN = OFF CONFIG XINST = OFF #define TIMER0_FOSC_PRESC8_16bit b'00000010' #define BIT0 0 #define F 1 UDATA_ACS wreg_tmp: res 1 ; Program variables status_tmp: res 1 bsr_tmp: res 1 reg: res 1 DIREKTIVY INSTRUKCE PROMĚNNÉ KONSTANTY KOMENTÁŘ ORG 0x00000 Reset_vector: goto Start ORG 0x00008 Interrupt_vector: goto Timer0_int ; Program start ; Interrupt vectro table (one item here) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 46

Celý program (Timer0 overflow interrupt) - 2 ORG 0x00100 Start: clrf reg ; reg = 0 clrf WREG ; WREG = 0 movwf TRISD ; PORTD -> all bits outputs, LEDs movwf PORTD ; PORTD = 00h, LEDs off bsf TRISB, BIT0 ; PORTB.bit0 = input, push button S1 movlw TIMER0_FOSC_PRESC8_16bit movwf T0CON ; Configure Timer0 bsf T0CON, TMR0ON ; Timer0 ON ; bsf INTCON, TMR0IE ; Timer0 interrupt enable bsf INTCON,GIE ; Non priority mode ; (IPEN = 0 by default) Loop: nop ; Do nothing, background loop bra Loop A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 47

Celý program (Timer0 overflow interrupt) - 3 ; === Timer0 overflow ISR (Interrupt Service Routine) === Timer0_int: movff STATUS, status_tmp ; Save context, only example movff WREG, wreg_tmp ; background empty here movff BSR, bsr_tmp ; (no context save necessary) bcf INTCON, TMR0IF ; Clear intrerrupt flag (IMPORTANT) rlncf reg, F ; Rotate one bit left btfss PORTB, RB0 ;? Pushbutton S1 pressed bsf reg, BIT0 ; Yes, insert '1' to lsb movff reg, LATD ; Output reg to port D (or PORTD), LEDs movff bsr_tmp, BSR movff wreg_tmp, WREG movff status_tmp, STATUS retfie ; Restore context ; Return from ISR, reenable interrupt END A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 48

Detektor posloupnosti bitů 110 (FSA typu Moore) Příklad návrhu Navrhněte synchronní konečný automat (FSA Finite State Automaton), který v proudu vstupních bitů detekuje posloupnost 110. Detekci každé takové posloupnosti automat indikuje na výstupu blikáním LED diody. V ostatních stavech automatu LED dioda svítí nepřerušovaně. Náběžná hrana x 1 indikuje na vstupu 1, náběžná hrana x 0 pak 0. Automat realizujte programovými prostředky a využitím hardwareové podpory. Použijte jednohladinový systém přerušení a časovač. Vstupy x 1 a x 0 se zadávají tlačítky s mechanickým kontaktem a odskoky při změně hodnoty. Program automatu musí odskoky filtrovat, sestavte a použijte filtrační algoritmus ( debounce circuit ). I (Inputs) x 1 x 0 clk FSA S i y O (Outputs) (Moore) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 49

Detektor posloupnosti bitů 110 (FSA typu Moore) Příklad návrhu I (Inputs) x 1 x 0 FSA S i y O (Outputs) clk (Moore) clk x 1 x 0 1 1 0 0 1 1 0 y LED svítí bliká A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 50

Detektor posloupnosti bitů 110 (FSA typu Moore) Co máme navrhnout? Příklad návrhu Budicí funkce Stavový registr Logika výstupů D Q LKO1 LKO2 0 I C clk A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 51

Detektor posloupnosti bitů 110 (FSA typu Moore) Stavový diagram I Vstupy (Inputs) O Výstupy (Outputs) S i i-tý stav I 0 I 0 S 0 0 0 I 1 Příklad návrhu 0 1 S 3 I 0 S 1 0 0 Tabulka přechodů I 1 Tabulka výstupů S i I 0 I 1 S i O i S 0 S 0 S 1 S 1 S 0 S 2 I 0 S 2 0 0 I 1 S 0 O 0 S 1 O 0 S 2 S 3 S 2 S 2 O 0 S 3 S 0 S 1 I 1 S 3 O 1 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 52

Dekompozice problému - 1 Příklad návrhu START ISR INITIALIZATION X1, X2 INPUT DEBOUNCE FSA STATE LOGIC BACKGROUND DO NOTHING FSA OUTPUT LOGIC RET 6ms TIME IF TCLK TIMER A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 53

Dekompozice problému - 2 DEBOUNCE ALGORITHM PRINCIPLE Příklad návrhu SHIFT LEFT BOUNCE IN 1 x x x x x 1 0 1 RAW INPUT AND AND SAMPLE MASK 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 XOR XOR 1 s MASK 0 0 0 0 0 1 1 1 0 s MASK 0 0 0 0 0 0 0 0? = 0? = 0 CLEAR 1 CLEAR 0? (i.e. LAST VALUE WAS 0 ) YES, INPUT IS 1 YES, INPUT IS 0 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 54

Dekompozice problému - 3 Příklad návrhu FSA STATE LOGIC I 0 SWITCH S 0 0 0 I 0 I 1 STATE 0 STATE 1 STATE 2 STATE 3 0 1 S 3 I 0 S 1 0 0 I 1 RET I 0 S 2 0 0 I 1 I 1 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 55

Dekompozice problému - 4 Příklad návrhu FSA OUTPUT LOGIC SW TIMER - + T LED - +? 110 LED ON LED TOGGLE (300ms) RET A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 56

Detektor 110 Hlavička programu ; File: BSD3_110.asm Příklad návrhu ; Date: 04.04.2010 ; Version: 1.00 ; HW: Explorer pic18f87j11 ; IDE: MPLAB 7.50 ; Author: J.Z.; Institute: CTU in Prague, EEF Dept.13114 ; Function: Bitstream '110' detector, Moore type FSA ; Pushbutton S1 = input '1', pushbutton S2 = input '0' ; Program detects leading edge of S1, S2 pushbuttons ; FSA outputs: ; LED1,0 = FSA state_register ; LED7 = ON - no '110' bitstream detected ; LED7 = TOGGLE (approx 300 ms) - '110' bitstream detected ; Note: Pushbuttons S1, S2 are debounced (3 conscutive equal bits required) ; to be correct value detected ; Debounce S1, S2 pushbuttons routines detect leading edge only A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 57

Detektor 110 Konfigurace a konstanty Příklad návrhu #define DBG_MODE ; Conditional translation (simulator dbg) #include P18F87J11.inc CONFIG FOSC=HS CONFIG WDTEN=OFF CONFIG XINST=OFF #define F 1 #define BIT0 0 #define TIMER0_FOSC_PRESC8_16bit b'00000010' #define TIMER0_FOSC_PRESC64_8bit b'01000101 ; 6,6 ms, FOSC = 10 MHz A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 58

Detektor 110 Proměnné a konstanty Příklad návrhu UDATA_ACS ; Program variables ; Save context registers wreg_tmp: res 1 status_tmp: res 1 bsr_tmp: res 1 reg: res 1 ; FSA Moore variables and constants #define STATE_0 0 #define STATE_1 1 #define STATE_2 2 #define STATE_3 3 #define FSA_INPUT_BIT_VALUE 0 #define FSA_OUTPUT_LED_ON_TIME 45 ; t = 6.6 ms * 45 = 300 ms #define FSA_OUTPUT_LED_OFF_TIME 25 ; 170 ms A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 59

Detektor 110 Proměnné state_register res 1 next_state res 1 fsa_input res 1 fsa_output res 1 fsa_output_timer res 1 Příklad návrhu ; Pushbutton S1, S2 debounce and leading edge detection variables portb_dbg: res 1 porta_dbg: res 1 pb_s1_debounce: res 1 pb_s1_status: res 1 pb_s2_debounce: res 1 pb_s2_status: res 1 A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 60

Detektor 110 Konstanty (vstup FSA) Příklad návrhu ; Pushbutton S1, S2 debounce and leading edge detection constants #define PB_ON 0 ; Pb Sx on status bit position #define PB_OFF 1 ; Pb Sx off status bit position #define DEBOUNCE_MASK b'00000111' ; 3 equal bits required #define PB_xTIMES_ON b'00000111' #define PB_xTIMES_OFF b'00000000' A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 61

Detektor 110 Začátek programu a tab.vektorů přerušení code Příklad návrhu ORG Reset_vector: goto Start 0x00000 ; Program start ORG 0x00008 Interrupt_vector: goto Timer0_int ; Interrupt vector table (one item here) A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 62

Detektor 110 Inicializace Příklad návrhu ORG 0x00050 Start: ; Background Start clrf reg ; reg = 0 clrf WREG ; WREG = 0 movwf TRISD ; PORTD -> all bits outputs movwf PORTD ; PORTD = 00h bsf TRISB, BIT0 ; PORTB.bit0 = input, push button S1 bsf TRISA, RA5 bsf WDTCON, ADSHR bsf ANCON0, PCFG4 ; RA5 - digital input bcf WDTCON, ADSHR call Pushbutton_s1_init ; Initialize S1 debounce routine call Pushbutton_s2_init ; Initialize S2 debounce routine call Bitstream_detector_init call Bitstream_detector_output_init A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 63

Detektor 110 Inicializace a pozadí (prázdné) Příklad návrhu movlw TIMER0_FOSC_PRESC64_8bit movwf T0CON ; Configure Timer0 bsf T0CON, TMR0ON ; Timer0 ON ; bsf INTCON, TMR0IE ; Timer0 interrupt enable bsf INTCON, GIE ; Non priority mode (IPEN = 0 by default) Loop: nop ; Do nothing, background bra Loop ; ; Background END A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 64

Detektor 110 Inicializace (vstupní filtr tlačítek S1, S2) ; Init debounce pushbutton S1 (RB0) Pushbutton_s1_init: clrf pb_s1_debounce clrf pb_s1_status return ; Pushbutton_s1_init END Příklad návrhu ; Init debounce pushbutton S2 (RA5) Pushbutton_s2_init: clrf pb_s2_debounce clrf pb_s2_status return ; Pushbutton_s1_init END A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 65

Detektor 110 Vstupní filtr tlačítka S1 Pushbutton_s1: ; Debounce pushbutton S1 (RB0) Příklad návrhu movlw DEBOUNCE_MASK andwf pb_s1_debounce, F rlncf pb_s1_debounce, F ; Rotate one bit left #ifdef DBG_MODE btfss portb_dbg, RB0 ; dbg:? Push button S1 pressed (0 -> on) #else btfss PORTB,RB0 ;? Push button S1 pressed (0 -> on) #endif Pushbutton_s1_read_as_on: bsf pb_s1_debounce,bit0 ; Yes, insert '1' to LSB Pb_s1_test_off: movf pb_s1_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_OFF bnz Pb_s1_test_on A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 66

Detektor 110 Vstupní filtr tlačítka S1 Pb_s1_set_off: ; Ok, S1 debounced, read off Příklad návrhu bcf pb_s1_status, PB_ON ; Clear pushbutton S1 on bsf pb_s1_status, PB_OFF ; Set pushbutton S1 off bra Pb_s1_exit Pb_s1_test_on: movf pb_s1_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_ON bnz Pb_s1_exit ; S1 bounces yet Pb_s1_detect_leading_edge: btfss pb_s1_status, PB_OFF ; Detect leading edge bra Pb_s1_exit Pb_s1_set_pb_on: bcf pb_s1_status, PB_OFF bsf pb_s1_status, PB_ON ; Set pushbutton S1 on Pb_s1_exit: return ; Pushbutton_s1 END A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 67

Detektor 110 Vstupní filtr tlačítka S2 Pushbutton_s2: ; Debounce pushbutton S2 (RA5) Příklad návrhu movlw DEBOUNCE_MASK andwf pb_s2_debounce, F rlncf pb_s2_debounce, F ; Rotate one bit left #ifdef DBG_MODE btfss porta_dbg, RA0 ; dbg:? Push button S2 pressed (0->on) #else btfss PORTA, RA5 ;? Push button S1 pressed (0->on) #endif Pushbutton_s2_read_as_on: bsf pb_s2_debounce, BIT0 ; Yes, insert '1' to LSB Pb_s2_test_off: movf pb_s2_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_OFF bnz Pb_s2_test_on A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 68

Detektor 110 Vstupní filtr tlačítka S2 Pb_s2_set_off: ; Ok, S2 debounced, read off Příklad návrhu bcf pb_s2_status, PB_ON ; Clear pushbutton S2 on bsf pb_s2_status, PB_OFF ; Set pushbutton S2 off bra Pb_s2_exit Pb_s2_test_on: movf pb_s2_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_ON bnz Pb_s2_exit ; S2 bounces yet Pb_s2_detect_leading_edge: btfss pb_s2_status, PB_OFF ; Detect leading edge bra Pb_s2_exit Pb_s2_set_pb_on: bcf pb_s2_status, PB_OFF bsf pb_s2_status, PB_ON ; Set pushbutton S2 on Pb_s2_exit: return ; Pushbutton_s2 END A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 69

Detektor 110 Inicializace (FSA) ; Bitstream detector initialization Bitstream_detector_init: movlw STATE_0 movwf state_register movwf next_state bcf fsa_input, FSA_INPUT_BIT_VALUE return ; Bitstream_detector_init END Příklad návrhu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 70

Detektor 110 Vlastní konečný automat FSA Příklad návrhu ; Bitstream detector '110', FSA Moore Bitstream_detector: ; Test FSA input value ('0' or '1' or none) btfsc pb_s1_status, PB_ON ; S1 -> input '1' bra Bd_input_1 btfss pb_s2_status, PB_ON ; S2 -> input '0' bra Bd_exit ; No input bit Bd_input_0: bcf pb_s2_status, PB_ON ; Consume input '0' bcf fsa_input, FSA_INPUT_BIT_VALUE ; Input = '0' bra Bd_state_switch Bd_input_1: bcf pb_s1_status, PB_ON ; Consume input '1' bsf fsa_input, FSA_INPUT_BIT_VALUE ; Input = '1' A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 71

Detektor 110 Vlastní konečný automat FSA Příklad návrhu ; In Java. switch (state_register){ } Bd_state_switch: movff state_register, next_state movf state_register, W sublw STATE_0 bz Bd_state_0 movf state_register, W sublw STATE_1 bz Bd_state_1 movf state_register, W sublw STATE_2 bz Bd_state_2 bra Bd_state_3 ; There is no more states ; A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 72

Detektor 110 Vlastní konečný automat FSA Příklad návrhu Bd_state_0: ; FSA state diagram logic (See state diagram) btfss fsa_input, FSA_INPUT_BIT_VALUE ;? '1' bra Bd_set_next_state ; No, no change movlw STATE_1 movwf next_state ; Goto STATE_1 bra Bd_set_next_state Bd_state_1: btfss fsa_input, FSA_INPUT_BIT_VALUE ;? '1' bra Bd_state_1_1 movlw STATE_2 ; Yes movwf next_state bra Bd_set_next_state Bd_state_1_1: movlw STATE_0 ; No movwf next_state bra Bd_set_next_state A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 73

Detektor 110 Vlastní konečný automat FSA Bd_state_2: Příklad návrhu btfsc fsa_input,fsa_input_bit_value ;? '0' bra Bd_set_next_state ; No, no change movlw STATE_3 ; Yes movwf next_state bra Bd_set_next_state Bd_state_3: btfss fsa_input,fsa_input_bit_value ;? '1' bra Bd_state_3_1 movlw STATE_1 ; Yes movwf next_state bra Bd_set_next_state Bd_state_3_1: movlw STATE_0 ; No movwf next_state bra Bd_set_next_state A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 74

Detektor 110 Vlastní konečný automat FSA Bd_set_next_state: movff next_state, state_register Bd_exit: return ; Bitstream_detector END Příklad návrhu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 75

Detektor 110 Inicializace (FSA logika výstupů) ; Bitstream detector output initializtion ; Bitstream_detector_output_init: movlw FSA_OUTPUT_LED_ON_TIME movwf fsa_output_timer clrf fsa_output return ; ; Bitstream_detector END Příklad návrhu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 76

Detektor 110 FSA - logika výstupů ; STATEs 0,1,2 -> LED7 ON Příklad návrhu ; STATE 3 -> sequence detected -> LED7 toggle, T= approx 400 ms Bitstream_detector_output: movlw STATE_3 cpfseq state_register bra Bdo_nothing_detected Bdo_bitstream_detected: btfsc LATD, RD7 ; Send state_register, no delay bsf WREG, RD7 movff WREG, LATD Bdo_testif_bit_toggle: decfsz fsa_output_timer bra Bdo_exit Bdo_toggle_led: btfss LATD, RD7 bra Bdo_set_ledtime_on A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 77

Detektor 110 FSA - logika výstupů Bdo_set_ledtime_off: movlw FSA_OUTPUT_LED_OFF_TIME movwf fsa_output_timer bra Bdo_send_output Bdo_set_ledtime_on: movlw FSA_OUTPUT_LED_ON_TIME movwf fsa_output_timer Bdo_send_output: movff state_register, WREG Bdo_preset_led_on: bsf WREG, RD7 btfsc LATD, RD7 Příklad návrhu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 78

Detektor 110 FSA - logika výstupů Bdo_set_led_off: bcf WREG, RD7 Bdo_send_new_output: movff WREG, LATD bra Bdo_exit ; Bdo_nothing_detected: movff state_register, WREG bsf WREG, RD7 movff WREG, LATD Bdo_exit: return ; ; Bitstream_detector END Příklad návrhu A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 79

Detektor 110 - Timer0 ISR (Interrupt Service Routine) Příklad návrhu Timer0_int: ; Timer0 ISR (Interrupt Service Routine), T = 6.6 ms ; Save context (example, background empty-no context) movff STATUS, status_tmp movff WREG, wreg_tmp movff BSR, bsr_tmp ; bcf INTCON, TMR0IF ; Clear intrerrupt flag ; call Pushbutton_s1 ; Test S1 on (input '1') call Pushbutton_s2 ; Test S2 on (input '0') call Bitstream_detector ; FSA state logic call Bitstream_detector_output ; FSA output logic ; movff bsr_tmp, BSR ; Restore context movff wreg_tmp, WREG movff status_tmp, STATUS retfie ; Return from interrupt, reenable interrupt END A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 80

Struktura a architektura počítačů Systémová struktura počítače Instrukční soubor II Příklady návrhu KONEC České vysoké učení technické Fakulta elektrotechnická A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 81