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: 14417, Oldal olvasási idő: kb. 2 perc
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! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |