Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


11.4.12. Szubrutinhívás


Assembly programozás tartalomjegyzék


      A szubrutinok (alprogramok) olyan programrészletek, amelyek a főprogram bármely pontjáról végrehajtathatóak és végrehajtásuk után a főprogram a félbehagyás helyétől folytatódik. Szubrutinként a többször ismétlődő programrészleteket célszerű megvalósítani, amivel a program hossza nagy mértékben csökkenthető.
      A PIC mikrovezérlők a szubrutinok felhasználását közvetlenül támogatják. A programmemória tetszőleges helyén elhelyezett szubrutin futása a program tetszőleges helyéről indítható a CALL szubrutinhívó utasítás segítségével. A CALL utasítás hatására a programszámláló értéke a nyolc-szintes hardver verembe kerül, és a programfutás a szubrutinnal folytatódik.
      A szubrutin utolsó utasítása hivatott arra, hogy a programfutást visszairányítsa a főprogramra, ezért ez a RETURN vagy RETLW utasítás kell, hogy legyen. Ezek hatására a veremből, az ott elhelyezett visszatérési cím átkerül a programszámlálóba, és a főprogram a szubrutinhívás utáni utasítással folytatódik. A RETLW utasítás a visszatéréskor egy, az utasításban megadott, 8 bites konstanst tölt be a W munkaregiszterbe.

      Példaprogram szubrutinhívásra:

... ...    
  call SUB_1 ;szubrutinhívás
  ...    
  ...    
  ...    
SUB_1 ...    
  ...    
  return   ;visszatérés a szubrutinból a 0. lapra

      A CALL szubrutinhívó utasításnál a PC (programszámláló) értéke, a majdani visszatérési cím, a verembe kerül, majd az alsó 11 bit az utasításból, a felső kettő pedig a PCLATH regiszterből töltődik be. A PCLATH értékét előre be kell állítani a szubrutin helyének megfelelően (csak 2k-nál nagyobb programmemória esetén).

Szubrutinhívás

11.4.12-2. Ábra

      A RETURN és RETLW visszatérő utasítások esetén a verem tetejéről a visszatérési cím a PC-be töltődik. A PCLATH regiszter nem kerül felhasználásra.

Szubrutin-végrehajtás után

11.4.12-3. Ábra

Vissza a lap tetejére

      A szubrutinok egymásbaágyazhatóak, vagyis egy szubrutinból is hívható ugyanaz vagy egy másik szubrutin.
      A nyolc-szintes verem nyolcszoros szubrutin egymásbaágyazódást enged meg. Ez azt jelenti, hogy a főprogramtól számítva maximálisan nyolc szubrutinhívás szerepelhet visszatérő utasítás nélkül. Ezen felül már programfutási hiba keletkezik. A verem túlcsordulásáról a közepes teljesítményű PIC mikrovezérlők nem adnak visszajelzést, így a programnak kell megfelelően üzembiztosnak lennie.

      Azoknál a mikrovezérlőknél, ahol a programmemória nagyobb, mint 2k x 14 bit, memórialapozási eljárásokra lehet szükség. Ha a CALL szubrutinhívó utasítás egy másik memórialapra irányul, a memórialapot előzőleg szoftveresen ki kell választani. A CALL utasításban 11 bites cím van tárolva, amely csak 2k-s memóriahatárig képes címezni. Ha a mikrovezérlő programmemóriája 4k vagy 8k, a teljes terület címzéséhez szükség van még egy , illetve két címzőbitre. A CALL utasításnál a 13 bites programszámláló alsó 11 bitjét az utasítás adja meg, a felső egy vagy két bitet pedig a PCLATH vezérlő regiszter egyes bitjei a fenti ábrák szerint.
      Tehát a lapozás a PCLATH regiszter 3. és 4. bitjének beállításával történik a következő táblázatnak megfelelően.

11.4.12-1. Táblázat
PCLATH Elérhető
programmemória
terület
Memórialap
száma
4. 3.
0 0 0000h..07FFh 0. lap
0 1 0800h..0FFFh 1. lap
1 0 1000h..17FFh 2. lap
1 1 1800h..1FFFh 3. lap

      Szubrutinból való visszatérésnél nincs szükség lapozásra, mivel a veremben a teljes 13 bites visszatérési cím tárolva van.
      Azoknál a mikrovezérlőknél, ahol a programmemória 2k vagy kisebb, a PCLATH regiszter 3. és 4. bitje nincs felhasználva. A programkompatibilitási problémák elkerülése miatt célszerű a regisztert csak bit-szintű utasításokkal kezelni. (Például a CLRF PCLATH nullázó utasítások miatt egy nagyobb programmemóriájú mikrovezérlőhöz a program már csak átírással használható.)

      Példaprogram szubrutinhívásra a 0. lapról az 1. lapra:

  ...    
  bsf PCLATH,3 ;az 1. lap beállítása
  bcf PCLATH,4 ;az 1. lap beállítása (opcionális)
  call SUB_1 ;szubrutinhívás
  ...    
       
SUB_1 ...    
  ...    
  return   ;visszatérés a szubrutinból a 0. lapra

 

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra