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:41PICaso 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.