Xc8 eeprom kullanımı yardımı

Başlatan Qwert, 31 Ocak 2021, 12:22:18

Qwert

Merhabalar herkese iyi günler xc8 e yeni basladım Bi konuda yardımlarınızı bekliyorum bi uygulama için analog girişten okuduğum analog degeri örneğin 1000 degerini bir buton yardımı ile dahili eeprom hafızaya kaydetmek istiyorum ama yapamadım nasıl yapılacağı konusunda yardımlarınızı bekliyorum

mehmet

XC8 de dahili e²prom için yazma ve okuma fonksiyonu bulunur.

Sıfırıncı adresten bir byte bilgi okur. Dönüş değeri okunan bilgidir.
okunanDeger = eeprom_read(0x00);

Sıfırıncı adrese veri değişkeni içerisindeki bir byte bilgiyi kaydeder.
eeprom_write(0x00, (unsigned char) veri);
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

ahuramazda

Alıntı yapılan: Qwert - 31 Ocak 2021, 12:22:18Merhabalar herkese iyi günler xc8 e yeni basladım Bi konuda yardımlarınızı bekliyorum bi uygulama için analog girişten okuduğum analog degeri örneğin 1000 degerini bir buton yardımı ile dahili eeprom hafızaya kaydetmek istiyorum ama yapamadım nasıl yapılacağı konusunda yardımlarınızı bekliyorum

regiterlar kullandığınız seriye göre değişir ama mantık aşağıdaki gibidir.
void DATAEE_WriteByte(uint8_t bAdd, uint8_t bData)
{
    uint8_t GIEBitValue = INTCONbits.GIE;
    
    //Set NVMADR with the target word address: 0x310000 - 0x3100FF
    NVMADRU = 0x31;
    NVMADRH = 0x00;
    NVMADRL = (uint8_t)(bAdd & 0xFF);

    //Load NVMDATL with desired byte
    NVMDATL = (uint8_t)(bData & 0xFF);
    
    //Enable NVM access
    NVMCON0bits.NVMEN = 1;
    
    //Disable interrupts
    INTCONbits.GIE = 0;

    //Perform the unlock sequence
    NVMCON2 = 0x55;
    NVMCON2 = 0xAA;

    //Start DATAEE write and wait for the operation to complete
    NVMCON1bits.WR = 1;
    //Restore all the interrupts
    INTCONbits.GIE = GIEBitValue;
    while (NVMCON1bits.WR);

    

    //Disable NVM access
    NVMCON0bits.NVMEN = 0;
}

uint8_t DATAEE_ReadByte(uint8_t bAdd)
{
    //Set NVMADR with the target word address: 0x310000 - 0x3100FF
    NVMADRU = 0x31;
    NVMADRH = 0x00;
    NVMADRL = (uint8_t)(bAdd & 0xFF);
    

    //Start DATAEE read
    NVMCON1bits.RD = 1;
    NOP();  // NOPs may be required for latency at high frequencies
    NOP();

    return (NVMDATL);
}