Kaydedicilerin İşlevleri:INDF (Indirect File Register): Dolaylı adresleme kaydedicisidir. Birbiri ardı sıra yapılacak erişim işlemlerinde, GPR – Genel amaçlı kaydedicilerle (statik RAM alanının) kullanımı
hızlandırılır ve yazılacak programı küçültür.
TMR0 (Timer): Mikrodenetleyici içinde bulunan zamanlayıcı ve sayaç olarak çalıştırılan
bölümü denetleyen kaydedicidir. PCL (Program Counter Low Byte): bir sonra çalıştırılacak komutun program belleğindeki adresini tutar.
STATUS: Mikrodenetleyici içindeki aritmetik işlem birimi (ALU) işlem sonuçlarına ait bazı bilgileri durum kaydedicisinde tutar. Bank seçme bitleri de bu kaydedicidedir.
FSR (File Select Register): Dolaylı adreslemede INDF ile birlikte kullanılır. Mikrodenetleyicinin içindeki RAM adresinde yapılacak işlemlerde, RAM adresini tutar. Bu durumda INDF’ye yazılacak her veri, aslında adresi FSR’de bulunan RAM’e yazılmıştır.
PORTA – PORTE: Portlar, mikrodenetleyicinin dış dünyadan bilgi alması ve kendi dışındaki devrelere veri aktarabilmesi amacıyla kullanılır. PIC16F877’nin beş portu vardır. A portu 6 bit genişliğindedir. B, C, D portları 8 bit, E portu ise 3 bit genişliğindedir.
TRISA – TRISE: Portların yönünü (yongaya veri girişi mi, yoksa yongadan veri çıkışı mı yapılacak?) belirleyen kaydedicilerdir. Eğer portların herhangi bir pininden mikrodenetleyici dışına veri gönderilecekse, önce ilgili portun yön kaydedicisinin aynı numaralı biti, b’0’ yapılır. Eğer o pinden mikrodenetleyiciye veri girilecekse, yine önceden, o portun yön kaydedicisinin aynı numaralı biti b’1’ yapılır. Özetle ilgili TRIS kaydedicisi pini çıkış için b’0’, giriş için b’1’ yapılır.
EEDATA ve EEADR: Mikrodenetleyici içindeki EEPROM veri belleğine ulaşmakta kullanılırlar. Sonuçta EEDATA kaydedicisindeki veri EEADR kaydedicisinde adres numarası bulunan veri, EEPROM veri belleğinden okunarak EEDATA kaydedicisine getirilir. PCLATCH: Program sayacının yüksek öncelikli byte’ı yani, üst 5 biti için kullanılır.
INTCON: Kesme (interrupt) işlemlerinde kullanılır. GPR (General Purpose Register): Genel amaçlı kaydedicilerin adresleri yukarıdaki çizelgede verilmişti. Programcı buradaki adresleri istediği gibi, kendi değişkenleri için kullanabilir. Bu adresleri isterse programın içinde, aşağıdaki örnekte görüldüğü gibi adlandırabilir.
SEC_1 EQU h’20’ ;GPR alanındaki h’20’ adresine SEC_1 adı verildi
SEC_2 EQU h’21’ ;GPR alanındaki h’21’ adresine SEC_2 adı verildi.
STA TUS Register (Durum Kaydedicisi)
STATUS kaydedicisi, aritmetik ve mantık biriminin (ALU), aritmetik işlem sonucundaki durumunu, merkezi işlem biriminin (CPU) test durumlarını ve veri belleğine ait küme (bank) seçme bitlerini tutar. Herhangi bir kaydedici gibi, STATUS’da bir komuta hedef olabilir. yani, içeriği okunabilir, değiştirilebilir. Ancak, TO ve PD isimli bitleri sadece okunabilir, değiştirilemez.
Eğer, bu kaydedicinin içeriği CLRF STATUS komutuyla, silinmek istenirse ; sadece üst üç bit, 0 olur. Bu komut sonunda STATUS’un içeriği 000u u1uu değerini alır. Burada u:değişmez (Unchangable) anlamındadır.

Bit 7: IRP: Kaydedici bank seçme biti (dolaylı adreslemede kullanılır)
0= Bank 0,1 (00hFFh)
1= Bank 2,3 (100h1FFh)
Bit 65:
RP1:RP0: Kaydedici bank seçme biti (doğrudan adreslemede kullanılır)
00= Bank 0
01= Bank1
10= Bank 2
11= Bank 3
Her bir bank 128 byte’tır.
Bit 4: TO: Timeout
(süre aşımı biti)
1= CLRWDT komutuyla veya SLEEP’den, güç verme durumuna geçirildiğinde 1 olur.
0= WDT timeout (süre aşımı) işlemi gerçekleşmiş ise, 0 olur.
Bit 3: PD: Powerdown (Güç kesme) biti
1= CLRWDT komutu ile veya güç verme durumunda 1 olur.
0= SLEEP komutu çalıştırılınca 0 olur.
Bit 2: Z: Zero (Sonuç sıfır) biti
1= Aritmetik veya lojik işlem sonucu 0 ise bu bit, 1 olur.
0= Aritmetik veya lojik işlem sonucu 0 değil ise bu bit 0 olur.
Bit 1: DC: Dijit elde (Digit Carry/Borrow) biti. (ADDWF, ADDLW komutları için.)
1= 8 Bitin düşük öncelikli dörtlüsü, taşarsa bu bit lojik 1 olur.
0= 8 Bitin düşük öncelikli dörtlüsü taşmazsa, bu bit 0 olur.
Bit 0: C: Carry/Borrow biti (ADDWF ve ADDLW komutları için)
1= En duyarlı bit, taşarsa, bu bit 1 olur.
0= En duyarlı bit taşmazsa, bu bit 0 olur.
Not: Ödünç alma (borrow) işlemleri için ters kutup kullanılmıştır (işlemde sonuç 0’sa, uyarı bitleri 1, 1 ise 0 olmak üzere tersleri yazılır). Çıkarma (SUB) ve döndürme (RLF, RRF) işlemlerinde bunun etkisi anlatılacaktır.
Option Register (Seçenek Kaydedicisi)Option Register, okunabilir ve yazılabilir bir kaydedicidir. Kapsamında TMR0 / WDT zamanlayıcılarının konfigürasyon bitleri, dış kesme (interrupt) denetim bitleri, TMR0 zamanlayıcısı kesme denetim bitleri ve PORTB için çekme (pullup)dirençlerinin kullanılmasını sağlayan bit bulunur.

Bit 7: RBPU: PORTB, çekme (pullup) dirençlerini aktifleştirme biti
1= PORTB çekme dirençleri pasif
0= PORTB çekme dirençleri aktif
Bit 6: INTEDG: Kesme kaynağı etkilenme kenarı seçim biti
1= RB0 / INT pin kesmesi yükselen kenarı seçme biti
0= RB0 / INT pin kesmesi düşen kenarı seçme biti
Bit 5: TOCS: TMR0 saat kaynağı seçme biti
1= RA4 / TOCK1 pininden gelen darbeler clock kaynağı olsun
0= Clock kaynağı olarak iç komut çevrimi kullanılsın
Bit 4: TOSF: TMR0 clock kaynağı kenar seçme biti (eğer TOCS=1 ise)
1= RA4 / TOCK1 pininden gelen her düşen kenar için bir arttır
0= RA4 / TOCK1 pininden gelen her yükselen kenar için bir arttır
Bit 3: PSA: Önbölücü biti
1= Önbölücü WDT için ayrıldı
0= Önbölücü TMR0 için ayrıldı
Bit 2,1,0: PS2, PS1, PS0: Önbölücü oranı seçme biti
INTCON Register (Kesme Kaydedicisi)INTCON kaydedicisi, okunabilir ve yazılabilir bir kaydedicidir. Kapsamında TMR0 / WDT kaydedicisi taşma uyarı bitleri, RB port değişim ve dış kesme (RB0 / INT pin interrupt) denetim bitleri, TMR0 kesme denetim bitleri bulunur.

