Vissza a főoldalra    Vissza a PIC főoldalra

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

 


10.1.1. Programszámláló (PC) és verem


      A programmemória blokk a programszámláló értéke által kijelölt (megcímzett) utasítást juttatja az utasításregiszterbe, ahonnan az utasítás végrehajtása történik. Ez a működés követhető a mikrovezérlők általános blokkvázlatán is.
      A közepes teljesítményű PIC mikrovezérlőkbe 13 bites programszámláló van beépítve. (Kisebb mint 8k programmemória esetében is.)
      A programszámláló (PC - Program Counter) az alábbi ábrának megfelelően két részre van osztva.

A programszámláló
10.1.1-1. Ábra

      Az alsó 8 bites PCL az adatmemória része, ugyanúgy írható és olvasható, mint bármelyik más vezérlő regiszter.
      A felső 5 bites PCH viszont nem olvasható vagy írható közvetlenül. Az adatmemóriában elhelyezett PCLATH átmeneti regiszter szolgál a PCH írására. A PCLATH regiszter tartalma a PCH-ba kerül a következő eseményeknél:
     ˇ a PCL írásánál;
     ˇ a GOTO feltétel nélküli ugró utasításnál;
     ˇ a CALL szubrutinhívásnál. (Szubrutinhívás.)
      A PCLATH természetesen írható és olvasható, mint bármelyik adatmemória regiszter.
      A PCH értéke semmilyen módszerrel sem olvasható ki. A PCLATH regiszter sem követi a PCH változását. Megszakításelfogadáskor a PC-be a 0004h cím töltődik, de a PCLATH regiszter természetesen nem nullázódik le; így szükség esetén ezt a megszakításkezelő programrésznek kell nulláznia, még az elkövetkező proglamelágazás előtt, amikor is a PCLATH tartalma a PCH-ba íródik.

      A szubrutinhívások és megszakítások támogatására a közepes teljesítményű PIC mikrovezérlőkbe egy nyolc-szintű hardver verem (STACK) van beépítve, amely így nyolc szint mélységű szubrutin-egymásbaágyazódást tesz lehetővé. Szubrutinhíváskor vagy megszakításkor a visszatérési cím kerül a verembe, ami a szubrutin végrehajtása után visszaíródik a PC-be, hogy a program az eltérítés helyétől folytatódjon.
      A verem és a PC kapcsolata a közepes teljesítményű PIC mikrovezérlők általános blokkvázlatán is látható. Mivel a verem ugyanúgy 13 bit szélességű, mint a PC, a teljes visszatérési cím tárolódik. Ennek eredményeképpen a szubrutinokból való visszatérés nem igényel programmemória lapozási eljárásokat.
      A verem nem része az adatmemóriának, így nem is írható vagy olvasható szoftveresen, mitahogy a veremmutató sem.
      A verem és a PC közti adatátvitelek a PCLATH regisztert nem módosítják.
      Mivel a verem nyolcszintű, a kilencedik szubrutin egymásbaágyazás hatására a legelső szubrutin visszatérési címe törlődik, így a kívánt programműködés már nem mehet végbe. A verem állapotáról vagy esetleges túlcsordulásáról a felhasználó nem kap tájékoztatást.

Vissza a lap tetejére

      A PC és a verem működési esetei a következők lehetnek:

     ˇ Normál sorrendű programvégrehajtás, ahol a PC minden utasításbeolvasás után 1-gyel nő. Minden utasítást a szomszédos, eggyel nagyobb címen levő utasítás követ.

Normál sorrendű működéskor
10.1.1-2. Ábra

      Ez a működési mód nem igényel memórialapozási fogásokat, a laphatárokon a PC egyszerűen átlép.

     ˇ A PCL regiszter írásakor a programműködés a szoftver által kívánt helyről folytatódik, a PCH-ba a PCLATH tartalma kerül.

Számított GOTO ugrásnál
10.1.1-3. Ábra

      A PCLATH kívánt értékét előzőleg szoftveresen be kell állítani. Ez a programelágazási mód az úgynevezett számított GOTO (Computed GOTO).

Vissza a lap tetejére

     ˇ A GOTO feltétel nélküli ugró utasításnál a PC alsó 11 bitje az utasításban elhelyezett címnek megfelelően áll be, a felső bitek pedig a PCLATH regiszter alábbi ábrán látható helyiértékeiről töltődnek be.

GOTO feltétel nélküli ugráskor
10.1.1-4. Ábra

      Ahhoz, hogy a GOTO utasítás megfelelően működjön (2k-nál nagyobb programmemória esetén) a PCLATH regiszter értékét előre be kell állítani az elérni kívánt memórialapnak megfelelően.

     ˇ A CALL szubrutinhívó utasításnál a PC é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. (Szubrutinhívás.)

CALL szubrutinhíváskor
10.1.1-5. Ábra

      A PCLATH értékét itt is előre be kell állítani a szubrutin helyének megfelelően (csak 2k-nál nagyobb programmemória esetén).

Vissza a lap tetejére

     ˇ A RETURN, RETFIE, 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.

Szubrutin-végrehajtás után
10.1.1-6. Ábra

      A PCLATH regiszter nem kerül felhasználásra.

     ˇ A Reset-folyamat hatására a PC nullázódik, ugyanis a Reset-vektor a 0000h.

Reset után
10.1.1-7. Ábra

      Ilyenkor a PCLATH regiszter is nullázódik.

     ˇ Megszakításelfogadáskor a PC-be a 0004h megszakítás-vektor töltődik be.

Megszakításkor
10.1.1-8. Ábra

      Ebben az esetben viszont a PCLATH értéke változatlan marad. Ha a megszakításkezelő szubrutinban programelágazás van, akkor a PCLATH értékét az elérni kívánt memórialap helyének megfelelően előre be kell állítani.

  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