Pic 16F628A da EEPROM da değişken değeri kaydetme

Başlatan PICaso, 20 Mayıs 2020, 23:04:58

PICaso

#15
Alıntı yapılan: devrecii - 29 Mayıs 2020, 16:36:33Artan 2 biti ayırıp 8bit olarak kaydedebilirsin. Okurken de iki defada okursun. 
    uint8_t Eeprom_read(uint8_t addr){ 
    EEADR = addr;
    EECON1bits.RD = 1;
    while(EECON1bits.RD);
    return EEDATA;
}
void Eeprom_write(uint8_t addr,uint8_t Pwmduty,uint8_t X, uint8_t Y){
    EEADR = addr;
    EEDATA = Pwmduty, X,Y;
 
    EECON1bits.WREN = 1;
 
    EECON2 = 0x55;
    EECON2 = 0xAA;
   
    EECON1bits.WR = 1;
    while(EECON1bits.WR);
    EECON1bits.WREN = 0;     
}
void main(void) {
 
  Pwmduty = Eeprom_read(0x00);
  X = Eeprom_read(0x01);
  Y = Eeprom_read(0x02);
    __delay_ms(50);
    while (1) {
       
        PwmdutyEx = Pwmduty;
        XEx = X;
        YEx = Y;
       
   
   
    if (duty != dutyEx && X != XEx && Y != YEx){
    Eeprom_write(0x00,Pwmduty);
   
    Eeprom_write(0x01,X);
   
    Eeprom_write(0x02,Y);
  __delay_ms(50); }
 


Hocam şu şekilde yaptım ama derlenmedi. Adresleme sırasında yanlışım var sanırım.

serkan

#16
PICaso 10 bit değeri 8 bitlik eeprom bölümlerine yazma birleştirmek ve okumakla ilgili örnek denendi.



void EEPROM_yaz(int addres,unsigned int deger)//8 bitlik adreslere 16 bitlik  degeri yaz.
      {
  unsigned int iki,bir;
      iki = (deger);     
      bir = (deger >> 8);
      __delay_ms(10);
      eeprom_write(addres,iki);
      eeprom_write(addres + 1,bir);
      }
////////////////////////////////////////////////////
 unsigned int EEPROM_oku( unsigned int addres)//adrese yazılan 16 bit degeri oku
      {
   unsigned int  iki,bir;       
   __delay_ms(10);
      iki= eeprom_read(addres);
      bir=eeprom_read(addres + 1);
      return (iki<< 0) + (bir << 8);
      }
/////////////////////////////////////////////////////  
 void main(){
  unsigned int sayi=0,sayi1;
   sayi=19724;
   EEPROM_yaz(12,sayi); //12 ve 13 nolu adrese yaz
   sayi1=EEPROM_oku(12); //12 ve 13 nolu adresi oku
}

PICaso

Alıntı yapılan: serkan - 30 Mayıs 2020, 10:49:41 [Genişlet]PICaso 10 bit değeri 8 bitlik eeprom bölümlerine yazma birleştirmek ve okumakla ilgili örnek denendi.



void EEPROM_yaz(int addres,unsigned int deger)//8 bitlik adreslere 16 bitlik  degeri yaz.
      {
  unsigned int iki,bir;
      iki = (deger);     
      bir = (deger >> 8);
      __delay_ms(10);
      eeprom_write(addres,iki);
      eeprom_write(addres + 1,bir);
      }
////////////////////////////////////////////////////
 unsigned int EEPROM_oku( unsigned int addres)//adrese yazılan 16 bit degeri oku
      {
   unsigned int  iki,bir;       
   __delay_ms(10);
      iki= eeprom_read(addres);
      bir=eeprom_read(addres + 1);
      return (iki<< 0) + (bir << 8);
      }
/////////////////////////////////////////////////////  
 void main(){
  unsigned int sayi=0,sayi1;
   sayi=19724;
   EEPROM_yaz(12,sayi); //12 ve 13 nolu adrese yaz
   sayi1=EEPROM_oku(12); //12 ve 13 nolu adresi oku
}

@serkan hocam teşekkür ederim, bu kod anlamama yardımcı oldu.