Ozel amacli kaydediciler (sfr)

Başlatan kareli, 29 Mart 2016, 22:21:50

kareli

Arkadaslar ozel amacli kaydediciler (sfr) nicin kullanilir mantigi anlamadim.
#int portb=0x06 veya baska bise yazildiginda nicin kullaniliyor ornegin tus taramada gordum bu komutu.orda bunun yerine ne kullanilabilir..
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

dursuncemal

#1
micro controllerlerin icindeki donanimlarin bilgilerinin herbiri bir kaydedicide bulunur.      ornegin portb,porta,portc,timer0,adccon,trisa,trisb.......vb.     ayrica bu kaydedicilerin birde adresleri vardir.

micro controllerlerin sahip oldugu  donanimlarin bilgilerini saklayan kaydedicilere special function register(sfr) denir.

#int portb = 0x06    > bu derleyiciye  bir on direktif(yonlendirme)tir. anlami portb iceriginin saklanacagi  adres 0x06  dir. bu adresleri gorebilmek icin mutlaka kullandigin pic'in  datasheet'ini incelemen gerekir.

birde 'general purpose registers'vardir.
'genel amacli kaydediciler'.   genel amacli kaydediciler kulandigin picin buyuklugune gore  kulaniciya ayrilmis kulanicinin tanimladigi degiskenlerin saklandigi kaydedicilerdir. ornegin: unsigned char sayici; diye    bir degisken tanimladiginda bu degiskenin icindeki verinin tutuldugu kaydedicidir. bu kaydediciler de belli bir adresten baslar belli bir adreste biter yani miktarlari kullanmis oldıgun islemciye gore degisir.fakat biz programimizi c de yazdigimiz icin derleyicimiz bu degiskenlerin adreslerini kendisi duzenler. eger asm yazmis olsaydik biz tek tek degiskenlerimizin adreslerini belirtmek zorunda olacaktik.
orn:   portb equ 06

pratik olarak kafanda canlansin diye tarif edecek olursak.bir defter'in ilk satirinda tmr0 in icerigini tutugunu 2.satirinda portb icerigi 3. satirinda trisb ... gibi defterin herbir satirinin icini  kaydedici gibi hayal et  satirlari da adres gibi.  benim yazdiklrima gore tmr0 in adresi 1.satir icerigi de 1. satirdali bilgi gibi.........

umarim anlatabilmisimdir.




:=

rree

Ben şöyle anlamıştım yanlışlığım varsa düzeltin.İşlemcilerde adresleme tekniknikleri mevcut.İndex , dolaysız ,dolaylı adresleme gibi.

Index adresleme alu ya yakın hafızalara ,en az saykıl  harcayan.
doğrudan(dolaysız)  sayfa adresleme, Bulunduğunuz sayfayı 2 komutla (asm) ulaşabilirsiniz.
Dolaylı adresleme bence (sfr) kayıtçı temsil durmunda birçok adresi dolaşabilmekte fakat en fazla saykıl harcayan yöntem. c dilinde pointer kavramı bu yöntemi kullanıyor sanırım.
Pic 16 serisinde alu ya W kayıtçısı var tek.



dursuncemal

#3
hocam cok uzun zemandir asm den uzak oldugum icin  'Special Function Registers' ile ( FSR) file sellect register'i bir ara karistirdim mi acep diye dusundum. haklisiniz yukarida  'Special Function Registers' lari tarif ederken 'special file registers' demis oldum , düzelttim. dolayli adreslemede (fsr) 'file sellect register' i kulaniliyor,bunun (sfr) ile lakasi yok .  zamandda kulandigimi hatirliyorum.soyleki tek bir degiskene veri atiginizda kullanmak cok anlamsiz kodunuzu gereksiz uzatmis olursunuz ama birden fazla ardisik adreslenmis  veriyi silecek yada porta yazacak iseniz  cok daha efektif bir kod yazmis oluyorsunuz hizdan değilde yerden kazanirsiniz.eskiye nazaran simdiki islemcilerde yer sorunu yok gibi.Asm yazarken  (FSR) yi kulanmaya kara verdigimizde degiskenlerimizin adreslerini verirken ardisik olmasina dikkat diyorduk.aslinda asm de  degisken dizisi olusturuyorduk,mesela 10 adet 7 segment displayin verilerini porta atarken Indirect Addressing metodunu kullanmak bize hafizaden yer kazandiriryodu. c de yazarken tablo mantigini kulandigimizda verilerimiz tabloya ardisik diziliyor.dizi kulandigimizdada ayni durum.
:=