Mikro C 16F877 EEPROM Okuma Yazma

Başlatan mert0701, 04 Ocak 2018, 19:59:22

mert0701

Arkadaşlar Mikro C de 16F877a nın EEPROM una veri yazıp okumaya çalışıyorum ama bir türlü beceremedim. Bu konuda bilgisi olanlar yardım ederse sevinirim. Yazdığım kod ISIS simülasyonunda çalışırken PİC e yüklediğimde çalışmıyor. Forumlarda 16F877a nın EEPROM unda sorun olduğunu okudum, kimiside sorun yok yazıp okuyabiliyorum demiş. Sorun bende mi PİC te mi anlamadım. EEPROM a okuma yazmayı gerçeklemiş olanlardan (simülasyonda çalıştırmaktan bahsetmiyorum) yardım istiyorum. Kodlarımda sorun varmı? Şimdiden teşekkürler.

unsigned short veri = 0x09;
unsigned short address=0x00;

void main() {
ADCON1|=0x07;
CMCON|=0x07;
INTCON.GIE=0;
PORTC = 0x00;
TRISC = 0x00;

EEPROM_Write(address,veri);
Delay_ms(20);
PORTC = EEPROM_Read(address);
Delay_ms(500);
}

mehmet

Kontrolsüz şekilde E2PROM a veri yazmak
belli bir adetten sonra hücreleri öldürür.
Bu sayı ilgili mcu kataloğunda mevcuttur.

Burada bir butona basıp yazdırmak/okumak
daha uygun olacaktır. Muhtemelen son yazdığınız
değer kalıyor olmalı.
Geçici olarak yazma adresini değiştirip deneyin.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mg1980

Ana fonksiyonda değil de ayrı bir yazma fonksiyonu oluşturup @mehmet'in dediği gibi bir butonla yazdırsanız veya bir sayaç çalıştırıp belirli bir sayıya ulaşınca yazdırsanız..ayrıca okuma için de biraz ara verseniz...

mert0701

Verdiğiniz cevaplar için teşekkürler ancak normalde kodlarım bunlar değil normalde sonsuz döngü ve yazma fonksiyonu var. Okuma yazma yaptıramayınca basite indirgeyip bu kodları yazdım yani normalde iki tane pin girişine lojik1 gelirse yazma fonksiyonuna gidiyor sürekli yazdırmıyorum. Bu kodlarla sadece okuma yazma yaptırmaya çalışıyorum bu kodlarda sonsuz döngü yok zaten ve yazdırma işleminden sonra 20ms okuma işleminden sonra 500ms bekleme var. Birde osilatör frekansım 4 MHz bu frekans EEPROM a okuma yazma yaptırmak için düşük kalıyor olabilir mi? Ama araştırırken bir sitede 16f628 ile 4 MHz frekansla yazma okuma yaptırdıklarını gördüm. Ayrıca Mikro C derleyicisinin örneklerindeki EEPROM kodlarınıda 16f877 ye uyarlayıp denedim yine olmadı.

dursuncemal

#4
ana menu icinde sonsuz dongun yok? bu sekilde tazarsan islemcin birkere okuyup porta yazar.port c deki veriyi led yardimi ile mi goruyorsun?

unsigned short veri = 0x09;
unsigned short address=0x00;

void main() {
ADCON1|=0x07;
CMCON|=0x07;
INTCON.GIE=0;
PORTC = 0x00;
TRISC = 0x00;

EEPROM_Write(address,veri);
Delay_ms(20);
PORTC = EEPROM_Read(address);
Delay_ms(500);

   while(TRUE)
   {
                         //sonsuz dongu
   }
}
:=

mert0701

Evet dursuncemal bey led ile görüyorum. Sonsuz döngü yapmamamın nedeni bu kodları okuma yazma yapacak mı  deneme amaçlı kullanmamdan dolayı vede EEPROM a sürekli veri yazamıyoruz belirli sayıda yazma ömrü var (bir yerde 350.000 defa diye okudum başka bir yerde 4.000.000 defa diye okudum). Bu kodlar deneme amaçlı normalde sonsuz döngü ve yazma fonksiyonu kullanıyorum.

dursuncemal

osilator frekansi eeproma yazmada 4mhz sorun yaratmaz micro c cok hakim oldugum bir derleyici degil fakat soyle bir goz atiim yazmamasi icin bir sebep bulamadim.devrenin calistigina emin ol ilk once portc deki ledleri flash yaptir osilatorunun calistigina emin ol.baskada bir sikinti gorunmuyor.
:=