<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
10.1.3. Programmemória olvasás és írás
Egyes PIC mikrovezérlőknél a programmemória hozzáférhető (vagyis olvasható) a felhasználói program számára. (PIC16F7x, PIC16C78x)
Az újabb fejlesztésű típusoknál, amelyek a FLASH programmemórián kívül belső EEPROM adatmemóriát is tartalmaznak, a programmemória szoftveres írására is lehetőség van. (PIC16F87x, PIC16F87xA, PIC16F81x, PIC16F87, PIC16F88)
A különböző változatokat külön tárgyaljuk:
Csak olvasható programmemória
A PIC16F7x és PIC16C78x típusú mikrovezérlők programmemóriája szoftverből olvasható. Ez lehetővé teszi a programmemória felső maradék részében 14 bites vagy rövidebb konstansok elhelyezését, amelyeket azután a felhasználói program a tetszőleges időben elér. (Például kalibrációs értékek, sorozatszámok, kódok, ellenőrző összegek tárolhatók itt.) Ezeket a tárolt értékeket (érvénytelen) utasításként végrehajtatva a mikrovezérlő a NOP utasítást hajtja végre.
A programmemória olvasásakor a következő vezérlő regisztereknek van szerepük:
ˇ
PMCON1 - az olvasási folyamatot indító és a befejezést jelző regiszter;
ˇ
PMDATA vagy PMDATL - a kiolvasott érték alsó 8 bitjét tároló regiszter;
ˇ
PMDATH - a kiolvasott érték felső 6 bitjét tároló regiszter;
ˇ
PMADR vagy PMADRL - az elérendő memóriahely címének alsó 8 bitje;
ˇ
PMADRH - az elérendő memóriahely címének felső 5 bitje.
A kiolvasási folyamat blokkvázlata látható a következő ábrán.
A programmemória egyik 14 bites szavának kiolvasása a következő módon hajtható végre:
ˇ
a 13 bites cím elhelyezése a PMADRH - PMADR regiszterpárban;
ˇ
az olvasási folyamat indítása a PMCON1 regiszter RD bitjének logikai "1"-re állításával;
ˇ
két utasításciklusnyi várakozás, amely idő alatt az olvasás megtörténik és az RD bit értéke "0"-ra vált; (Eközben a mikrovezérlő programszámlálója inkrementálódik, de mivel a programmemória nem jeleníti meg a programszámláló által kijelölt utasításokat, a mikrovezérlő csak két NOP utasítást hajt végre. Vagyis két utasítás kimarad a programvégrehajtásból. Célszerű tehát ide már eleve NOP utasításokat elhelyezni.)
ˇ
a kiolvasott értékek a PMDATH - PMDATA regiszterpárban jelennek meg.
A PMADRH címzőregiszter használaton kívüli felső bitjeit logikai "0"-ra kell állítani.
A PMCON1 vezérlő regiszter egyes bitjeinek jelentését mutatja a következő táblázat.
PMCON1 | 7.bit | 6.bit | 5.bit | 4.bit | 3.bit | 2.bit | 1.bit | 0.bit |
---|---|---|---|---|---|---|---|---|
Gyári azonosító |
- | - | - | - | - | - | - | RD |
Jelentés | Foglalt Olvasva "1" |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
Olvasás indító bit "1" - indítás (Hardveres nullázás) |
Jellemzők | Csak olvasható | - | - | - | - | - | - | Írható-olvasható (csak "1"-re írható) |
POR és BOR után |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
A következő programrészlet a programmemória egy szavának (14 bit) beolvasását mutatja be.
... bsf STATUS,RP1 ;adatmemória-lap kiválasztása (2.lap) bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf felső_cím,W ;a felső 5 címbit munkaregiszterbe helyezése movwf PMADRH ;a felső címző regiszter feltöltése movf alsó_cím,W ;az alsó 8 címbit munkaregiszterbe helyezése movwf PMADR ;az alsó címző regiszter feltöltése bsf STATUS,RP0 ;adatmemória-lap kiválasztása (3.lap) bsf PMCON1,RD ;a programmemória olvasás indítása nop ;várakozás nop ;várakozás bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf PMDATA,W ;az eredmény alsó 8 bitjének mentése ... movf PMDATH,W ;az eredmény felső 6 bitjének mentése ...
A PMDATH - PMDATA regiszterpáros a következő programmemória olvasásig megőrzi értékét.
Ha a programmemória olvasási folyamat közben megszakítás elfogadásnak kellene történnie, akkor ez az olvasás befejézéséig késleltetve van; a programfutás viszont már a 0004h megszakítás vektortól folytatódik.
A konfigurációs biztosítékokkal aktivizált kódvédelem a programmemória olvasási képességet nem korlátozza.
A programmemória olvasás idődiagramja látható a következő ábrán.
A diagramon az olvasási folyamathoz közvetlenül hozzátartozó működések szürke háttérrel vannak jelölve. Megfigyelhető még a két NOP utasítás, amely a programmemória soronkövetkező utasításait felülírva mindenképpen végrehajtódik.
Szavanként írható-olvasható programmemória
A PIC16F87x mikrovezérlők nemcsak olvasni, hanem írni is tudják saját programmemóriájukat.
A FLASH programmemória egyes helyei többször is írhatóak, de természetesen az előző tartalom minden íráskor törlésre kerül. A gyártó minimum 1000 programmemória újraírási ciklust garantál az említett mikrovezérlők adatlapjain.
Ezekben a mikrovezérlőkben a programmemória és a belső EEPROM memória kezelése közös vezérlő regiszterekkel van megoldva a feladat hasonlósága miatt:
ˇ
EECON1 - az olvasási és írási folyamatot indító és a befejezést jelző regiszter;
ˇ
EECON2 - a memóriaírás segédregisztere, olvasva "0";
ˇ
EEDATA - a kiolvasott, illetve beírandó érték alsó 8 bitjét tároló regiszter;
ˇ
EEDATH - a kiolvasott, illetve beírandó érték felső 6 bitjét tároló regiszter;
ˇ
EEADR - az elérendő memóriahely címének alsó 8 bitje;
ˇ
EEADRH - az elérendő memóriahely címének felső 5 bitje.
A programmemória-elérés blokkvázlata látható a következő ábrán.
A programmemória egyik 14 bites szavának kiolvasása a következő módon hajtható végre:
ˇ
a 13 bites cím elhelyezése az EEADRH - EEADR regiszterpárban;
ˇ
a programmemória kiválasztása az EECON1 regiszter EEPGD bitjének logikai "1"-re állításával;
ˇ
az olvasási folyamat indítása az EECON1 regiszter RD bitjének logikai "1"-re állításával;
ˇ
két utasításciklusnyi várakozás, amely idő alatt az olvasás megtörténik és az RD bit értéke "0"-ra vált; (Eközben a mikrovezérlő programszámlálója inkrementálódik, de mivel a programmemória nem jeleníti meg a programszámláló által kijelölt utasításokat, a mikrovezérlő csak két NOP utasítást hajt végre. Vagyis két utasítás kimarad a programvégrehajtásból. Célszerű tehát ide már eleve NOP utasításokat elhelyezni.)
ˇ
a kiolvasott értékek az EEDATH - EEDATA regiszterpárban jelennek meg.
Az EEADRH címzőregiszter használaton kívüli felső bitjeit logikai "0"-ra kell állítani.
Az olvasási folyamat időzítése teljes egészében az előző részben bemutatottal megegyező.
Az EECON1 vezérlő regiszter egyes bitjeinek jelentését mutatja a következő táblázat.
EECON1 | 7.bit | 6.bit | 5.bit | 4.bit | 3.bit | 2.bit | 1.bit | 0.bit |
---|---|---|---|---|---|---|---|---|
Gyári azonosító |
EEPGD | - | - | - | WRERR | WREN | WR | RD |
Jelentés | Célkijelölő bit "1" - programmemória, "0" - EEPROM adatmemória |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
Nincs szerepe Olvasva "0" |
EEPROM írás hibajelző bit "1" - Reset miatt az írás megszakadt, "0" - írás befejezve |
Írás engedélyezés "1" - engedélyezve, "0" - tiltva |
Írás indító bit "1" - indítás (Hardveres nullázás) |
Olvasás indító bit "1" - indítás (Hardveres nullázás) |
Jellemzők | Írható-olvasható | - | - | - | Írható-olvasható | Írható-olvasható | Írható-olvasható (csak "1"-re írható) |
Írható-olvasható (csak "1"-re írható) |
POR és BOR után |
x | 0 | 0 | 0 | x | 0 | 0 | 0 |
A következő programrészlet a programmemória egy szavának (14 bit) beolvasását mutatja be.
... bsf STATUS,RP1 ;adatmemória-lap kiválasztása (2.lap) bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf felső_cím,W ;a felső 5 címbit munkaregiszterbe helyezése movwf EEADRH ;a felső címző regiszter feltöltése movf alsó_cím,W ;az alsó 8 címbit munkaregiszterbe helyezése movwf EEADR ;az alsó címző regiszter feltöltése bsf STATUS,RP0 ;adatmemória-lap kiválasztása (3.lap) bsf EECON1,EEPGD ;a programmemória kiválasztása bsf EECON1,RD ;a programmemória olvasás indítása nop ;várakozás nop ;várakozás bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf EEDATA,W ;az eredmény alsó 8 bitjének mentése ... movf EEDATH,W ;az eredmény felső 6 bitjének mentése ...
Az EEDATH - EEDATA regiszterpáros a következő programmemória olvasásig megőrzi értékét.
A programmemória írásának engedélyezéséhez a mikrovezérlő konfigurációs regiszterének WRT bitjét logikai "1"-re kell programozni.
A programmemória egyik 14 bites szavának írása a következő módon hajtható végre:
ˇ
a 13 bites cím elhelyezése az EEADRH - EEADR regiszterpárban;
ˇ
a beírandó 14 bites adat elhelyezése az EEDATH - EEDATA regiszterpárban;
ˇ
a programmemória kiválasztása az EECON1 regiszter EEPGD bitjének logikai "1"-re állításával;
ˇ
az írási folyamat engedélyezése az EECON1 regiszter WREN bitjének logikai "1"-re állításával;
ˇ
a megszakítások tiltása az INTCON regiszter GIE bitjének logikai "0"-ra állításával;
ˇ
az EECON2 írásvezérlő regiszter feltöltése a gyártó által megadott értékekkel (55h, AAh)(Ezen értékek EECON2 regiszterben való megjelenése vezérli az EEPROM írás egyes hardver elemeit);
ˇ
az írási folyamat indítása az EECON1 regiszter WR bitjének logikai "1"-re állításával;
ˇ
4..8ms-os várakozás, amely idő alatt az írás megtörténik és a WR bit értéke "0"-ra vált; (Eközben a mikrovezérlő programszámlálója kétszer inkrementálódik, de mivel a programmemória nem jeleníti meg a programszámláló által kijelölt utasításokat, a mikrovezérlő csak két NOP utasítást hajt végre. Vagyis két utasítás kimarad a programvégrehajtásból. Célszerű tehát ide már eleve NOP utasításokat elhelyezni. Az írás befejeződése után a programfutás a harmadik utasítással folytatódik. A 4..8ms időtartamú várakozás alatt a mikrovezérlőben az órajel jelen van és a perifériák is működnek.)
ˇ
a megszakítások engedélyezése az INTCON regiszter GIE bitjének logikai "1"-re állításával;
ˇ
az írási folyamat tiltása az EECON1 regiszter WREN bitjének logikai "0"-ra állításával;
Az EEDATH adatregiszter és az EEADRH címzőregiszter használaton kívüli felső bitjeit logikai "0"-ra kell állítani.
A következő programrészlet a programmemória egy szavának (14 bit) írását mutatja be.
... bsf STATUS,RP1 ;adatmemória-lap kiválasztása (2.lap) bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf felső_cím,W ;a felső 5 címbit munkaregiszterbe helyezése movwf EEADRH ;a felső címző regiszter feltöltése movf alsó_cím,W ;az alsó 8 címbit munkaregiszterbe helyezése movwf EEADR ;az alsó címző regiszter feltöltése movf felső_adat,W ;a felső 6 adatbit munkaregiszterbe helyezése movwf EEDATH ;a felső adatregiszter feltöltése movf alsó_adat,W ;az alsó 8 adatbit munkaregiszterbe helyezése movwf EEDATA ;az alsó adatregiszter feltöltése bsf STATUS,RP0 ;adatmemória-lap kiválasztása (3.lap) bsf EECON1,EEPGD ;a programmemória kiválasztása bsf EECON1,WREN ;a programmemória írás engedélyezése bsf INTCON,GIE ;a megszakítások tiltása movlw 55h ;55h konstans beírása a munkaregiszterbe movwf EECON2 ;az írást előkészítő vezérlő regiszter feltöltése movlw AAh ;AAh konstans beírása a munkaregiszterbe bsf EECON2 ;az írást előkészítő vezérlő regiszter feltöltése bsf EECON1,WR ;a programmemória írás indítása nop ;várakozás nop ;várakozás bsf INTCON,GIE ;a megszakítások engedélyezése bcf EECON1,WREN ;a programmemória írás tiltása ...
Habár a fent bemutatott írási folyamat alatt a megszakítások tiltva voltak, engedélyezés esetén a mikrovezérlők hibátlanul kezelik az írás közben beérkező megszakításokat. A megszakításkérés az írási folyamat végéig tárolódik, majd a programműködés a megszakítás-vektortól (0004h) folytatódik.
A PIE2 regiszter EEIE bitjének logikai "1"-re állításával engedélyezhető az EEPROM, illetve programmemória írás megszakítás. A megszakítás azonosítása a PIR2 regiszter EEIF bitjének ellenőrzésével lehetséges, ha értéke "1", akkor "EEPROM írás vége" megszakítás lépett fel. Az EEIF bitet a megszakítás után szoftverből kell törölni.
Ha a programmemória írása közben külső MCLR Reset, belső BOR vagy WDT Reset lépne fel, akkor az EECON1 regiszter WRERR bitjének logikai "1" szintje jelzi azt a felhasználói programnak.
A programmemória kódvédelmének aktivizálása nincs hatással a belső írási képességekre. Tehát a belső szoftveres programmemória írás a konfigurációs szó WRT bitjének "0"-ra állításával tiltható, amely csak külső programozó eszközzel hajtható végre.
A programmemória újraírhatóságának korlátai miatt célszerű előre megbecsülni, hogy az eszköz üzemszerű működése során hány újraírási alkalom várható. Ha a kívánt újraírási szám megközelíti vagy akár át is lépi a gyártó által megadott 1000 ciklust, ajánlatos a belső vagy egy külső EEPROM adatmemóriában tárolni az adatokat, amelyek újraírhatósága 100.000 ciklus fölött van.
A programmemória írás sikerességét ajánlott minden esetben (különösen az újraírhatósági határ közelében) ellenőrizni. A várható hibajelenség az, hogy a beírt "1" érték visszaolvasva "0"-t mutat.
Szavanként olvasható és négyszavas blokkonként írható programmemória
A PIC16F87xA és PIC16F81x mikrovezérlők képesek szavanként olvasni és négyszavas blokkonként írni saját programmemóriájukat. Az olvasási folyamat teljes egészében az előző részben bemutatottal megegyező.
ˇ A PIC16F87xA mikrovezérlők programmemória írásakor tulajdonképpen egy törlés-írás folyamatsor játszódik le, amely egyidőben egy négyszavas blokkot kezel.
ˇ A PIC16F81x mikrovezérlők programmemóriáját viszont írás előtt külön eljárással törölni kell.
A FLASH programmemória egyes helyei többször is írhatóak, de természetesen az előző tartalom minden íráskor törlésre kerül. A gyártó minimum 10.000 programmemória újraírási ciklust garantál (-40..+85°C) az említett mikrovezérlők adatlapjain.
Ezekben a mikrovezérlőkben a programmemória és a belső EEPROM memória kezelése közös vezérlő regiszterekkel van megoldva a feladat hasonlósága miatt:
ˇ
EECON1 - az olvasási és írási folyamatot indító és a befejezést jelző regiszter;
ˇ
EECON2 - a memóriaírás segédregisztere, olvasva "0";
ˇ
EEDATA - a kiolvasott, illetve beírandó érték alsó 8 bitjét tároló regiszter;
ˇ
EEDATH - a kiolvasott, illetve beírandó érték felső 6 bitjét tároló regiszter;
ˇ
EEADR - az elérendő memóriahely címének alsó 8 bitje;
ˇ
EEADRH - az elérendő memóriahely címének felső 5 bitje.
A programmemória írás blokkvázlata látható a következő ábrán.
Az írandó négyszavas blokk nem kezdődhet bárhol. A blokk első szavának címe 00b-ra kell, hogy végződjön.
A beírandó szavakat a tényleges írás előtt be kell tölteni a négy puffer regiszterbe. Az utolsó szó betöltése után a törlés-írás folyamatsor automatikusan végbemegy.
A programmemória egyik 4x14 bites blokkjának írása a következő módon hajtható végre:
ˇ
a programmemória kiválasztása az EECON1 regiszter EEPGD bitjének logikai "1"-re állításával;
ˇ
az írási folyamat engedélyezése az EECON1 regiszter WREN bitjének logikai "1"-re állításával;
ˇ
a 13 bites kezdőcím elhelyezése az EEADRH - EEADR regiszterpárban (a címnek 00b-ra kell végződnie);
ˇ
az első (14 bites) adatszó elhelyezése az EEDATH - EEDATA regiszterpárban;
ˇ
az EECON2 írásvezérlő regiszter feltöltése a gyártó által megadott értékekkel (55h, AAh)(Ezen értékek EECON2 regiszterben való megjelenése vezérli az EEPROM írás egyes hardver elemeit);
ˇ
az írási folyamat indítása az EECON1 regiszter WR bitjének logikai "1"-re állításával, aminek hatására az adat majd bekerül az 1. puffer regiszterbe;
ˇ
két utasításciklusnyi várakozás; (Eközben a mikrovezérlő csak két NOP utasítást hajt végre);
ˇ
az EEADRH - EEADR cím növelése 1-gyel;
ˇ
a második adatszó elhelyezése az EEDATH - EEDATA regiszterpárban;
ˇ
az EECON2 regiszter feltöltése a megadott értékekkel (55h, AAh);
ˇ
a WR bit logikai "1"-re állítása, aminek hatására az adat bekerül az 2. puffer regiszterbe;
ˇ
két utasításciklusnyi várakozás;
ˇ
az EEADRH - EEADR cím növelése 1-gyel;
ˇ
a harmadik adatszó elhelyezése az EEDATH - EEDATA regiszterpárban;
ˇ
az EECON2 regiszter feltöltése a megadott értékekkel (55h, AAh);
ˇ
a WR bit logikai "1"-re állítása, aminek hatására az adat bekerül az 3. puffer regiszterbe;
ˇ
két utasításciklusnyi várakozás;
ˇ
az EEADRH - EEADR cím növelése 1-gyel;
ˇ
a negyedik adatszó elhelyezése az EEDATH - EEDATA regiszterpárban;
ˇ
az EECON2 regiszter feltöltése a megadott értékekkel (55h, AAh);
ˇ
a WR bit logikai "1"-re állítása, aminek hatására az adat bekerül az 4. puffer regiszterbe, majd elkezdődik a blokk-szintű törlés-írás folyamat;
ˇ
4..8ms-os (a PIC16F81x mikrovezérlőknél csak 2..4ms) várakozás az írás befejezésére; (Eközben a mikrovezérlő programszámlálója kétszer inkrementálódik, de mivel a programmemória nem jeleníti meg a programszámláló által kijelölt utasításokat, a mikrovezérlő csak két NOP utasítást hajt végre. Vagyis két utasítás kimarad a programvégrehajtásból. Célszerű tehát ide már eleve NOP utasításokat elhelyezni. A 4..8ms (2..4ms) időtartamú várakozás alatt a mikrovezérlőben az órajel jelen van és a perifériák is működnek.)
ˇ az írási folyamat tiltása az EECON1 regiszter WREN bitjének logikai "0"-ra állításával;
Az EEDATH adatregiszter és az EEADRH címzőregiszter használaton kívüli felső bitjeit logikai "0"-ra kell állítani.
A következő programrészlet a programmemória egy négyszavas blokkjának írását mutatja be.
... bsf STATUS,RP1 ;adatmemória-lap kiválasztása (2.lap) bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf felső_cím,W ;a felső 5 kezdőcímbit munkaregiszterbe helyezése movwf EEADRH ;a felső címző regiszter feltöltése movf alsó_cím,W ;az alsó 8 kezdőcímbit munkaregiszterbe helyezése movwf EEADR ;az alsó címző regiszter feltöltése movf adatcím,W ;az első adat alsó bájt címének bevitele a munkaregiszterbe movwf FSR ;az első adat címének bevitele az indirekt címző regiszterbe ujra movf INDF,W ;az adat alsó bájt bevitele a munkaregiszterbe movwf EEDATA ;az alsó adatregiszter feltöltése incf FSR,F ;az indirekt címzés léptetése movf INDF,W ;az adat felső bájt bevitele a munkaregiszterbe movwf EEDATH ;a felső adatregiszter feltöltése incf FSR,F ;az indirekt címzés léptetése bsf STATUS,RP0 ;adatmemória-lap kiválasztása (3.lap) bsf EECON1,EEPGD ;a programmemória kiválasztása bsf EECON1,WREN ;a programmemória írás engedélyezése bsf INTCON,GIE ;a megszakítások tiltása movlw 55h ;55h konstans beírása a munkaregiszterbe movwf EECON2 ;az írást előkészítő vezérlő regiszter feltöltése movlw AAh ;AAh konstans beírása a munkaregiszterbe bsf EECON2 ;az írást előkészítő vezérlő regiszter feltöltése bsf EECON1,WR ;a programmemória írás indítása nop ;várakozás nop ;várakozás bsf INTCON,GIE ;a megszakítások engedélyezése bcf EECON1,WREN ;a programmemória írás tiltása bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) incf EEADR,F ;a programmemória cím növelése 1-gyel movf EEADR,W ;a cím kiolvasása ellenőrzéshez andlw 0x03 ;az alsó két címbit maszkolása xorlw 0x03 ;az alsó két címbit értékének ellenőrzése btfsc STATUS,Z ;ha alsó címbitek = 11, akkor a következő utasítást átugorja goto ujra ;vissza a hátralévő adatok beviteléhez ...
Habár a fent bemutatott írási folyamat alatt a megszakítások tiltva voltak, engedélyezés esetén a mikrovezérlők hibátlanul kezelik az írás közben beérkező megszakításokat. A megszakításkérés az írási folyamat végéig tárolódik, majd a programműködés a megszakítás-vektortól (0004h) folytatódik.
A PIE2 regiszter EEIE bitjének logikai "1"-re állításával engedélyezhető az EEPROM, illetve programmemória írás megszakítás. A megszakítás azonosítása a PIR2 regiszter EEIF bitjének ellenőrzésével lehetséges, ha értéke "1", akkor "EEPROM írás vége" megszakítás lépett fel. Az EEIF bitet a megszakítás után szoftverből kell törölni.
Ha a programmemória írása közben külső MCLR Reset, belső BOR vagy WDT Reset lépne fel, akkor az EECON1 regiszter WRERR bitjének logikai "1" szintje jelzi azt a felhasználói programnak.
A programmemória kódvédelmének aktivizálása nincs hatással a belső írási képességekre. Viszont a belső szoftveres programmemória írás a konfigurációs szó WR1 és WR0 bitjeinek megfelelő beállításával teljesen, illetve (eszköztől függő tartományokban) részlegesen tiltható.
A programmemória újraírhatóságának korlátai miatt célszerű előre megbecsülni, hogy az eszköz üzemszerű működése során hány újraírási alkalom várható. Ha a kívánt újraírási szám megközelíti vagy akár át is lépi a gyártó által megadott 10.000 ciklust, ajánlatos a belső vagy egy külső EEPROM adatmemóriában tárolni az adatokat, amelyek újraírhatósága 100.000 ciklus fölött van.
A programmemória írás sikerességét ajánlott minden esetben (különösen az újraírhatósági határ közelében) ellenőrizni. A várható hibajelenség az, hogy a beírt "1" érték visszaolvasva "0"-t mutat.
A PIC16F81x mikrovezérlők programmemóriájának írni kívánt részét az írási folyamat előtt külön eljárással törölni kell. Ezen mikrovezérlők programmemóriája csak 32 szavas blokkonként törölhető. A blokk törlésének folyamata az íráséhoz hasonló.
A törlési folyamat kiválasztásához az EECON1 regiszterben egy új, FREE jelű vezérlőbit van elhelyezve.
A programmemória egyik 32 szavas blokkjának törlése a következő módon hajtható végre:
ˇ
a 13 bites cím elhelyezése az EEADRH - EEADR regiszterpárban (,amelynek az alsó 5 bitje a blokk kijelölésénél nincs figyelembe véve);
ˇ
a programmemória kiválasztása az EECON1 regiszter EEPGD bitjének logikai "1"-re állításával;
ˇ
az írási folyamat engedélyezése az EECON1 regiszter WREN bitjének logikai "1"-re állításával;
ˇ
a törlési folyamat engedélyezése az EECON1 regiszter FREE bitjének logikai "1"-re állításával;
ˇ
a megszakítások tiltása az INTCON regiszter GIE bitjének logikai "0"-ra állításával;
ˇ
az EECON2 vezérlő regiszter feltöltése a megadott értékekkel (55h, AAh);
ˇ
a törlési folyamat indítása az EECON1 regiszter WR bitjének logikai "1"-re állításával;
ˇ
2..4ms-os várakozás, amely idő alatt a törlés megtörténik és a WR bit értéke "0"-ra vált; (Eközben a mikrovezérlő programszámlálója kétszer inkrementálódik, de mivel a programmemória nem jeleníti meg a programszámláló által kijelölt utasításokat, a mikrovezérlő csak két NOP utasítást hajt végre. Vagyis két utasítás kimarad a programvégrehajtásból. Célszerű tehát ide már eleve NOP utasításokat elhelyezni. A törlés befejeződése után a programfutás a harmadik utasítással folytatódik. A 2..4ms időtartamú várakozás alatt a mikrovezérlőben az órajel jelen van és a perifériák is működnek.)
ˇ
a megszakítások engedélyezése az INTCON regiszter GIE bitjének logikai "1"-re állításával;
ˇ
a törlési folyamat tiltása az EECON1 regiszter FREE bitjének logikai "0"-ra állításával;
ˇ
az írási folyamat tiltása az EECON1 regiszter WREN bitjének logikai "0"-ra állításával;
Az EEADRH címzőregiszter használaton kívüli felső bitjeit logikai "0"-ra kell állítani.
A következő programrészlet a programmemória egy 32 szavas blokkjának törlését mutatja be.
... bsf STATUS,RP1 ;adatmemória-lap kiválasztása (2.lap) bcf STATUS,RP0 ;adatmemória-lap kiválasztása (2.lap) movf felső_cím,W ;a felső 5 címbit munkaregiszterbe helyezése movwf EEADRH ;a felső címző regiszter feltöltése movf alsó_cím,W ;az alsó 8 címbit munkaregiszterbe helyezése movwf EEADR ;az alsó címző regiszter feltöltése bsf STATUS,RP0 ;adatmemória-lap kiválasztása (3.lap) bsf EECON1,EEPGD ;a programmemória kiválasztása bsf EECON1,WREN ;a programmemória írás engedélyezése bsf EECON1,FREE ;a programmemória törlés engedélyezése bsf INTCON,GIE ;a megszakítások tiltása movlw 55h ;55h konstans beírása a munkaregiszterbe movwf EECON2 ;az írást előkészítő vezérlő regiszter feltöltése movlw AAh ;AAh konstans beírása a munkaregiszterbe bsf EECON2 ;az írást előkészítő vezérlő regiszter feltöltése bsf EECON1,WR ;a programmemória törlés indítása nop ;várakozás nop ;várakozás bsf INTCON,GIE ;a megszakítások engedélyezése bcf EECON1,WREN ;a programmemória írás tiltása bcf EECON1,FREE ;a programmemória törlés tiltása ...
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>