Bit 7: GIE: Bütün kesmeler geçerli (Global Interrupt Enable) biti
1= Maskelenmemiş kesmeleri aktif yapar
0= Kesmeyi kaldırır
Bit 6: PEIE: Çevresel kesme geçerli biti
1= Çevresel kesmeyi aktifleştirir
0= Çevresel kesmeyi kaldırır
Bit 5: TOIE: TMR0 clock taşma kesmesi biti
1= TMR0 kesmesini aktif yapar
0= Kesmeyi kaldırır
Bit 4: INTE: RB0 / INT dış kesme biti
1= RB0 / INT pininden dış kesmeyi aktif yapar
0= Kesmeyi kaldırır
Bit 3: RBIE: RB Port değişimi kesme biti
1= RB port değişimini aktif yapar
0= Kesmeyi kaldırır
Bit 2: TOIF: TMR0 taşma uyarısı bayrak biti
1= TMR0 taştı (taştıktan sonra program içinden temizlenir)
0= TMR0 taşmadı
Bit 1: INTF: TMR0 / INT dış kesme uyarı bayrak biti
1= TMR0 dış kesme oldu (program içinden temizlenir)
0= TMR0 dış kesme yok
Bit 0: RBIF: RB Port değişimi kesme uyarı bayrak biti
1= En az bir RB<7:4> pini durum değiştirdi (Programda kontrol edilir)
0= Hiçbir RB<7:4> pini durum değiştirmedi
P I E1 Register (Çevresel Kesme Kaydedicisi)
PIE1 kaydedicisi, çevresel kesmelerle ilgili bitleri olan bir kaydedicidir. Bir çevresel kesmenin olabilmesi için, PIE1 (INTCON<6>) biti de set edilmelidir.

Bit 7: PSPIE: Paralel Slave Port okuma/yazma kesmesi biti
1= PSP R/W kesmesini aktifleştir
0= Kesmeyi kaldırır
Bit 6: ADIE: A/D çevirici kesmesini aktifleştirme biti
1= A/D çevirici kesmesini aktifleştirir
0= Kesmeyi kaldırır
Bit 5: RCIE: USART alma (receive) kesmesini aktifleştirme biti
1= USART alma kesmesini aktifleştir
0= Kesmeyi kaldırır
Bit 4: TXIE: USART gönderme (transmit) kesmesi aktifleştirme biti
1= USART gönderme kesmesini aktifleştirir
0= Kesmeyi kaldırır
Bit3: SSPIE: Senkron Seri Port kesmesi aktifleştirme biti
1= SSP kesmesini aktifleştirir
0= Kesmeyi kaldırır
Bit2: CCP1IE: CCP1 kesmesi biti
1= CCP1 kesmesini aktifleştirir
0= Kesmeyi kaldırır
Bit 1: TMR2IE: TMR2 PR2 uyum kesmesi aktifleştirme biti
1= TMR2 PR2 uyum kesmesini aktifleştirir
0= Kesme yok
Bit 0: TMR1IE: TMR1 taşma kesmesini aktifleştirme biti
1= TMR1 taşma kesmesini aktifleştir
0= Kesmeyi kaldırır
P I R1 Register (Çevresel Kesme Kaydedicisi)
PIR1 kaydedicisi, çevresel kesmelerle ilgili uyarı bitlerini taşıyan kaydedicidir.

