PIC Mimarisi – EEPROM Hafıza Birimi

16F84A mikrodenetleyicisinin datasheetinde yer alan bilgilere göre mikrodenetleyici mimarisini sizlere anlatıyoruz. EEPROM hafızaya gelmeden önce program sayacı ve dolaylı adreslemeden bahsedeceğiz.

Program Sayacı ve Yığın 

Program sayacı işletilecek komutu adreslemeyi sağlayan bir sayaçtır. Bu sayaç 13-bit genişliğinde olup düşük baytı PCL yazmacı olarak anılmaktadır. Yüksek baytı ise PCH yazmacıdır. Bu iki yazmaç program sayacının bit değerini bulundurmaktadır. Düşük ve yüksek bayt olmasının sebebi 8-bit mikrodenetleyicide 13-bit veriyi tutmak için iki yazmaca ihtiyaç olmasından dolayıdır.

Yığın ise 8 program çağrısına kadar yığın verisini tutabilmektedir. Yığın bölümü program veya veri alanının bir bölümü değildir ve yığın işaretçisi okunup yazılamaz. CALL komutu ile beraber program sayacındaki veri yığına istiflenir ve RETURN, RETLW ya da RETFIE geri dönüş komutlarıyla yığından çekilir. Yığın biriminde son giren ilk çıkar mantığı işlemektedir.

Dolaylı Adresleme

EEPROMları anlatmadan önce ele almamız gereken bir konu da INDF ve FSR yazmaçlarıyla dolaylı adreslemedir. INDF yazmacı fiziksel bir yazmaç değildir. INDF’yi adreslemekle FSR yazmacındaki adres değerini adreslemiş oluruz. Yani bu durumda FSR’nin işaretçi olduğunu anlayabiliriz. Buna dolaylı adresleme adı verilir. Aşağıda dolaylı adreslemeye dair bir örneğin görebilirsiniz.

  • 05 numaralı yazmaç 0x10 değerini barındırır.
  • 06 numaralı yazmaç 0x0A değerini barındırır.
  • 05 numaralı yazmacın değeri FSR yazmacına yüklenir.
  • INDF yazmacını okumak 0x10 değerini döndürür.
  • FSR yazmacının değerini bir artırırız. ( FSR = 0x06)
  • INDF yazmacı bu sefer 0x0A değerini döndürür.

Yani kısacası INDF yazmacını okumak FSR yazmacının işaret ettiği adres değerindeki veriyi geri döndürür. Bu C dilindeki pointer konusu gibidir. Aşağıda doğrudan ve dolaylı adreslemenin diyagramı verilmiştir.

Burada doğrudan adreslemede adresin opcode adı verilen makine komutundan alındığını görmekteyiz. Fakat dolaylı adreslemede adresin FSR yazmacındaki değerden alındığını görüyoruz. FSR yazmacındaki değerin sabit olmadığını ve değiştirilebileceğini unutmayalım. Bu yüzden dolaylı adresleme ile daha esnek program yazabiliriz.

EEPROM Hafızası 

EEPROM mikrodenetleyicideki üç bellek cinsinden biridir. FLASH ve RAM belleği daha önceden anlatmıştık. EEPROM kullanıcıya yönelik bir bellek olduğu için çalışma esnasında etkin bir görevde bulunmaz. Yalnız bizim isteğimiz doğrultusunda programlama dışında kalıcı olarak kaydedilecek verileri içinde barındırır. Bu hafıza doğrudan adreslenmediği için biz özel fonksiyon yazmaçları vasıtasıyla bu adreslerin içindeki verilere erişiriz. EEPROM kullanmak için EECON1, EEDATA ve EEADR yazmaçlarını kullanmak gereklidir. Bu yazmaçların kısaltımından anlayacağınız üzere biri denetim diğer ikisi ise adres ve veri yazmacıdır. Adres ve veri yazmacına veri yazıp okurken denetim (control) yazmacının bitleriyle de EEPROM’u çalıştırırız. Şimdi denetim yazmacının bitlerini inceleyerek nasıl çalıştığını görelim.

Burada U-0 başlığı ile karartılmış olarak gördüğümüz bitler kullanım dışı anlamına gelmektedir. EEIF biti 4. bit olup EEPROM yazma tamamlanma kesmesinin bayrak bitidir. Yani yazma tamamlandığında 1, tamamlanmadığında 0 durumunda olur.

WPEER biti hata bayrak bitidir. Hata durumunda bu biti denetleyerek hatanın varlığını öğrenebiliriz.

WREN yazma etkinleştirme bitidir. Adres ve veri yazmaçlarına yazdırılacak verinin yazılmasına izin veren bittir. WR ve RD bitleri ise yazma ve yazma ve okuma işlerini yapan bittir.

EEPROM’dan veri okumak için öncelikle EEADR yazmacına okunacak verinin adresi yazılmalıdır. Bu adres dolaylı adres olduğu için bizim bilmemiz veya programı bizim ona göre ayarlamamız gereklidir. Ondan sonra ise RD yani okuma bitini bir (1) yaparız. Bu durumda veri adreste bulunursa sonraki çevirimde EEDATA yazmacında belirir. EEDATA yazmacında beliren veriyi ise sonraki çevirimde okuyabiliriz. EEDATA yazmacındaki veri bir sonraki okuma ve yazma işlemine kadar saklanır.

EEPROM’a veri yazmak içinse yine veri yazmak istediğimiz adresi belirleriz ve EEADR yazmacına yazarız. Sonrasında yazmak istediğimiz veriyi de EEDATA yazmacına yazarız. Sonrasında WREN biti yazmayı etkinleştirmek için bir (1) yapılmalıdır. Bu iki aşamalı güvenlik mekanizması ile kaza ile yazmanın önüne geçilmiş olur. Bu bit yazma sürecinin dışında her zaman sıfır konumunda kalmalıdır. En sonunda ise WR bitini bir yaparak yazma sürecini bitiririz.

Görüldüğü gibi mikrodenetleyicilerde her birim birbirine benzemektedir. Bir mikrodenetleyicide EEPROM kullanmak istediğimizde adres, veri ve denetim yazmaçlarının olacağını hatırlayalım.

 

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

 

 

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.