Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Ynt: eeprom veri yazma okuma problemi

Başlatan rree, 27 Mayıs 2013, 00:05:19

rree

#include <16F870.h>
//#device adc=16
//#FUSES NOWDT                    //No Watch Dog Timer
//#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
//#use delay(clock=10000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000,RESTART_WDT)


#define Role1 PIN_B1
#define Role2 PIN_B2
#define Led1 PIN_A0
#define Led2 PIN_A1
#define Led3 PIN_A2
#define Raset4060 PIN_A4
#define Kapa 0
#define Ac 1
#include <tonesRE.c>

//  Değişkenler


int8 BilgiAl()
  { Byte Deg8A;
    Deg8A = input_c();
    Deg8A=Deg8A & 0b00001111;      
    Return Deg8A;
  }


void Role1DrumKaydet(int8 Deger)
  {
     disable_interrupts(GLOBAL);
     write_eeprom(11,Deger);
     enable_interrupts(GLOBAL);
  }
int8 Role1DrumOku()
  {    int8 volume;
       disable_interrupts(GLOBAL);
       volume = read_EEPROM (11);
       enable_interrupts(GLOBAL);
       Return Volume;
  }
void Role2DrumKaydet(int8 Deger)
  {
     disable_interrupts(GLOBAL);
     write_eeprom(12,Deger);
     enable_interrupts(GLOBAL);
  }
int8 Role2DrumOku()
  {    int8 volume;
       disable_interrupts(GLOBAL);
       volume = read_EEPROM (12);
       enable_interrupts(GLOBAL);
       Return Volume;
  }
void Role1AcKapa(int8 Datt1)
  {
    if(Datt1==0)
      {
      output_low(Role1);
       output_low(Led2);
      SesMotOff();
      }
    if(Datt1==1)
      {
      output_high(Role1);
       output_high(Led2);
      SesMotOn();
      }
  }

void Role2AcKapa(int8 Datt2)
  {
    if(Datt2==0)
      {
      output_low(Role2);
       output_low(Led3);
      SesMotOff();
      }
    if(Datt2==1)
      {
      output_high(Role2);
       output_high(Led3);
      SesMotOn();
      }
  }
  
#int_EXT
void  EXT_isr(void) 
{
  int8 Bilgi;
  
  Bilgi=BilgiAl();
  switch (Bilgi)
   {
     case 1:
     Role1AcKapa(Ac);
     break;
     case 2:
     Role2AcKapa(Ac);
     break;
     case 3:
     Role1AcKapa(Kapa);
     break;
     case 4:
     Role2AcKapa(Kapa);
     break;
     case 5:
        if(0==input(Role1))
          {
            SesMotOff();
          }
         if(0==input(Role1))
          {
            SesMotOn();
          }  
      case 6:
        if(0==input(Role2))
          {
            SesMotOff();
          }
         if(0==input(Role2))
          {
            SesMotOn();
          }        
           
     break;   
     
     
     default:

     break; 
    }
  
}

  
void main()
{
   int8 Degrol1,Degrol2;
  
   //Role1DrumKaydet(Kapa);
  
   Degrol1=Role1DrumOku();
   Degrol2=Role2DrumOku();
   //role1 kAyıtlı durumu al
   if(Degrol1==0)
     {
       Role1AcKapa(Kapa);
     }
   if(Degrol1==1)
     {
       Role1AcKapa(Ac);
     }
     // role2 Kayıtlı durumu al
     if(Degrol2==0)
     {
       Role2AcKapa(Kapa);
     }
   if(Degrol2==1)
     {
       Role2AcKapa(Ac);
     }
     
   
   //Example blinking LED program
   while(true)
   {
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   output_low(Raset4060);
   output_low(Led1);
   Delay_ms(500);
   output_high(Raset4060);
   output_high(Led1);
   Delay_ms(500);    
   }
}

Uyarı notu şöyle

>>> Warning 216 "CepKum.c" Line 181(0,1): Interrupts disabled during call to prevent re-entrancy:  (Role1AcKapa)
>>> Warning 216 "CepKum.c" Line 181(0,1): Interrupts disabled during call to prevent re-entrancy:  (Role2AcKapa)
>>> Warning 216 "CepKum.c" Line 181(0,1): Interrupts disabled during call to prevent re-entrancy:  (@delay_ms1)
      Memory usage:   ROM=55%      RAM=13% - 77%
      0 Errors,  3 Warnings.
Build Successful.

Devre açıkken role durumunu eeprom kaydediyorum. İlk açılırken main kısmında kaydedilen duruma göre
roleyi açması ve kapanması gerekiyor.Fakat hep kapalı
 

mesaj birleştirme:: 27 Mayıs 2013, 00:41:15


  write_eeprom(11,Deger)  fonksiyon bloğunda derleme yapmamış
  CCS ver.138

rree

#include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

#ROM getenv("EEPROM_ADDRESS") = {0x55, 0xAA}

//==========================================
void main()
{

while(1);
}
Yukarıdaki gibi bir örnek buldum rom adresinimi belirtmeliyiz.

JKramer

Son verdiğiniz örnek, derleme aşamasında eeprom'a yazmak için verilmiş. Sizin durumunuzda (program çalışırken eeprom'a yazma-okuma), hem kesme içinde hem de dışında aynı fonksiyonu (delay_ms()) kullandığınız için kesmeler kapatılmış. Hata mesajını (Interrupts disabled during call to prevent re-entrancy) forumda aratırsanız daha önce bununla ilgili açılmış konulara ulaşabilirsiniz.

rree

Kesme içindeki delay fonksiyonunu  çıkarıp tekrar deneyeceğim.

rree

    Delay fonksiyonunu kesme dışına aldım.

                     Memory usage:   ROM=45%      RAM=13% - 45%
                      0 Errors,  0 Warnings.
                     Build Successful.

Problem çözülmedi Write_eeprom  fonksiyonun bulunduğu satırlar derlenmiyor.

rree

İlgilenlere teskr hatayı buldum  Role1DrumKaydet()  fonksiyonunu yazmayı unutmuşum ccs de kullanılmayan fonksiyonu derleme işlemine almıyor.