Vissza a főoldalra    Vissza a PIC főoldalra

<< 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;
ˇ Szavanként írható-olvasható programmemória;
ˇ Szavanként olvasható és négyszavas blokkonként írható programmemória.


 

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 olvasás blokkvázlata
10.1.3-1. Ábra

Vissza a lap tetejére

      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.

10.1.3-1. 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 programmemória olvasás idődiagramja
10.1.3-2. Ábra

      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.

Vissza a lap tetejére


 

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 elérés blokkvázlata
10.1.3-3. Ábra

Vissza a lap tetejére

      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.

10.1.3-2. 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.

Vissza a lap tetejére


 

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.

     

A négyszavas programmemória írás blokkvázlata
10.1.3-4. Ábra

Vissza a lap tetejére

      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;

Vissza a lap tetejére


      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.

Vissza a lap tetejére


      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 >>

Vissza a főoldalra    Vissza a PIC főoldalra