Haberler:

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

Ana Menü

AT89C52 Dahili EEPROM

Başlatan jackal183, 22 Mart 2012, 13:17:22

jackal183

Şimdiye kadar hep pic ile çalışmış biri olarak, şimdi elime bir atmel verdiler. AT89C52 ile daha önce yapılmış bir sisteme şimdi hafızaya yazıp hafızadan okuma özelliği ekleyeceğim.  Sistemde Elektrik kesinitisine karşı dataların hafızada saklanması gerekiyor.  AT89C52 nin datasheetine baktığımda EEPROM'u olmadığı ancak, 256 x 8-bit Internal RAM hafızası olduğu görünüyor.Bu hafızaya nasıl veri yazıp okurum, konu ile ilgili datasheette açıklama bulamadım. Yani açıkçası Pice alışmış biri olarak, atmelin datasheetinin pice benzemediğini gördüm. biraz araştırma yaptım ama 89c52 ile hafızaya yazıp okuma uygulaması pek göremedim. Sizin bir bilginiz var mı ya da bir kaynak application note falan gösterebilir misiniz?

Kabil ATICI

İşlemcinin veri kağıtlarında istediğin veriye erişebilirsin. Hatırladığım kadarı ile işlemcinin ram'in yarısına direkt adresleme ile erişilebiliyor
örneğin:
MOV 0A0H, #data
MOV  #data, 0A0H

belleğin tamamına dolaylı adresleme ile erişilebiliyor. (Kalan 120 bayt için, Ram adresleri ile özel registerler aynı adresi paylaşıyor. Bu yüzden özel registerler öncelikli olduğundan onlar direct erişim hakkı var ve bu ram bölgesini erişmek için sadece dolaylı adresleme kullanımı gerekiyor.)
MOV @R0, #data


asm kodları ile....
buradaki R0,R1,...R7
registerleridir.
Önce R0'a bellek adresini yazdığınız varsayılmaktadır.
ambar7

jackal183

asm bilmiyorum ustad, keil c51 ile yazıyorum. C'de nasıl yaparız bu dediklerini

Kabil ATICI

bende c bilmem ama sitenin birinde

Önce bir Variable (değişken) deklare et,
örneğin: unsigned char i;

Buradaki i programınızda veri saklamak için kulllanılır. Bu 'i' RAM'de saklanır diyor.
Herhalde bu değişkenle ne yapacağını sen bilirsin...
ambar7

jackal183

nasıl yani hiç bir şey yapmadan, programın herhangi bir yerinde i=5; dedim, daha sonra fişi çıkarıp taktım ve

unsigned char i;
printf(i);

bu şekilde i=5 mi olacak yani?

Kabil ATICI

unsigned char i;
...

i=5;
...
printf(i);

gibi bir şey olacak.

Dediğim gibi ben asm kullanyorum...
ambar7

jackal183

bu yazdığınız şey hafızaya alıp hafızadan geri okuma yapmaz. benim bahsettiğim şu tarz birşey, atıyorum şöyle bir kodum var(picte böyle yapıyorum):

unsigned char var1, var2;
var1=read_eeprom(1);
var2=read_eeprom(2);

printf(var1);   
printf(var2);
.....
....
...
...
var1=2;
var2=5;
write_eeprom(1, var1);
write_eeprom(2, var2);


bu yazdığım kodda fişi çekip geri taktığınızda var1 ve var2, her zaman 2 ve 5 değerlerini alır.


benim sormak istediğim şey de bu işte. at89c52 için rame yazıp ramden okuma fonksiyonları ne şekilde olur. asmde nasıl yapıldığını gösterecek örnek bir kod yazabilir misiniz? c koduna biraz asm eklerim ben de

parda

Alıntı yapılan: jackal183 - 22 Mart 2012, 15:29:36
bu yazdığınız şey hafızaya alıp hafızadan geri okuma yapmaz. benim bahsettiğim şu tarz birşey, atıyorum şöyle bir kodum var(picte böyle yapıyorum):

