<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
7.6. Megszakítás programozás
A megszakításkezelés programozása két részből,
ˇ
a főprogramban elhelyezett megszakítás-beállító, -engedélyező és -tiltó programsorok;
ˇ
és a megszakításkezelő szubrutin megírásából áll.
Egy megszakítás beállítást mutat be a következő programrészlet.
... clrf STATUS ;a regiszter nullázása clrf INTCON ;az engedélyező és jelzőbitek törlése clrf PIR1 ;a periféria megszakítás jelzőbitek törlése bsf STATUS,RP0 ;az 1. memórialap kiválasztása movlw B'01101010' ;a megszakítás engedélyező maszk bevitele movwf PIE1 ;a maszk érvényesítése bcf STATUS,RP0 ;a 0. memórialap kiválasztása ... bsf INTCON,GIE ;globális megszakítás engedélyezés ...
A megszakításkezelő szubrutin (alprogram) feladatai:
ˇ
szükség esetén a W munkaregiszter és a STATUS regiszter értékének mentése és a megszakításkezelés után ezek helyreállítása;
ˇ
több engedélyezett megszakítás esetén a forrás prioritásos meghatározása;
ˇ
a megszakításkérés kezelése;
ˇ
a lekezelt megszakításkérés jelzőbitjének törlése.
A következő folyamatábra egy tipikus megszakításkezelő szubrutint mutat be.
A folyamatábra alapján a következő program állítható össze.
... isr: movwf W_TEMP ;a W másolása a W_TEMP-be swapf STATUS,W ;a STATUS bitcserés másolása a W-be movwf STATUS_TEMP ;a W (STATUS) másolása a STATUS_TEMP-be clrf STATUS ;a 0. memórialap kiválasztása btfsc INTCON,T0IF ;Timer0 túlcsordulás vizsgálata goto t0i ;ugrás, ha a Timer0 túlcsordult btfsc INTCON,RBIF ;B port változás vizsgálata goto rbi ;ugrás, ha változás történt btfsc PIR1,ADIF ;A/D átalakító jelzőbit vizsgálata goto adi ;ugrás, ha a konverzió befejeződött goto end ;nincs aktív jelzőbit t0i: ... ;a túlcsordulási esemény lekezelése ... bcf INTCON,T0IF ;a jelzőbit nullázása goto end ;ugrás a szubrutin végére rbi: ... ;a változás lekezelése ... bcf INTCON,RBIF ;a jelzőbit nullázása goto end ;ugrás a szubrutin végére adi: ... ;az A/D eredmény kezelése ... bcf PIR1,ADIF ;a jelzőbit nullázása end: swapf STATUS_TEMP,W ;a STATUS_TEMP bitcserés másolása a W-be movwf STATUS ;a STATUS_TEMP másolása a STATUS-ba swapf W_TEMP,F ;a W_TEMP bitcseréje swapf W_TEMP,W ;a W_TEMP másolása a W-be retfie ;visszatérés a megszakításból ...
Ha a jelzőbitek vizsgálata során a szubrutin nem talál aktív jelzőbitet, akkor hibás programműködésről van szó. Ennek lekezelésére beépíthető egy külön programrész, amely megteszi a szükséges lépéseket. A hiba oka valószínűleg egy akaratlanul engedélyezett megszakítás.
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>