Bit 7: PSPIFE: Paralel Slave Port okuma/yazma kesme uyarısı biti
1= PSP R/W kesmesi oluştu (yazılımda temizlenmeli)
0= Okuma ya da yazma yok
Bit 6: ADIF: A/D çevirici kesme uyarısı biti
1= A/D çevirme işlemi bitti
0= Çevirme tamamlanmadı
Bit 5: RCIF: USART alma (receive) kesmesi uyarı biti
1= USART alma tamponu boş
0= Alma tamponu dolu
Bit 4: TXIF: USART gönderme (transmit) kesme uyarısı biti
1= USART gönderme tamponu boş
0= Gönderme tamponu dolu
Bit3: SSPIF: Senkron Seri Port kesme uyarısı biti
1= SSP kesmesi dolu (yazılımda temizlenmeli)
0= SSP kesmesi yok
Bit2: CCP1IF: CCP1 kesmesi uyarı biti
1= TMR1 kaydedicisi yakaladı
0= TMR1 kaydedicisi yakalamadı
Bit 1: TMR2IF: TMR2 PR2 uyum kesmesi uyarı biti
1= TMR2 PR2 uyum kesmesi var
0= Kesme yok
Bit 0: TMR1IF: TMR1 taşma kesmesi uyarı biti
1= TMR1 sayacı taştı, kesme oldu
0= Kesme yok
P I E2 Register (CCP 2, SSP veri yolu çarpışma, E 2 P ROM – Çevresel Kesme Kaydedicisi)
PIE2 kaydedicisi, CCP2 (Capture/Compare/PWM2) çevresel biriminin kesme bitlerini, SSP (Senkron Seri Port) veri yolu çarpışma bitini ve EEPROM yazma kesmesi bitini taşır.

Bit 7, 5, 2, 1: Unimplemented: Bit kullanılmaz 0 okunur
Bit 6: Reserved: Bit sonra kullanılmak için ayrılmıştır. Temizlenmelidir (set 0)
Bit 4: EEIE: EEPROM yazma işlemi kesme biti
1= EEPROM yazma kesmesini aktifleştirir
0= EEPROM yazma kesmesi yok
Bit 3: BCLIE: Çarpışma (Bus Collision) kesmesi uyarı biti
1= Çarpışma kesmesini aktifleştirir
0= Çarpışma kesmesi yok
Bit 0: CCP2IE: CCP2 kesmesini aktifleştirme biti
1= CCP2 kesmesini aktifleştirir
0= CCP2 kesmesi yok
P I R2 Register (CCP 2, SSP databus çarpışma, E 2 P ROM – Çevresel Kesme Kaydedicisi)
PIE2 kaydedicisi CCP2 çevresel biriminin kesme bitlerini, SSP çarpışma bitini ve E 2 PROM yazma kesmesi uyarı bitini taşır.

Bit 7, 5, 2, 1: Unimplemented: Bit kullanılmaz 0 okunur
Bit 6: Reserved: Bit sonra kullanılmak için ayrılmıştır. Temizlenmelidir (set 0)
Bit 4: EEIF: EEPROM yazma işlemi kesmesi uyarı biti
1= Yazma işlemi tamamlandı
0= Yazma işlemi tamamlanamadı ya da başlatılamadı
Bit 3: BCLIF: Çarpışma (Bus Collision) kesmesi uyarı biti
1= SSP’de çarpışma oldu, I2C Master mod olarak ayarlanmışsa
0= Çarpışma olmadı
Bit 0: CCP2IF: CCP2 kesmesi uyarı biti
Capture (yakalama) modu için1= TMR1 kaydedicisi yakalandı (capture). Yazılımda temizlenmeli
0= TMR1 kaydedicisi yakalanmadı
Compare (karşılaştırma) modu için
1= TMR1 kaydedicisi karşılaştırma (compare) uyumlu. Yazılımda temizlenmeli
0= TMR1 karşılaştırma uyumlu değil
P CON Register (Güç Kaynağı Kontrol Kaydedicisi)
Güç kontrol kaydedicisi PCON, yazılımda ve reset durumlarında kullanılır. Reset durumları? devrenin dışardan MCLR ile, gerilim ya da akımın aşırı düşme ve yükselmesi BrownOut, Watch Dog Timer ve son olarak Power on reset durumlarında kullanılabilir. BOR biti, Power on reset’te bilinemez. Reset sonrasında b’1’ yapılmalıdır ki, bir sonraki BOR durumunu öğrenebilsin.

