Makaleler / Elektronik / Mikrokontrolür Mikroişlemci / PIC 16F877


Yazar: Durmuş Gökçebay
Gönderen: Elektro   Tarih: 07-02-2003 10:03
Yorumlar: (1)   Oylar:

PIC16F877

1.1. PIC16F877’nin Özellikleri

PIC16F877,belki en popüler PIC işlemcisi olan PIC16F84’ten sonra kullanıcılarına yeni ve gelişmiş olanaklar sunmasıyla hemen göze çarpmaktadır. Program belleği FLASH ROM olan PIC16F877’de, yüklenen program PIC16F84’te olduğu gibi elektriksel olarak silinip yeniden yüklenebilmektedir. Çizelge 1’de PIC16F877 ve PIC16F84 işlemcileri arasında özellik karşılaştırması yapılmıştır.

Özellikle PIC16C6X ve PIC16C7X ailesinin tüm özelliklerini barındırması, PIC16F877’yi kod geliştirmede de ideal bir çözüm olarak gündeme getirmektedir. Konfigürasyon bitlerine dikkat etmek şartıyla C6X veya C7X ailesinden herhangi bir işlemci için geliştirilen kod hemen hiçbir değişikliğe tabi tutmadan F877’e yüklenebilir ve çalışmalarda denenebilir. Bunun yanı sıra PIC16F877, PIC16C74 ve PIC16C77 işlemcileriyle de bire bir bacak uyumludur.

1.2. PIC16F877 Portlarının Fonksiyonları

1.2.1. Port a :

Her bir bitibağımsız olarak giriş veya çıkış olarak tanımlanabilmektedir. 6 bit genişliğindedir (PICF84’de 5 bittir). RA0, RA1, RA2, RA3, RA4 ve RA5 bitleri analog / sayısal çevirici olarak konfigüre edilebilmektedir. Buna ek olarak RA2 ve RA3 gerilim referansı olarak da konfigüre edilebilmektedir. (bu durumda bu bitler aynı anda A / D çevirici olarak kullanılamamaktadır) . İlgili registerlar ve adresleri aşağıdaki gibidir.

PORTA 0x05

TRISA 0x85 ; giriş / çıkış belirleme registeri

ADCON1 0x9F ; RA portlarının A / D, referans gerilimi veya sayısal giriş /çıkış olarak seçiminde kullanılmaktadır.

İşlemciye ilk defa gerilim uygulandığında RA4 hariç diğer beş PORTA biti A / D çeviricidir. Eğer RA portunun bazı bitlerini sayısal giriş / çıkış olarak kullanmak istersek ADCON1 registerında değişiklik yapmamız gerekmektedir.

1.2.2. Port b:

Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit genişliğindedir. B portunun her bacağı dahili bir dirençle VDD’ye bağlıdır. ( weak pull-up). Bu özellik varsayılan olarak etkin değildir. Ancak OPTION registerinin 7.bitini 0 yaparak B portunun bu özelliğini etkinleştirilebilir.

RB4-RB7 bacakları aynı zamanda bacakların sayısal durumlarında bir değişiklik olduğunda INTCON registerının 0. biti olan RBIF bayrağını 1 yaparak kesme oluşturmaktadır. Bu özelliği, işlemci SLEEP konumundayken, devreye bağlı tuş takımının her hangi bir tuşa basıldığında işlemcinin yeniden etkinleşmesi için kullanabilir. Bütün bunların yanı sıra RB6 ve RB7 yüksek gerilim programlama, RB3 ise düşük gerilim programlama modlarında da kullanılmaktadır. İlgili registerlar ve adresleri aşağıdaki gibidir.

PORTA 0x06

TRISB 0x86    ; giriş / çıkış belirleme registeri

OPTION_REG          0x81 , 0x181

1.2.1. Port c :

