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. 1 perc
Más felépítésű kontrollerek: A 16F családban vannak olyan kontrollerek is, amelyek nem rendelkeznek közös memória területtel, ami minden Bank kiválasztásnál elérhető: pl. 16F873. A probléma abból adódik, hogy a megszakítás elfogadásakor nem ismert a STATUS regiszter Bank kiválasztó bitjeinek (IRP, RP1, RP0) értéke. A megoldás az, hogy a W regiszter mentésére minden Bank -ban lefoglalunk egy-egy memória rekeszt, azokat, amelyek címének alsó 7 bitje megegyezik. például: W_save_0 a 0x07F, W_save_1 a 0x0FF, W_save_2 a 0x17F, W_save_3 a 0x1FF címekre foglaljuk. A bemutatott megszakítási mentési és visszaállítási rutinok működni fognak, ha a forrásban a következő sort elhelyezzük: #define W_save W_save_0 A mentési eljárás az éppen aktuális Bank -ba fogja menteni a W értékét. Mivel nem használjuk semelyiket sem más célra, az érték megmarad, és nem vesztünk el adatot sem. A visszaállítás során a STATUS visszaállítása egyben a Bank kiválasztást is a kérés elfogadásakor érvényes kiválasztásra állítja be. A W mentett értékét abból a Bank -ból fogja olvasni, amelyikbe mentette. Ha a programunk nem csak a 0. lapot használja, akkor azok az ötletek, amikkel megpróbálnak egy bizonyos Bank-ba menteni, nem fognak működni, mivel azelőtt tartalmaznak ugrást, mielőtt a PCLATH regisztert a megszakítás kiszolgáló program lapjára állították volna. Végszó A bemutatott program forrása innen tölthető le. A tanulmányozásához az MpLab programot és annak MPLAB SIM nevű szimulátorát ajánlom. Készítsünk egy Project -et 16F886 kontrollerre, Assembler környezetben. Adjuk a Project -hez a forrást. Állítsuk be az MPLAB SIM-et debuggernek. Abszolút módban fordítsuk le a programot. Máris kezdődhet a nyomkövetés... Mit is tegyek át más lapra? - A táblázatokat - a PCLATH -t úgyis elő kellett készíteni. - A hosszú, általában szekvenciális programrészleteket - pl. inicializálás, a megszakítás címe előtti 4 programszó elég a pagesel init és goto init utasításokra. Az ICD nyomkövetéshez szükséges nop még beszúrható a 0 címre. Remélem, cikkemmel tudtam segíteni, hogy nagyobb programokat futtassanak a 16F szériába tartozó, olcsó kontrollerek. A felhasznált ábrákat a Microchip PIC16F882/883/884/886/887 Data Sheet (DS41291F) dokumentumából idéztem. A képeket a Microchip MpLab programjával készítettem. Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |