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

Başlatan PICaso, 21 Mayıs 2020, 02:04:58

PICaso

29 Mayıs 2020, 19:59:53 #15 Son düzenlenme: 29 Mayıs 2020, 20:12:52 PICaso
Alıntı yapılan: devrecii - 29 Mayıs 2020, 19: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 Xuint8_t Y){
    
EEADR addr;
    
EEDATA PwmdutyX,Y;
 
    
EECON1bits.WREN 1;
  
    
EECON2 0x55;
    
EECON2 0xAA;
    
    
EECON1bits.WR 1;
    while(
EECON1bits.WR);
    
EECON1bits.WREN 0;      
}

void main(void) {

 
  
Pwmduty Eeprom_read(0x00);
  
Eeprom_read(0x01);
  
Eeprom_read(0x02);
    
__delay_ms(50);

    while (
1) {
        
        
PwmdutyEx Pwmduty;
        
XEx X;
        
YEx Y;
        
    
    
    if (
duty != dutyEx && != XEx && != 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

30 Mayıs 2020, 13:49:41 #16 Son düzenlenme: 30 Mayıs 2020, 13:55:58 serkan
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_okuunsigned int addres)//adrese yazılan 16 bit degeri oku
      
{
   
unsigned int  iki,bir;       
   
__delay_ms(10);
      
ikieeprom_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, 13: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_okuunsigned int addres)//adrese yazılan 16 bit degeri oku
      
{
   
unsigned int  iki,bir;       
   
__delay_ms(10);
      
ikieeprom_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.

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.