Bit 7-2:
Unimplemented: Bit kullanılmaz 0 okunur
Bit 1: POR: Power On Reset durumu biti
1= POR durumu yok
0= POR dolu (yazılımda set edilmeli)
Bit 0: BOR: Bus collision kesme uyarı biti
1= BOR durumu yok
0= BOR durumu var (yazılımda set edilmeli)
P CL ve P CLATH Registers (A dres Kaydedicileri)
Program counter (PC) olarak adlandırılan adresleme kaydedicisi 13 bitliktir. Bunun düşük değerlikli byte’ı PCL kaydedicisinden gelir. Üstteki bitler ise PC<12:8> arasındaki 5 bittir, bunlar PCLATH kaydedicisinden alınır. PCL okunabilir ve yazılabilir bir kaydedicidir. Ancak üst bitleri (PCH) doğrudan okunamaz. Dolaylı olarak PCLath yoluyla yazılabilir veya okunabilir.

Call komutu, yığının her zaman en tepesine, PCL kaydedicisinin içindeki adres değerini yazar. Return, Retfie ve Retlw komutları ise yığının en tepesindeki elemanın içeriğini PCL’ye aktarır. Sayfa (bank) numaralarının PCLath kaydedicisinden PC’ye aktarılabildiğini program yazarken de unutmamalıyız.
PCLATH kaydedicisinin içeriği, altyordama girildikten sonra sabit kalır, bir return ya da retfie benzeri komut gelse de değişmez. Programcı, call veya goto komutlarından önce, PCLATH kaydedicisini güncellemelidir. PCH daima PCLATH kaydedicisi yoluyla güncellendiğinden (tersi yapılamaz) altyordam veya gidilen kesimin hangi bankta olduğu, aşağıdaki örneğe benzer bir yolla belirtilmelidir.
ORG 0×500
BCF PCLATH, 4 ;PCLATH kaydedicisinin 4.biti temizlendi
BSF PCLATH, 3 ;PCLATH’ın 3.biti set edildi, 1.banka geçildi
;(800hFFFh adres aralığı)
CALL SUB1_P1 ?1.banktaki altyordam çağrıldı
.
.
.
ORG 0×900 ;Bank 1 (800hFFFh)
SUB1_P1
.
. ;Altyordam 800h ile FFFh aralığına yerleştirildi.
RETURN ;Return’den sonra 0.sayfaya (000h7FFh) dönülecek
Computed goto (Hesaplanmış goto): PC’ye PCL’nin eklenmesiyle oluşur.
Y ığın (Stack)Yığın 8 elemanlıdır. Elemanları 13 bitliktir ve donanımın bir parçasıdır. Veri veya program alanlarında yer almaz. Yığın göstergesi (pointer) yazılabilir ve okunabilir değildir. Yığın işlemi komutları POP ve PUSH’tur. Her PUSH işleminde yığının en tepesindeki adrese, PC’ın içeriği yüklenir. Her POP işleminde yığının en tepesindeki adres PC’ın içine geri yüklenir.
Yığın, LIFO (Last In First Out) Son Giren İlk Çıkar tekniğiyle çalışır.
I N DF ve FSR Register (Dolaylı Erişim Kaydedicileri)
INDF, fiziksel bir kaydedici değildir. Mikrokontrolördeki RAM adresini tutar. INDF’e yazılan her veri, adresi FSR’de bulunan RAM’a yazılır. INDF’ten okunan veriler de adresi FSR’de bulunan RAM’den okunmuştur.
Süleyman Demirel Üniversitesi