Her bir biti bağımsız olarak sayısalgiriş veya çıkış olarak tanımlanabilmektedir. 8 bit genişliğindedir. Tüm port bacakları Schmitt Trigger girişlidir. TRISE registerının 4. biti olan PSPMODE bitini 1 yaparak “parallel slave mode” da kullanılabilir. Bu fonksiyon aracılığıyla 8 bit genişliğindeki her hangi bir mikroişlemci bus’ına bağlanabilir. İlgili registerlar ve adresleri aşağıdaki gibidir.

PORTC 0x07

TRISC 0x087 ; giriş / çıkış belirleme registeri

1.2.4. Port d :

Her bir biti bağımsız olarak sayısal giriş veya çıkış olarak tanımlanabilmektedir. 8 bit genişliğindedir. Tüm port bacakları Schmitt Trigger girişlidir. TRISE registerının 4.biti olan PSPMODE bitini 1 yaparak “parallel slave mode”da kullanılabilir. Bu fonksiyon aracılığıyla 8 bit genişliğindeki herhangi bir mikroişlemci bus’ına bağlanabilir.

PORTD 0x08

TRISD 0x88

TRISE 0x89

1.2.5. Port e :

Her bir biti bağımsız olarak giriş veya çıkış olarak tanımlanabilmektedir. 3 bit genişliğindedir. RE0, RE1 ve RE2 bacaklarında Schmitt Trigger giriş tamponları vardır. Her bir bacak analog / sayısal çevirici olarak konfigüre edilebilmektedir. Eğer PORTD paralel slave port olarak konfigüre edilirse, RE0, RE1 ve RE2 bacakları PORTD’nin bağlandığı mikroişlemci bus’ına sırasıyla READ, WRITE ve CHIP SELECT kontrol girişleri olarak kullanılabilmektedir. Bunun için TRISE uygun biçimde ayarlanmalıdır. İlgili registerlar ve adresleri aşağıdaki gibidir.

 

PORTE 0x09

TRISE 0x89 ; giriş / çıkış belirleme registeri

ADCON1 0x9F ; RE portlarının A / D veya sayısal giriş / çıkış olarak

seçiminde kullanılmaktadır.

İşlemciye ilk defa gerilim uygulandığında üç PORTE biti de A / D çeviricidir. Eğer RE portunun bazı bitlerini sayısal giriş / çıkış olarak kullanmak istenirse ADCON1 registerında değişiklik yapılması gerekecektir.

1.1. Program ve Kullanıcı RAM Bellek Organizasyonu

PIC16F877’de üç bellek bloğu bulunmaktadır. Program ve kullanıcı veri belleği ayrı bus yapısına sahiptir ve aynı anda erişilebilmektedir. F877’de 13 bitlik bir program sayacı vardır ve 8Kx14 word adreslemeye yeterlidir. Reset vektörü 0x00’da kesme vektörüyse 0x04’de yer almaktadır.

Kullanıcı veri belleği birden fazla register bankasına bölünmüştür. Bu register banklarında hemgenel amaçlı registerlar hem de özel fonksiyon registerları (SFR) bulunmaktadır.Register bankasını seçmek için STATUS registerındaki RP1 ve RP0 bitleri kullanılmaktadır. F84’de iki register bankası olduğunu ve yalnızca RP0 bitini ayarlamak suretiyle ilgili register bankasının seçildiğine dikkat edilmelidir. ( Çizelge 2 ).

Çizelge 2. Status registerı

IRP RP1 RP0 TO PD DC
Bit7 bit0

< RP1, RP0 > bitleri aşağıdaki gibi ayarlanarak istenilen register bankasına erişebilmektedir. Her register bankası 128 byte genişliğindedir. ( 7Fh ).

Çizelge 1. Status Register Bank Seçme Bitleri

00 Bank 0
01 Bank 1
10 Bank 2
11 Bank 3
 

1.4. Özel Fonksiyonlar

1.4.1 Paralel slave port:

TRISE registerının PSPMODE biti 1 yapıldığında PORTD 8 bit genişliğinde mikroişlemci portu olarak kullanabilir. Bu arada RE0, RE1 ve RE2’yi, TRISE ve ADCON1 registerlarında ilgili ayarları yaparak sayısal giriş olarak da tanımlamak gerekmektedir. Böylece harici bir mikroişlemci, RE0, RE1 ve RE2’yi kontrol olarak kullanarak 8 bitlik veri bus’ına bağlı PIC16F877’nin PORTD’sine hem veri yazabilmekte, hem de okuyabilmektedir.

