WebElektronika

EEPROM használata a PIC18F családban

person access_time 2015.03.09.
Ismertetésre kerül most a PIC18F családban található EEPROM gyakorlati használata. Nem assembly kódok segítségével ismerjük meg ennek a memóriának a használatát, hanem az MCC18-as fordítónál megjelenő"eep.h" header file-ban található függvényeket fogjuk alkalmazni.


Indítsuk el az MpLab-ot és hozzunk létre egy projektet. Ha megnézzük a View menüben az EEPROM nézetét (1. ábra), akkor láthatjuk, hogy az EEPROM 256 db 8 bites "regiszterből" áll és alaphelyzetben az értékük "FF".

kep
1. ábra   EEPROM alaphelyzetben
 

Az eep.h headerfile-ban a következő függvényeket találjuk :

Függvény neve Leírás
void Write_b_eep(unsigned int cím, unsigned char adat) az adott címre ír adatot
void Busy_eep() várakozás az eepromművelet végére
unsigned char Read_b_eep(unsigned int cím) EEPROM tartalmának a kiolvasása

 

Töltsük most fel az EEPROM tartalmát, minden memóriarekeszbe tegyük be a saját címét. Ehhez egy for ciklust használunk.

#include <p18f14k50.h>
#include "eep.h"

main()
{
    int i;
    for(i = 0; i <= 255; i++)
    {
        Write_b_eep(i, i);
        Busy_eep();
    }
    while(1);
}

 

Futtassuk most a programot a szimulátor segítségével. Láthatjuk a szimulátor ablakában, hogy a változást piros színnel jelöli a fejlesztőkörnyezet (2. ábra).

kep
2. kép   Az adott rekeszekbe beírtuk a saját címeiket
 

Módosítsuk most a programunkat úgy, hogy a hárommal osztható címekre írjuk csak be a címek értékeit, a többi helyre 0-t írunk.

#include <p18f14k50.h>
#include "eep.h"

main()
{
    int i;
    for(i = 0; i <= 255; i++)
    {
        if(i % 3 == 0)
            Write_b_eep(i, i);
        else
            Write_b_eep(i, 0);
        Busy_eep();
    }
    while(1);
}

 

A futási eredmény látható a 3. ábrán, csak a változást láthatjuk piros színnel.

kep
3. kép   A módosított EEPROM tartalma
 

A következő példában a program indításakor mindig növeljük az 0xFE címen lévő értéket eggyel.

#include <p18f14k50.h>
#include "eep.h"

main()
{
    unsigned char b1;
    TRISC = 0x00;
    
    b1 = Read_b_eep(254);
    LATC = b1;
    b1++;
    Write_b_eep(254, b1);
    
    while(1);
}

 

A 4. ábrán látható az első indítás után az EEPROM tartalma.

kep
4. ábra   Először indítottuk el a harmadik programot
 

A program 5. futtatása után a 0xFE címen már "05" látható (5. ábra).

kep
5. ábra   Az ötödik futtatás eredménye a 0xFE címen