Kumbara projesinde eeprom kullanımı

kyaamurat

Üye
Katılım
30 Nis 2019
Mesajlar
2
Puanları
1
Yaş
28
Kumbara projem hazır sadece hafızaya atma kısmı kaldı. Çeşitli kaynaklardan baktım fakat uygulamaya geldiğimde sonuç alamadım. Yardımcı olabilir misiniz?
yazdığım program ccs.

Kod:
#include <16f877a.h>
#use delay (clock=20000000)
#define use_portb_lcd TRUE
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)


float para100=0;
float para50=0;
float para25=0;
float para10=0;
float para5=0;
float para1=0;
float top=1;
int sayac100=0;
int sayac50=0;
int sayac25=0;
int sayac10=0;
int sayac5=0;
int sayac1=0;

void main ()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF); 
set_tris_a(0x0F);   
set_tris_b(0x00);
output_b(0x00);
lcd_init();

         printf(lcd_putc,"\f");
         printf(lcd_putc,"KUMBARA");
         printf(lcd_putc,"\n");
         printf(lcd_putc,"PROJESi");
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap

 
while(TRUE)
   {   
              
        top=para100+para50+para25+para10+para5+para1;
        
        
        if(input(pin_A0))
      { 
         sayac100=sayac100+1;
         para100=para100+1;
         top=para100+para50+para25+para10+para5+para1;
         printf(lcd_putc,"\f");
         printf(lcd_putc,"Toplam=%fTL",top);
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap
         printf(lcd_putc,"\n");
         printf(lcd_putc,"1TL=%d"sayac100);
        
     }
      
        if(input(pin_A1))
      { 
         sayac50=sayac50+1;
         para50=para50+0.5;
         top=para100+para50+para25+para10+para5+para1;
         printf(lcd_putc,"\f");
         printf(lcd_putc,"Toplam=%fTL",top);
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap
         printf(lcd_putc,"\n");
         printf(lcd_putc,"50KR=%d"sayac50);         
        
      }
      
        if(input(pin_A2))
      {
         sayac25=sayac25+1;
         para25=para25+0.25;
         top=para100+para50+para25+para10+para5+para1;
         printf(lcd_putc,"\f");
         printf(lcd_putc,"Toplam=%fTL",top);
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap
         printf(lcd_putc,"\n");
         printf(lcd_putc,"25KR=%d"sayac25);

      }   
         if(input(pin_A3))
      {
         sayac10=sayac10+1;
         para10=para10+0.10;
         top=para100+para50+para25+para10+para5+para1;
         printf(lcd_putc,"\f");
         printf(lcd_putc,"Toplam=%fTL",top);
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap
         printf(lcd_putc,"\n");
         printf(lcd_putc,"10KR=%d"sayac10);
        
      }
         if(input(pin_D0))
      {
         sayac5=sayac5+1;
         para5=para5+0.05;
         top=para100+para50+para25+para10+para5+para1;
         printf(lcd_putc,"\f");
         printf(lcd_putc,"Toplam=%fTL",top);
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap
         printf(lcd_putc,"\n");
         printf(lcd_putc,"5KR=%d"sayac5);         
        
      }
         if(input(pin_D1))
      {
         sayac1=sayac1+1;
         para1=para1+0.01;
         top=para100+para50+para25+para10+para5+para1;
         printf(lcd_putc,"\f");
         printf(lcd_putc,"Toplam=%fTL",top);
         delay_ms(50); //uygulamada delay değeri değişecek ona göre değişiklik yap
         printf(lcd_putc,"\n");
         printf(lcd_putc,"1KR=%d"sayac1);
        
                
      } 
      
       //motor
         output_high(pin_D2);
       //motor
      
     }
     }
 
Kod:
#define PARA_EEPROM_ADRESI 0 //para değeri eeprom un 0 ıncı adresinden itibaren kaydedilsin (float toplam 4 byte)

WRITE_FLOAT_EEPROM(long int n, float data) {
   int i;

   for (i = 0; i < 4; i++)
      write_eeprom(i + n, *((int8*)&data + i) ) ;
}

float READ_FLOAT_EEPROM(long int n) {
   int i;
   float data;

   for (i = 0; i < 4; i++)
      *((int8*)&data + i) = read_eeprom(i + n);

   return(data);
}


float top_para;
//ilk enerjilenmede eepromda son para değerini okumak için:
top_para = READ_FLOAT_EEPROM(PARA_EEPROM_ADRESI);
//.
//.
//.

//her toplam para değeri değiştiğinde eeprom a kaydetmek için
WRITE_FLOAT_EEPROM(PARA_EEPROM_ADRESI, top_para );

Eeprom un yazma ömrü azdır,
sürekli yazma yapacak şekilde kod yazmamaya dikkat edin.

Kaynak:
http://www.ccsinfo.com/faq.php?page=write_eeprom_not_byte
https://www.ccsinfo.com/forum/viewtopic.php?t=40278[/code]
 
verdiğiniz bilgilerden yola çıkarak bir sonuca vardım teşekkürler
 

Forum istatistikleri

Konular
129,806
Mesajlar
930,280
Kullanıcılar
452,608
Son üye
murat620

Yeni konular

Geri
Üst