. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Škola programování PIC-10 díl
Škola programování PIC 10

Škola programování PIC 10

Přerušení

Přerušení je funkce, která po předem nastavené akci přeruší aktuální činnost procesoru a vykoná danou práci. Poté se procesor vrátí zpět a pokračuje kde skončil. Jinými slovy procesor dokončí právě rozdělanou instrukci a skočí na 4 řádek programu! Zde se nachází rutina, která do pomocných registrů uloží pracovní registr W a další tři důležité registry - STATUS, PCLATH a FSR a skočí na podprogram obsluhy přerušení. Zde se obvykle zjistí jaký typ přerušení proběhl (pokud nepoužíváte jen jedno) a provede se příslušná akce. Při návratu z přerušení se opět obnoví uložené registry a příkazem RETFIE se procesor vrátí přesně do místa kde byl před přerušením a pokračuje zde dál.

Zdrojů přerušení je samozřejmě víc. Zapnou se jen ty, co jsou zrovna potřeba. Takže přerušení lze provést od:
- změny na pinu RB0/INT
- změny na pinech RB4 - RB7
- přetečení TMR0
- TMR1
- TMR2
- změny stavu komparátoru
- USART
- CCP

A vlastní sytém přerušení vypadá takhle:

A k čemu je to vlastně dobrý? Nemusíte neustále hlídat stav těchto "věcí". Například máte na pinech RB4 až RB7 tlačítka, nemusíte se tedy neustále dotazovat na jejich stav. Jednoduše nastavíte příslušné přerušení a vše proběhne automaticky.
Přerušení od přetečení některého z časovačů se používá na tvorbu přesných časů, atd.

Takže se podíváme na programovou obsluhu:
W_save equ 20h
Sta_sav equ 21h
PCL_sav equ 22h
FSR_sav equ 23h


V úvodu nastavíme názvy "záložních" registrů.

org 00h
goto INIT

org 04h
movwf W_save
movf STATUS,W
clrf STATUS
movwf Sta_sav
movf PCLATH,w
movwf PCL_sav
movf FSR,w
movwf FSR_sav
GOTO PRERUS

Těmito příkazy se na první řádek paměti s programem vloží skok na začátek vlastního programu a na 4 řádek se vloží rutina k přerušení. Touto rutinou, jak už bylo uvedeno v úvodu se do pomocných registrů uloží hodnoty nejdůležitějších registrů. Poté se provede skok na podprogram PRERUS.

PRERUS BTFSC PIR1,0
    GOTO PRET1
    GOTO PRERKON

    PRET1 BCF PIR1,0
     NOP
    GOTO PRERKON


Zde se zjistí zdroj přerušení a vykonají se požadované příkazy (momentálně NOP).

PRERKON BSF STATUS,RP0
MOVLW B'00000001'
MOVWF PIE1
MOVLW B'11000000'
MOVWF INTCON
BCF STATUS,RP0
clrf STATUS

movf FSR_sav,w
movwf FSR
movf PCL_sav,w
movwf PCLATH
movf Sta_sav,w
movwf STATUS
swapf W_save,f
swapf W_save,w
retfie


No a nakonec se musí znovu povolit požadovaná přerušení, tedy přesně těchhle prvních sedm řádků je přítomno i v místě kde se nastavují I/O piny a podobně. Poté se obnoví zpět uložené registry a procesor se vrátí na původní adresu.

V následujícím jednoduchém příkladu je přerušení využito ke snímání stisku tlačítka. Tedy funkce jako v Prvním příkladu, jedním stiskem zapne, druhým vypne.


Schéma zapojení

Odkazy & Download:
Preruseni.asm
Preruseni.hex







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (1):

Zobrazit starší 30 dnů (1)...

host
1. Dne 01. 06. 2009 v 22:28 zaslal host
dotaz
Mám dotaz, v programu je přerušení nastavené na port RB0. potřeboval bych přerušení nastavit na port RB4,. Jak mám změnit daný program ,aby bylo přerušení nastaveno na port RB4 ? Za radu děkuji.


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
Aktivní GPS anténa 2JM011
Aktivní anténa GPS zajišťuje kvalitní a čistý signál i za zhoršených podmínek.
od 172 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007