Kaikki, mitä ilmoitat muuttujana koodissasi, on PIC: n RAM-muistissa ja katoaa siten, kun sammutat sen. PIC18F2580: ssa on kuitenkin 256 tavua EEPROM-muistia, joka on haihtumaton. Voit tallentaa puhelinnumerosi sinne joka kerta, kun niitä muokataan, ja ladata ne käynnistyksen yhteydessä muuttujiin.
Jos haluat lukea ja kirjoittaa tavua EEPROM: n tiettyyn osoitteeseen, sinun on käytettävä EECON1
, EECON2
, EEDATL
ja EEADRL
-rekisterit (katso tietolomakkeen luku 8), esimerkiksi:
uint8_t read_eeprom (uint8_t addr) {EECON1 = 0; EEADRL = addr; EECON1bit.RD = 1; return EEDATL;} void write_eeprom (uint8_t addr, uint8_t-arvo) {EECON1 = 0; EEADRL = addr; // osoite, johon kirjoitetaan EEDATL = arvo; // arvo kirjoittaa EECON1bits.WREN = 1; // ota kirjoitus käyttöön EECON2 = 0x55; // kirjoita lukituksen avausjärjestys EECON2 = 0xAA; EECON1bits.WR = 1; // tee todellinen kirjoitus EECON1bits.WREN = 0; // poista kirjoittaminen käytöstä (EECON1bits.WR! = 0); // odota kirjoituksen päättymistä EEIF = 0; // tyhjennä EEPROM-keskeytyslippu}
Ja sitten voit ladata numerosi tällä tavoin:
void load_number (const uint8_t start_addr, char * n , const int len) {for (uint8_t i = 0; i < n; i ++) {n [i] = read_eeprom (aloitus_addr + i); }} load_number (0, callNumber1, 10); load_number (10, callNumber2, 10); // jne.
Ja sama ajatus tallennuksesta. Huomaa, että tämä koodi ei käytä EEPROM-muistia kovin tehokkaasti, koska ASCII-numeroiden tallentaminen siihen vie tilaa. Jos EEPROMin 256 tavua rajoittaa sinua, voit esimerkiksi tallentaa numerot BCD-muodossa, jolloin sinulla on kaksi numeroa tavua kohti.
Toisin kuin RAM, haihtumattomilla muisteilla, kuten EEPROM ja Flash, on rajoitettu määrä kirjoitusjaksoja.Vaikka tämä luku on yleensä erittäin korkea (miljoona sykliä PIC18F2580 EEPROM -mallissa), on hyvä käytäntö olla kirjoittamatta haihtumattomaan muistiin, ellei tämä ole tarpeen eli tietoja on todella muokattu ja ne on
Jos tietoja on kirjoitettava säännöllisin väliajoin EEPROM- tai Flash-muistiin, kulumisen tasoitusalgoritmista voi olla hyötyä tasaisen kulumisen jakamiseksi muistisoluille.Tämä voi olla vielä tärkeämpää Flash-pohjaisen haihtumattoman muistin kanssa, jolla on usein vähemmän kirjoitusjaksoja kuin EEPROMilla (esim. PIC18F2580: n Flash-muistilla on "vain" 100 000 kirjoitussyklin kestävyys).