1.1. PIC16F877nin Özellikleri
PIC16F877,belki en popüler PIC işlemcisi
olan PIC16F84ten sonra kullanıcılarına yeni ve gelişmiş olanaklar
sunmasıyla hemen göze çarpmaktadır. Program belleği FLASH ROM olan
PIC16F877de, yüklenen program PIC16F84te olduğu gibi elektriksel
olarak silinip yeniden yüklenebilmektedir. Çizelge 1de 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ı, PIC16F877yi 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
F877e 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 (PICF84de 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 VDDye 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.3. 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 modeda
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ı PORTDnin 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.3. Program ve Kullanıcı RAM Bellek
Organizasyonu
PIC16F877de üç bellek bloğu bulunmaktadır.
Program ve kullanıcı veri belleği ayrı bus yapısına sahiptir ve
aynı anda erişilebilmektedir. F877de 13 bitlik bir program sayacı
vardır ve 8Kx14 word adreslemeye yeterlidir. Reset vektörü 0x00da
kesme vektörüyse 0x04de 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. F84de 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ı
< 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 RE2yi, 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 RE2yi kontrol olarak kullanarak 8 bitlik veri busına
bağlı PIC16F877nin PORTDsine hem veri yazabilmekte, hem de
okuyabilmektedir.
1.4.2. Usart :
USART , yani senkron / asenkron alıcı verici
PICF877deki 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.3. 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. F877nin 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
PIC16F877nin 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 CPUsunun
ç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.1de PIC16F877nin
kullanıcı RAM bellek haritası görülmektedir.
Şekil: PIC16F877nin RAM Bellek Haritası
1.6.PIC16F877nin Besleme Uçları ve
Beslenmesi
PIC16F877nin besleme gerilimi 11, 12 ve 31,
32 numaralı pinlerden uygulanmaktadır. 11 ve 32 numaralı Vdducu +5
Va ve 12, 31 numaralı Vss ucu toprağa bağlanır. PICe ilk defa
enerji verildiği anda meydana gelebilecek gerilim dalgalanmaları
nedeniyle, oluşabilecek istenmeyen arızaları önlemek amacıyla
100nFlık dekuplaj kondansatörünün devreye bağlanması
gerekmektedir. PICler CMOS teknolojisi ile üretildiklerinden 2
ila 6 volt arasında çalışabilmektedirler. +5 Vluk bir gerilim ise
ideal bir değer olmaktadır.
1.7. PIC16F877nin Reset Uçları
Kullanıcının programı kasti olarak kesip
başlangıca döndürebilmesi için PICin 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.PIC16F877nin 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. PIC16F877de 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 4de 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 PICin özelliğine uygun olarak seçilmesidir. Örnek
verecek olursak 10MHz çalışma frekansına sahip bir PIC16F877 için
20MHzlik 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 4te hangi frekansta kaç
pFlı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 )
PICin 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
(h23F) 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 h18B 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 6da 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.0da
oluşan kesmedir.
1.9.1. TMR0 sayıcısı / zamanlayıcısı
PIC16F877nin RAM belleğinin h101adresinde
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 hFFden h00a gelince ilgili flagi
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 h81adresinde
bulunan özel bir registerdir. TMR0 sayıcısının kontrolünde
kullanılmaktadır. Çizelge 6de 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-uplar iptal edilir.
1: PORTB uçlarındaki pull-uplar 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 WDTyeuygulanan sinyali
bölmektedir. Böylece sayma hızları değiştirilebilir. Üç bitlik bu
sayı TMR0 veya WDTde birbirinden farklı 8 farklı oran seçme
olanağı oluştururmaktadır. Çizelge 8de 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 4e
bölünerek OSC2 ucundan dışarıya verilir. İşte 4e bölünen bu
frekansın bir saykılı bir komutun icrası için geçen süredir. Bu
çalışmamızda 4 MHzlik bir kristal osilatör kullanılmıştır. Bu
frekanstaki dahili komut saykılı 1MHzdir. Peryodu ise 1µsdir.
Yani dahili komut saykılı 1 µsdir. Bir komut 1 µslik 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
b111 seçilmiştir. Prescaler b111 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 µsdir.
TMR0 saymaya başladığında ilk sayı h00 olduğundan TIMER0
256 µs x 256 = 65536 µs(65.5ms) aralıklarla
kesme sinyali verecektir.
Örneğin, bu çalışmada prescaler değeri
b111 seçilmiştir. Prescaler b111 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 µsdir.TMR0
saymaya başladığında ilk sayı h00 olduğundan TIMER0
256µsx256=65536µs(65.5ms) aralıklarla kesme sinyali verecektir.
|