write_eeprom sorunu

Başlatan jildrime, 12 Mayıs 2008, 00:13:59

jildrime

eeproma int16 degerinde sayı kaydetmem lazım fakat eeprom her byte için int8 sayı kabul ediyo onun için sayıyı iki ayrı byte a kaydetmem lazım bunu nasıl beceririm tam olarak acıklarsanız cok sevinirim programlama  işinde cok yeniyim bayadır ugrasıyom beceremedim

SpeedyX

ilk adrese ilk 8 bitin, diğer adrese de diğer 8 bitin yazılması gerekiyor.

write_eeprom(address,data); // ilk 8 bit
address++;                   // sıradaki adres
write_eeprom(address,(data>>8)); // ikinci 8 bit


yada

void write_int16_eeprom(int8 address, int16 data) {
   int8 i;
   for(i = 0; i < 2; ++i) { write_eeprom(address + i, *(&data + i)); }
}

jildrime

bu cok iyi oldu teşekkürler pekala read_eeprom yaparken ne yapmam gerekiyor

tacettin

eeproma yazarkem ccs nin içinde bulunan make8, okurken ise make16 fonksiyonlarını kullanabilirsin.gerekli açıklama ve örnekler ise help menüsünde var.

jildrime

anlayabildiğim kadarı ile herşeyi yaptım bu eeproma yazıp okuma olayını beceremedim ilk defa program yazıyorum yazdığım program linkte var eğer vaktiniz olursa bir bakıp inceleyebilirmisinz nerde hata var. 4 gündür eeprom olayını aşamadım hatanın nerede olduğunu anlayamadım. çok teşekkürler.



http://rapidshare.com/files/114347512/yld.rar.html

jildrime

proteus dosyalarınıda yolladım program proteusta süper çalışıyor. Fakat iş gerçeğe gelince eeprom olayı işi bozuyor. Pici programlarken eepromda 1. 2. ve 8. 9. byte ları 00 yapıyorum. Orda bi hata olmaması lazım.
#include "C:\Documents and Settings\ylddd\Desktop\calısan devre\yld\keypad.h"
#include <flex_lcd.c>
#use delay (clock=4000000)

#include <kbd1.c>



int okunan;
int16 adet;
int16 şifre;
int16 code;
int16 adetdown;
int16 dongu;
int8 e,f;

void write_int16_eeprom(int8 address, int16 data) {
   int8 i;
   for(i = 0; i < 2; ++i) { write_eeprom(address + i, *(&data + i)); }
}

void main()
{
e = read_eeprom(0);
f = read_eeprom(1);
delay_ms(100);
code = make16(e,f);
e = read_eeprom(8);
f = read_eeprom(9);
delay_ms(100);
adet=make16(e,f);



   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   basla:
   
   lcd_init();
   printf(lcd_putc,"\fup1 res2 new3 ");
   printf(lcd_putc,"\nDOWN Press 4 ");

while(1) {
   k = kbd_getc();

   if(k=='1')
   {
      lcd_init();
      goto upcounter;
   }
   if(k=='2')
   {
      lcd_init();
      goto sifirlama;
   }
   if(k=='3')
   {
      lcd_init();
      goto degistirme;
   }
   if(k=='4')
   {
      lcd_init();
      goto downcounter;
   }
  
  
   

}
   sifirlama:
   lcd_init();
   printf(lcd_putc,"\fşifreyi girin ");
   printf(lcd_putc,"\n* a basin");
   
   şifre = yazi();
   if(şifre==code)
     {
     adet=0;
     write_eeprom(8,0);
     write_eeprom(9,0);
     delay_ms(200);
     goto upcounter;
     }
   if(şifre!=code)
     {
     lcd_init();
     printf(lcd_putc,"\fyanlis şifre ");
     printf(lcd_putc,"\nyeniden dene");
     delay_ms(1000);
     goto sifirlama;
     }
   degistirme:
     printf(lcd_putc,"\feski şifreyi gir ");
     printf(lcd_putc,"\n* a bas");
     şifre = yazi();
     if(şifre!=code)
       {
        lcd_init();
        printf(lcd_putc,"\fyanlis şifre ");
        printf(lcd_putc,"\nyeniden dene");
        delay_ms(1000);
        goto degistirme;
       }
     if(şifre==code)
       {
       lcd_init();
       printf(lcd_putc,"\fyeni şifreyi gir");
       printf(lcd_putc,"\n* a bas");
       code = yazi();
       
       write_int16_eeprom(0,code);
       delay_ms(200);
       goto basla;
       }
       
     

   upcounter:

   while(1){
      //okunan=0;
      
      okunan=input_a();
      printf(lcd_putc,"\fUP COUNTER ");
      printf(lcd_putc,"\nADET :%lu",adet);
   
      delay_ms(100);
    
      if(bit_test(okunan,4)==true) 
      {
         while(bit_test(okunan,4)==true)
         {
         okunan=input_a();
         }
         adet++;
         delay_ms(50);
         write_int16_eeprom(8,adet);
         delay_ms(50);
      } 
      
   }
   
   downcounter:
   
   printf(lcd_putc,"\fEnter value ");
   printf(lcd_putc,"\nthen press *");
         adetdown=0;
         
        adetdown = yazi();
        dongu=adetdown;
      
          
        goto fonksiyon;
    fonksiyon:
    
         printf(lcd_putc,"\fDOWN COUNTER ");
         printf(lcd_putc,"\nADET :%lu",adetdown);
      while(adetdown!=0){ 
      output_high(pin_c0);
      okunan=0;
      okunan=input_a();
         if(bit_test(okunan,4)==true) 
         {
          while(bit_test(okunan,4)==true)
          {
          okunan=input_a();
          }
          adetdown--; 
          lcd_init();
          printf(lcd_putc,"\fDOWN COUNTER ");
          printf(lcd_putc,"\nADET :%lu",adetdown);

          delay_ms(100);
          if(adetdown==0)
           {                               
            output_low(pin_c0);                
            output_high(pin_c1);  
            delay_ms(1000);
            output_low(pin_c1);
            adetdown=dongu;
            goto fonksiyon;
            
           
            
            
           }
         } 
      }
      
   
}