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
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);
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);
}