1.4.2. Usart :

USART , yani senkron / asenkron alıcı verici PICF877’deki iki seri giriş / çıkış modülünden biridir. Seri iletişim arayüzü ( SCI:serial comm.interface ) olarak da bilinen USART, monitör veya PC gibi aygıtlara tam çift yönlü asenkron bağlantıda kullanılmak üzere konfigüre edilmiştir. A / D veya D / A arayüzlerine, seri kullanılmak üzere konfigüre edilebilmektedir. USART aşağıdaki gibi konfigüre edilebilmektedir.

  • Asenkron  : Tam çiftyönlü ( full duplex )
  • Senkron    : Master, yarım çift yönlü ( half duplex )
  • Senkron    : Slave, yarım çift yönlü RC6 verici, RC7 ise alıcı port olarak kullanılmaktadır. RCSTA ( 0x18 ) ve TXSTA ( 0x98) registerları da konfigürasyonda kullanılmaktadır.

    1.4.1. Master synchronous serial port (MSSP)

    MSSP modülü, diğer çevre birimleri veya mikroişlemcilerle seri iletişimde kullanılmaktadır. Bu çevre birimleri seri EEPROM, kaydırmalı registerlar ( shift register ), gösterge sürücüleri, A / D çeviriciler vb. olabilir. MSSP modülü aynı anda aşağıdaki iki moddan birine konfigüre edilebilir.

    RC5: Seri veri çıkışı(SDO:Serial data out)

    RC4: Seri veri girişi (SDI: Serial data in)

    RC3: Seri saat(SCK:Serial clock)

    Bu modlardan birine göre konfigüre etmek içinse SSPSTAT (senkron seri port durum registerı, 0x94), SSPCON (senkron seri port kontrol registerı, 0x14) ve SSPCON2 (senkron seri port kontrol registerı 2,0x91) registerları ayarlanmalıdır.

    1.4.4. Analog / sayısal çevirici modülü:

    A / D modülü 16C7X ailesinden farklı olarak 10 bittir. Toplam 8 A / D kanal bulunmaktadır. F877’nin güzel bir özelliğide işlemci SLEEP modundayken bile A / D çeviricinin geri planda çalışmasıdır. A / D kanalları için RA4 hariç diğer RA portları ve RE portları kullanılabilir. Aşağıda ilgili registerlar ve adresleri gösterilmiştir.

    ADRESH        0x1E    ; A / D sonuç registerı (high register)

    ADRESL        0x9E    ; A / D sonuç registerı (low register)

    ADCON0       0x1F    ; A / D kontrol registerı 0

    ADON1         0x9F   ; A / D kontrol registerı 1

    1.4.5. Capture / compare ve pwm modülü:

    Her capture /compare ve pwm modülü 16 bitlik yakalama (capture registerı, 16 bitlik karşılaştırma ( compare ) registerı veya 16 bitlik PWM (darbe genişlik modülayonu) registerı olarak kullanılmaktadır.

    Yakalama (capture) modunda, TMR1 registerının değeri, RC2 / CCP1 bacağının durumunda bir gelişme olduğunda CCPR1H:CCPR1L registerlarına yazılmakta ve PIR1 registerının 2. biti olan CCP1IF kesme bayrağı 1 olmaktadır. RC2 bacağının durumu, her düşen kenarda, her yükselen kenarda, her yükselen 4. veya 16. kenarda kontrol edilecek şekilde CCP1CON registerı aracılığıyla ayarlanarak konfigüre edilebilir.

    Karşılaştırma (compare) moduysa CCPR1 registerındaki 16 bitlik değer düzenli olarak TMR1 register değeriyle karşılaştır ve bir eşitlik olduğunda RC2 / CCP1 bacağı CCP1CON registerında yaptığımız ayara göre 1, 0 olur veya durumunu korur. PWM modundaysa RC2 / CCP1 bacağı 10 bit çözünürlükte darbe genişlik modülasyonlu bir sinyal üretecek şekilde konfigüre edilebilir. PR2 registerı darbe genişlik periyodunun tayininde kullanılmaktadır. Aşağıda ilgili registerlar ve adresleri gösterilmiştir.

    CCPR1H		0x16    ; Yakalama / karşılaştırma registerı ( High  register )
    
    CCPR1L		0x15    ; Yakalama / karşılaştırma registerı ( Low register )
    
    CCP1CON		0x17    ; Kontrol registerı
    
    PR2		0x92    ; PWM çıkış registerı
    
    TMR1L		0x0E    ; TMR1 registerı ( High register )         
    
    TMR1H		0x0F    ; TMR1 registerı ( Low register )
    
    1.5. RAM Bellek

    PIC16F877’nin 0x00~7Fh adres aralığına ayrılmış olan RAM belleği vardır. Bu bellek içerisindeki file registerleri içerisine yerleştirilen veriler PIC CPU’sunun çalışmasını kontrol etmektedir. File register adı verilen özel veri alanlarının dışında kalan diğer bellek alanları, normal RAM bellek olarak kullanılmaktadırlar. Şekil 1.1’de PIC16F877’nin kullanıcı RAM bellek haritası görülmektedir.

    Şekil 1.1.PIC16F877’nin RAM Bellek Haritası

    1.6.PIC16F877’nin Besleme Uçları ve Beslenmesi

    PIC16F877’nin besleme gerilimi 11, 12 ve 31, 32 numaralı pinlerden uygulanmaktadır. 11 ve 32 numaralı Vdducu +5 V’a ve 12, 31 numaralı Vss ucu toprağa bağlanır. PIC’e ilk defa enerji verildiği anda meydana gelebilecek gerilim dalgalanmaları nedeniyle, oluşabilecek istenmeyen arızaları önlemek amacıyla 100nF’lık dekuplaj kondansatörünün devreye bağlanması gerekmektedir. PIC’ler CMOS teknolojisi ile üretildiklerinden 2 ila 6 volt arasında çalışabilmektedirler. +5 V’luk bir gerilim ise ideal bir değer olmaktadır.

    1.7. PIC16F877’nin Reset Uçları

    Kullanıcının programı kasti olarak kesip başlangıca döndürebilmesi için PIC’in 1 numaralı ucu MCLR olarak kullanılmaktadır. MCLR ucuna 0 Volt uygulandığında programın çalışması başlangıç adresine döner. Programın ilk başlangıç adresinden itibaren tekrar çalışabilmesi için, aynı uca +5 v gerilim uygulanmalıdır.

    1.8.PIC16F877’nin Clock Uçları ve Osilatör Tipleri

    PIC16CXX mikrodenetleyicilerinde 4 çeşit osilatör bulunmaktadır. Kullanıcı bu 4 çeşitten birini seçerek iki konfigürasyon bitini (FOSC1 ve FOSC2) programlayabilir. Bu osilatör çeşitleri çizelgede verilmiştir. PIC16F877’de clock uçları 13 ve 14 nolu pinlerdir. Hazırlanacak olan PIC programlarında kullanılan osilatör tipi PIC programının çalışma hızını ve hassasiyetini etkileyeceğinden dolayı amaca uygun bir osilatör devresi kullanılmalıdır. Çizelge 4’de farklı osilatör çeşitleri ve özellikleri görülmektedir. Osilatör tipinin seçiminde dikkat edilecek bir başka nokta ise, seçilecek olan osilatörün kullanılan PIC’in özelliğine uygun olarak seçilmesidir. Örnek verecekolursak 10MHz çalışma frekansına sahip bir PIC16F877 için 20MHz’lik bir osilatör kullanmak doğru olmaz. Fakat daha düşük bir frekans değeri ile çalışan bir osilatör devresi kullanılabilir.

    Çizelge 4. Osilatör çeşitleri

    Osilatör Tipi

    Tanımı

    Özelliği

    Frekansı

    LP

    Kristal osilatör veya seramik rezonatör

    Asgari akım

    40KHz

    XT

    Kristal osilatör veya seramik rezonatör

    Genel amaçlı

    4MHz

    HS

    Kristal osilatör veya seramik rezonatör

    Yüksek hız

    20MHz

    RC

    Direnç / Kapasitör zaman sabitli

    Düşük maliyet

    4MHz

    1.8.1.Kristalosilatör / seramik rezonatör

    XT, LP ve HS modları, RC osilatörlere nazaran çok daha hassastırlar. Bu modlar, kristal osilatör veya rezonatörlerin, OSC1 / CLKIN ve OSC2 / CLKOUT uçlarına bağlanmalarıyla kurulmaktadır. Çizelge 4’te hangi frekansta kaç pF’lık kondansatör kullanılması gerektiği belirtilmiştir.

    Çizelge 5. Frekansa Göre Kondansatör Seçimi

    OSİLATÖR TİPİ

    FREKANS

    KONDANSATÖR

    LP

    32KHz

    33-68pF

    200 KHz

    15-47pF

     

    100KHz

    47-100pF

    XT

    500KHz

    20-68pF

     

    1MHz

    15-68 pF

     

    2MHz

    15-47 pF

     

    4MHz

    15-33 pF

    HS

    8MHz

    15-47 pF

     

    20MHz

    15-47 pF

    1.8.2. RC osilatör

    Zamanlamanın çok hassas olmadığı durumlarda RC ikilisi osilatör kaynağı olarak kullanılmaktadır. RC osilatör, maliyetin azaltılmasını sağlamaktadır. Kullanıcı dış R ve C elemanlarının toleransı nedeniyle meydana gelen değişiklikleri de dikkate almalıdır. Direncin değeri 3 ila 100Kohm arasında seçilmelidir. 1Mohm gibi yüksek direnç değerleri osilatörü gürültü ve nem gibi çevresel etkilere karşı duyarlı hale getirir. 2, 2 Kohm değerinin altında ise, osilatör kararsız hale gelebilmekte, hatta tamamıyla durabilmektedir.

    1.9 Kesmeler ( Interrupts )

    PIC’in port girişlerinden veya donanım içerisindeki bir sayıcıdan gelen sinyal nedeniyle belleğinde çalışmakta olan programın kesilmesi olayına kesme denir. Programın kesildiği andan itibaren önceden hazırlanan bir alt program çalışır. Alt program işlevini bitirdikten sonra ana program kaldığı yerden itibaren çalışmasına devam etmektedir. Netice olarak bir kesme, ana program çalışmasını sadece duraklatır ama hiçbir zaman işlevini devam ettirmesini engellemez. Interrupt alt programları kullanarak, program içerisinde kullanılacak komut sayısı azaltılır ve bir sürü mantıksal karışıklıklar önlenir. Kesme olayı sırasında meydana gelecek olan olayları sıralayacak olursak;


    1. Kesme olayı meydana geldiğinde STACK registerin olduğu adrese (h’23F’) atlanır.
    2. Ana programın kaldığı adresi stack registere yazılır.
    1. Kesme alt programı çağrılır.
    4. Kesme alt programının olduğu adrese atlanır.
    5. Kesme alt programı çalıştırılır.
    6. STACK (Yığın) registerin bulunduğu adrese gidilir.
    7. Ana programa dönüş adresini alınır.
    8. Ana programın kesildiği yerdeki adresten bir sonraki adrese gidilir ve devam edilir.

    Bunu şematik olarak ifade etmek gerekirse aşağıdaki gibi olur.

     

    Şekil 1.2. Kesme olayı

    1.9.1.INTCON register

    INTCON (Interrupt Control) registeri RAM bellekte h’18B’ adresinde bulunan özel bir registerdir. Bu register içerisinde her bir kesme kaynağı için bir flag ve bir de global kesme flagi bayrağı bulunmaktadır.

    Çizelge 6

    GIE        : Tüm kesme işlemlerini iptal etme bayrağı
    
                0: Tüm kesmeler geçersiz
    
                1: Aktif yapılmış olan tüm kesmeler geçerli
    
    EEIE     : EEPROM belleğe yazma işlemi tamamlama kesmesi
    
                0: Geçersiz
    
                1: Geçerli
    
    TOIE     : TMR0 sayıcı kesmesini aktif yapma bayrağı 
    
                0: Geçersiz
    
                1: Geçerli
    
    INTE     : Harici kesmeyi aktif yapma bayrağı
    
                0: Geçersiz
    
                1: Geçerli
    
    RBIE     :  PORTB(4, 5, 6, 7.bitleri) değişiklik kesmesini aktif yapma bayrağı
    
                0: Geçersiz
    
                1: Geçerli
    
    TOIF     : TMR0 sayıcısı zaman aşımı bayrağı
    
                0: Zaman aşımı yok
    
                1: Zaman aşımı var
    
    INTF    : Harici kesme bayrağı
    
                0: Harici kesme oluşmadığında
    
    RBIF     : PORTB değişiklik bayrağı
    
                0: RB4~RB7 uçlarında değişiklik yok
    
                1: RB4~RB7 uçlarından en az birisinde  değişiklik var.
    
    Tüm kesme işlemlerinin kontrolü bu register aracılığı ile yapılır. Çizelge 6’da intcon registerin her bir bitinin ne işe yaradığı gösterilmiştir.

    1.9.2.Kesme kaynakları

    Kesme birkaç yoldan yapılabilmektedir. Bunlardan bazıları:

  • Harici(external) kesmeler.
  • TMR0 sayıcısında oluşan zaman aşımı kesmesi.
  • PORTB(4, 5, 6, 7 bitler)’deki lojik seviye değişikliğinden kaynaklanan kesmeler.
  • EEPROM belleğe yazma işleminin tamamlanmasında meydana gelen kesmeler. Bu çalışmada kullanılan kesme portb.0’da oluşan kesmedir.

    1.9.1. TMR0 sayıcısı / zamanlayıcısı

    PIC16F877’nin RAM belleğinin h’101’adresinde TMR0 adı verilen özel bir register bulunmaktadır.(TMR0) TMR0 programlanabilen bir sayıcıdır. Yani saymaya istenilenbir değerden veya baştan başlatılabilir. Herhangi bir anda içeriği sıfırlanabilir. Belli başlı özellikleri şunlardır.

    8-bit bir sayıcıdır.

    Yazılabilir / okunabilir.

    Programlanabilen frekans bölme değeri ( prescaler value ) vardır.

    Sayı artışı harici veya dahili clock saykılı ile yapılabilir.

    Düşen ve yükselen kenar tetiklemesi ( harici olarak )

    Sayıcı değeri artan yöndedir.

    TMR0’ın değeri h’FF’den h’00’a gelince ilgili flag’i “1” yaparak kesme oluşturur.

    TMR0 sayıcısının önemliözelliklerinden biri de ana program veya kesme alt programları çalışırken sayma işlemini durdurmamasıdır.

    1.9.4. OPTION register

    OPTION register, RAM belleğin h’81’adresinde bulunan özel bir registerdir. TMR0 sayıcısının kontrolünde kullanılmaktadır. Çizelge 6’de bu registerin her bir bitinin ne görevler yaptığı açıklanmıştır.

    Çizelge 7. Option register

    PS0, PS1, PS2 :Frekans bölme sayısı
    
     
    
    PSA                  :Frekans bölücü seçme biti
    
                            0:Frekans bölme sayısı TMR0 için geçerli        
    
                            1:Frekans bölme sayısı WDT için geçerli
    
     
    
    TOSE                :TMR0 sinyal kaynağı kenar seçme biti
    
                            0:RA4/TOCKI ucundan düşen kenar tetiklemesi
    
                            1: RA4/TOCKI ucundan yükselen kenar tetiklemesi
    
     
    
    TOCS               :TMR0 sinyal kaynağı seçme biti
    
                            0:Dahili komut saykılı seçilir
    
                            1:Harici dijital sinyal(RA4/TOCKI ucu)
    
     
    
    INTEDG           :Harici kesme sinyali kenar seçme biti
    
                            0:RB0/INT ucundan düşen kenarda tetikleme
    
                            1: RB0/INT ucundan yükselen kenarda tetikleme
    
     
    
    RBPU                :PORTB pull up geçerli yapma biti
    
                            0:PORTB uçlarındaki pull-up’lar iptal edilir.
    
                            1: PORTB uçlarındaki pull-up’lar geçerli yapılır
    
    1.9.5 Prescaler kullanımı

    Option registerin 0, 1, 2. bitleri (PS0~PS2) içerisine yerleştirilen sayılar, TMR0 veya WDT’yeuygulanan sinyali bölmektedir. Böylece sayma hızları değiştirilebilir. Üç bitlik bu sayı TMR0 veya WDT’de birbirinden farklı 8 farklı oran seçme olanağı oluştururmaktadır. Çizelge 8’de prescaler değerleri görülmektedir.

    Çizelge 8. Prescaler Değerleri

    Frekans

    bölme sayısı

    TMR0 oranı WDT oranı
    000 1/2 1/1
    001 1/4 1/2
    010 1/8 1/4
    011 1/16 1/8
    100 1/32 1/16
    101 1/64 1/32
    110 1/128 1/64
    111 1/256 1/128
     

     

    TMR0 veya WDT sayıcılarının kaç dahili komut saykılında bir defa bir üst sayıya geçişini belirleyen orandır. Örneğin;

    TMR0 oranı 1/2 ise, 2 komut saykılında bir defa üst sayıya geçiş olmaktadır.

    TMR0 oranı 1/8 ise, 8 komut saykılında bir defa üst sayıya geçiş olmaktadır.

    Program belleğine yerleştirilen komutların çalışabilmesi için harici bir osilatörden clock sinyali ( fosc ) uygulanması gerekmektedir. Bu frekans PIC tarafından 4’e bölünerek OSC2 ucundan dışarıya verilir. İşte 4’e bölünen bu frekansın bir saykılı bir komutun icrası için geçen süredir. Bu çalışmamızda 4 MHz’lik bir kristal osilatör kullanılmıştır. Bu frekanstaki dahili komut saykılı 1MHz’dir. Peryodu ise 1µs’dir. Yani dahili komut saykılı 1 µs’dir. Bir komut 1 µs’lik bir sürede icra edilmektedir. Prescaler değeri ile TMR0 sayıcısının kaç µs aralıklarla saydığını veya kaç µs aralıklarla kesme verdiğini belirlenmektedir.

    Örneğin, bu çalışmada prescaler değeri b’111’ seçilmiştir. Prescaler b’111’ olduğunda TMR0 oranı 1/256 olmaktadır. fosc değeri 4MHz olduğundan, komut saykılı 1µs olur. Buradan TMR0 sayıcısının 256 dahili komut saykılında 1 defa arttığı anlaşılır. TIMER0 sayma aralığı bu çalışma için 256 µs’dir. TMR0 saymaya başladığında ilk sayı h’00’ olduğundan TIMER0

    256 µs x 256 = 65536 µs(65.5ms) aralıklarla kesme sinyali verecektir.

    Örneğin, bu çalışmada prescaler değeri b’111’ seçilmiştir. Prescaler b’111’ olduğunda TMR0 oranı 1/256 olmaktadır. fosc değeri 4MHz olduğundan, komut saykılı 1µs olur. Buradan TMR0 sayıcısının 256 dahili komut saykılında 1 defa arttığı anlaşılır. TIMER0 sayma aralığı bu çalışma için 256 µs’dir. TMR0 saymaya başladığında ilk sayı h’00’ olduğundan TIMER0
    256 µs x 256 = 65536 µs(65.5ms)
    aralıklarla kesme sinyali verecektir.