unsigned char var1, var2;
var1=read_eeprom(1);
var2=read_eeprom(2);

printf(var1);   
printf(var2);
.....
....
...
...
var1=2;
var2=5;
write_eeprom(1, var1);
write_eeprom(2, var2);


bu yazdığım kodda fişi çekip geri taktığınızda var1 ve var2, her zaman 2 ve 5 değerlerini alır.


benim sormak istediğim şey de bu işte. at89c52 için rame yazıp ramden okuma fonksiyonları ne şekilde olur. asmde nasıl yapıldığını gösterecek örnek bir kod yazabilir misiniz? c koduna biraz asm eklerim ben de

89c52 de dahili eeprom olmadığından bahsettiğiniz işi yapamazsınız. yerine 89s8252 kullanırsanız yapabilirsiniz.
Kolay gelsin
Bildiğim tek şey, hiç bir şey bilmediğimdir.

Kabil ATICI

89C52  üzerinde değil eeprom i2c bağlantısıda mevcut değil. Onun için önce programına bir yazılım olarak i2c modülü dahil etmen gerekiyor. Bu modülü dahil ettikten sonra uygun ancak eeprom'a veri okuyup yazabilirsin.  i2c modülünün artık kullanımına göre kullanırsın.
bir veriyi okumak için verinin adresini verisin ve oku dersin.

Bir veriyi yazmak için veriyi ve adresini verirsin ve yaz dersin.

Var sayalım elindeki pic üzerinde i2c modülü yok ve harici eepromu okutup yazacaksın, olay bu. C ile yazdığın için birkaç özel durum haricinde herşey aynı şekilde çalışıyor. Gerisini derleyici hallediyor...
ambar7

jackal183

Anladım o zaman 89s52 yi inceleyeyim biraz, nedir ne değildir, teşekkür ederim

micelow

89s52 ile pic komut işleme tekniği açısından farklılık gösterir. pic mikrodenetleyiciler RISC mimariyi kullanır 89s52 CISC mimaridir. Pic te işlem yaparken akü yü kullanırsın ancak burda böyle bir zorunluluğun olmıcaktır. Kolay gelsin.
                                                     
"Bir tek şeye ihtiyacımız var çalışkan olmak."

Kabil ATICI

AT89C52 serisinde de neredeyse tüm işlemler içi akü (A veyd ACC) kullanırsın
ambar7

nusyil

#12
89s52nin de dahili EEPROM'u yoktur.Bu nedenle elektrik kesintilerine karsi bilgiyi korumak icin harici EEPROM baglaman gerekir.Ya da ATMEL'in EEPROM'lu modellerini kullanmalisin.Ben de bir projemde ayni seyle karsilasmistim.Harici seri EPROM kullanarak sorunu hallettim.Kolay gelsin..

drmp

özel bir sınıf olmadığı sürece  bütün mikro işlemcilerde genel itibariyle  RAM  memory alanı her zaman korunmasız bir yapıdadır   bütün veya kısmen  bilgiler silinir  programınızda saklamak istediğiniz verileri ram alanında bu şekilde saklayamazsınız  burası variantların yeridir  arkadaşlarında dediği gibi harici bir eeprom chip kullanabilirsiniz

KABO

     Eski bir 8051/8052 kullanıcı olarak konuya cevap vermek istiyorum.Pic serisi microcontrollerin hafıza yapısı EEPROM dan olusuyor.fakat 8052 nin içerisinde EEPROM yok.Eger bilgilerin kalıcı olmasını istiyor isen 24LC02 serisi bir EEPROM kullana bilirsin.ben bilgilerin kalıcı olmasını istedigim bilgileri 24LC02 serisi EEPROM larla kayıt yapıyordum.eger 8052 ile ilgili herhangi bir soun olur ise yardımcı olurum.
BILGI PAYLASTIKCA COGALIR...