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
Lapozás: OK   5 / 5

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.

Következő: »»   5 / 5
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem