<< 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.
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.
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.
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.
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).
ˇ 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.
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.)
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).
ˇ 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.
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.
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.
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 >>