Fórum témák

» Több friss téma
Cikkek » PIC16F kontroller: Mit tegyek, ha betelt a 2K?
PIC16F kontroller: Mit tegyek, ha betelt a 2K?
Szerző: Hp41C, idő: Feb 17, 2011, Olvasva: 13293
Lapozás: OK   4 / 5

Programlapok közötti átjárás

A program inicializáló részét úgy írtam meg, hogy be lehessen mutatni a programlapok (Page-ek) között történő hivatkozást.

A táblázat indexének törlése után a Timer2 beállító rutinját hívjuk, ami az 1. lapon (Page1-en) helyezkedik el. A visszatérés után a lapválasztást a 0. lapra (Page0-ra) állítjuk. Hasonlóan történik a Timer0 beállítása a 2. lapon (Page2-n) elhelyezkedő rutinnal.

A beállítások után engedélyezzük a perifériák megszakítás kérését és a globális megszakításkérést.

Egy várakozásból és a táblázat soron következő elemének eléréséből áll a program további része, amit végtelen ciklusban futtatunk.

A várakozás a 3. lapon (Page3-on) elhelyezett rutin. Feladata az időzítők megszakítás kérésének engedélyezése, tiltása.

Annyiban különbözik az előzőktől, hogy itt már ugrás is van a rutinban. Mivel a hívásakor a PCLATH ehhez a laphoz tartozó értékkel volt feltöltve, további teendőnk csak annyi, hogy nem rontjuk el az értékét.

Táblázatkezelés:

A táblázat egy, karakterenként 6-6 adattal megadott, ASCII karaktertáblázat részlet, a 0x20 .. 0x9F kódú karakterek képe. A táblázat indexét a 0x000 .. 0x2FF tartományban minden ciklusban növeljük, és a soron következő adatot a W regiszterbe töltjük retlw utasÍtás segítségével. A táblázat 3*256 utasítás hosszú, átnyúlik a 256 utasításos határon, de úgy helyeztem el a memóriában, hogy még laphatáron is átnyúljon. Mivel az adatok retlw utasításokkal vannak tárolva, az elővételüket egy szubrutinnal kell megoldani. A táblázat nagy, így a visszatéréskor a PCLATH értéke nem ismert, a visszatérés után a hívó lapjának megfelelőre állítjuk a PCLATH értékét. Az állítást mindig a végrehajtási sorrendben következő első ugrás (goto vagy call) előtt kell elvégezni, célszerűen közvetlenül a hívás után.

A táblázat egy elemének elővételét a cím kiszámításával kezdjük. A számítást a magasabb helyiértékű byte-tal kell kezdeni, mivel az értéket a PCLATH regiszterben csak előkészítjük, így lehetőségünk van annak módosítására is az alsó byte kiszámításánál előforduló túlcsordulás esetén. A PCLATH első módosítása és a PCL regiszter írása közé goto vagy call utasítást elhelyezni nem szabad. A rutin végén a movwf PCL utasítás a programszámlálóba a PCLATH 4..0 és a W regiszter 7..0 bitjeiből készített 13 bites szót tölti.


A cikk még nem ért véget, lapozz!
Következő: »»   4 / 5
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu