0 Kaydedicisi
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
ADCS1
|
ADCS0
|
CHS2
|
CHS1
|
CHS0
|
GO-DONE
|
-
|
ADON
|
ADON: A/D çeviriciyi yetkilendirme bitidir. ADON=1
ise A/D çevirici açıktır ve işlem yapılabilir durumdadır. ADON=0 ise A/D
çevirici kapalıdır.
GO/DONE: Eğer ADON biti de 1 ise A/D çevirici statü
biti görevini üstlenir. GO/DONE=1 ise A/D çevirici işlem yapıyor demektir.
GO/DONE=0 ise A/D çevirici üzerinde herhangi bir işlem yapılmıyordur.
CHS0:CHS2: A/D çevirici için kanal seçim bitlerini
oluşturur. Bu bitlere verilecek değerlerle A/D çevirme için hangi kanalın
seçileceği belirlenir. Daha Önceden de belirtildiği gibi PIC 16F877’de A/D
çevirici için 8 kanal mevcuttur.
000 = kanal 0, (RA0/AN0)
001 = kanal 1, (RA1/AN1)
010 = kanal 2, (RA2/AN2)
011 = kanal 3, (RA3/AN3)
100 = kanal 4, (RA5/AN4)
101 = kanal 5, (RE0/AN5)
110 = kanal 6, (RE1/AN6)
111 = kanal 7, (RE2/AN7)
ADCS0:ADCS1: A/D çevirici için clock frekansı seçim
bitleridir. Bu bitlere verilecek değerler ile A/D çevirme işlemi esnasında
kullanılacak frekans değeri bize sunulan değerler içerisinden seçilir.
00 = FOSC/2
01 = FOSC/8
10 = FOSC/32
11 = FRC (Harici bir RC osilasyon kaynağından gelen clock darbeleri
kullanılır.)
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
ADFM
|
-
|
-
|
-
|
PCFG3
|
PCFG2
|
PCFG1
|
PCFG0
|
PCFG0: PCFG3: A/D çevirici portunun biçimini
düzenlemeyi sağlayan bitlerdir. Yani A/D çevirme işleminde kullanılacak
pinlerin nasıl davranacağını belirlememize olanak sağlarlar.
ADFM: A/D çevirme işlemi esnasında meydana gelen
verinin biçimini belirlemeye yarayan bittir. ADFM=1 ise ADRESH kaydedicisinin
MSB kısmındaki altı biti 0 kabul edilir ve A/D çevirme sonucunda elde edilen
veri ADRESH’ın 2 bitlik LSB kısmına ve ADRESL’ye yazılır. ADFM=0 ise ADRESL’nin
LSB kısmındaki 6 biti 0 kabul edilir ve A/D çevirme sonucu elde edilen veri
ADRESL’nin son iki bitine ve ADRESH’a yazılır.
ADRESH: ADRESL kaydedicileri A/D dönüşümün 10 bit
sonucunu kapsar. A/D dönüşümü bittiği zaman, sonuç A/D sonuç kaydedicisinin içine
yüklenir.
PCFG3:
PCFG0
|
AN7(1)
RE2
|
AN6(1)
RE1
|
AN5(1)
RE0
|
AN4
RA5
|
AN3
RA3
|
AN2
RA2
|
AN1
RA1
|
AN0
RA0
|
VREF+
|
VREF-
|
KANAL/REFS
|
0000
|
A
|
A
|
A
|
A
|
A
|
A
|
A
|
A
|
VDD
|
VSS
|
8/0
|
0001
|
A
|
A
|
A
|
A
|
VREF+
|
A
|
A
|
A
|
RA3
|
VSS
|
7/1
|
0010
|
D
|
D
|
D
|
A
|
A
|
A
|
A
|
A
|
VDD
|
VSS
|
5/0
|
0011
|
D
|
D
|
D
|
A
|
VRE+
|
A
|
A
|
A
|
RA3
|
VSS
|
4/1
|
0100
|
D
|
D
|
D
|
D
|
A
|
D
|
A
|
A
|
VDD
|
VSS
|
3/0
|
0101
|
D
|
D
|
D
|
D
|
VRE+
|
D
|
A
|
A
|
RA3
|
VSS
|
2/1
|
011X
|
D
|
D
|
D
|
D
|
D
|
D
|
D
|
D
|
-
|
-
|
00
|
1000
|
A
|
A
|
A
|
A
|
VREF+
|
VREF-
|
A
|
A
|
VDD
|
RA2
|
6/2
|
1001
|
D
|
D
|
A
|
A
|
A
|
A
|
A
|
A
|
RA3
|
VSS
|
6/0
|
1010
|
D
|
D
|
A
|
A
|
VREF+
|
A
|
A
|
A
|
RA3
|
VSS
|
5/1
|
1011
|
D
|
D
|
A
|
A
|
VREF+
|
VREF-
|
A
|
A
|
RA3
|
RA2
|
4/2
|
1100
|
D
|
D
|
D
|
A
|
VREF+
|
VREF-
|
A
|
A
|
RA3
|
RA2
|
3/2
|
1101
|
D
|
D
|
D
|
D
|
VREF+
|
VREF-
|
A
|
A
|
RA3
|
RA2
|
2/2
|
1110
|
D
|
D
|
D
|
D
|
D
|
D
|
D
|
A
|
VDD
|
VSS
|
1/0
|
1111
|
D
|
D
|
D
|
D
|
VREF+
|
VREF-
|
D
|
A
|
RA3
|
RA2
|
1/2
|
TMR1 ZAMANLAYICISI
Zamanlayıcı olan tmr1’in amacı
sıralı çalışmakla 65536’nın kaydettiği özel olan 16 parçadır(bit). Kullanılan
osilatörün 4 mhz olduğunu farzedelim. Tmr1 ile 0-65536 mikrosaniyelik ölçüm
yapılabilir(4mhz’de ,tmr1 artışları 1 mikrosaniyede gerçekleşirr). Eğer bölücü
kullanılmışsa bu süre artırılabilir. Bölücü belirli bir orana
bölünür.(yerleştirmelerin yapıldığı bölücü T1CON kaydedicisi)
TMR1’i seçmek için T1CON’un 0.biti
1 yapılır. Tmr1’i çalıştırmak için önemli diğer kaydediciler ise PIR1 VE
PIE1’dir. Pır1 ilk taşma bayrağını içerir ve diğer kullanılan PIE1’lede tmr1
kesmesi sağlanır. Tmr1’le kesme sağlanır ve bayrak açılır. Biz sadece çevresel kesmeyi sağlamaya gerek duyarız ve
çevresel kesmeleri INTCON’a kaydederiz.
Takip ettiğimiz örnekte TMR1 zamanlayıcısında
10 saniyenin nasıl oluştuğunu gösteriyor. Görsel amaçlar için her 10 saniyede
bir PORTB’deki ledlerin yaklaşı 10 sn de bir tersini alır.
(152*65.536ms(mikrosaniye)=9.96 saniye yani 10 saniye olur.)
TIMER1’deki işlemlerin kontrol edildiği ve işlemler
yürütülürken bazı bilgilerin alındığı kaydedicidir.
Timer1
aşağıdaki modlardan birini işletebilir.
- Zamanlayıcı olarak
- Senkronize sayacı olarak
- Asenkronize sayacı olarak
TMR1CS (T1CON<1>) biti bu modlardan hangisinin
çalıştırılacağına karar verir. Zamanlayıcı modunda Timer1 her komut çevrimi
artışları, sayaç modunda her harici saat girişi yükselmesini belirler. Timer1
osilatör aktifken RC1/T10SI ve RC0/T10S0/T1CKI pinleri giriş olurlar.
TRISC<1:0> değeri ihmal edilir. Timer1 aynı zamanda dahili reset girişine
sahiptir. Bu reset CCP modül üretmelidir.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
---------
|
---------
|
T1CKPS1
|
T1CKPS0
|
T1OSCEN
|
T1SYNC
|
TMR1CS
|
TMR1ON
|
TMR1ON: Timer1’e
yetki veren bittir. TMR1ON biti 1 yapıldığında Timer1 kullanılır durumdadır,0
ise kullanım dışıdır.
TMR1CS: Timer
1 için clock kaynağının seçildiği bittir. TMR1CS 1 ise clock kaynağı olarak
RC0/T1OSO/T1CKI pininden gelen sinyalin yükselen kenarları seçilir. TMR1CS’nin
0 olması halinde ise dahili clock kaynağı kullanılır.
T1SYNC: Harici
clock kaynağının senkron kontrolünü yapan bittir. Eğer harici kaynak ile Timer1
eşzamanlı çalışmıyorsa T1SYNC 1 seviyesinde olur. Eğer eşzamanlı bir çalışma
var ise T1SYNC 0 seviyesindedir.
T1OSCEN: Timer1
osilatör kaynağı yetkilendirme bitidir. T1OSCEN 1 ise osilatör kaynağı
etkindir, 0 ise kullanım dışıdır.
T1CKPS0,T1CKPS1: Timer1 giriş sinyalinin bölme (prescale) oranının seçildiği
bilerdir. Bu bitlerin aldığı değerlere göre bölme prescaler değeri değişmekte
ve buna bağlı olarak Timer1 artma frekansı değişmektedir.
·
11 = 1/8 bölme değeri
·
10 = 1/4 bölme değeri
·
01 = 1/2 bölme değeri
·
00 = 1/1 bölme değeri
PIE1
kaydedicisi, çevresel kesmelerle ilgili bitleri olan bir kaydedicidir. Bir
çevresel kesmenin olabilmesi için, PIE1 (INTCON<6>) biti de set
edilmelidir.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
PSPIE
|
ADIE
|
RCIE
|
TXIE
|
SSPIE
|
CCP1IE
|
TMR2IE
|
TMR1IE
|
|
|
|
|
|
|
|
|
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
PIR1
kaydedicisi, çevresel kesmelerle ilgili uyarı bitlerini taşıyan kaydedicidir.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
PSPIF
|
ADIF
|
RCIF
|
TXIF
|
SSPIF
|
CCP1IF
|
TMR2IF
|
TMR1IF
|
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
Capture/Compare/PWM
Modülü (CCP)
CCP modülü 16 bitlik bir yazmaca sahiptir. Bu yazmaç
Capture yazmacı, Compare yazmacı veya PWM master/slave sinyal oranı (duty
cycle) yazmacı olarak kullanılır. Bu 16 bitlik yazmaç iki adet 8 bitlik
yazmaçdan oluşur (CCPR1L ve CCPR1H). CCP1CON yazmacı CCP modülünün kontrol
edilmesinde kullanılır.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
CCP1X
|
CCP1Y
|
CCP1M3
|
CCP1M2
|
CCP1M1
|
CCP1M0
|
CCP1X:CCP1Y = PWM’in en düşük bitleri
Capture modda kullanılmaz
Compare modda kullanılmaz
PWM Modda PWM Duty_cycle için en düşük 2 biti ayarlamak
üzere kullanılır. Diğer CCPRxL’dir.
CCP1M3:CCP1M0 = CCPx mod seçim bitleri
0000 =
Capture/Compare/PWM kapalı
0100 = Capture mod, her düşen kenarda
0101 = Capture mod, her yükselen kenarda
0110 = Capture mod, her yükselen 4üncü kenarda
0111 = Capture mod, her yükselen 16ıncı kenarda
1000 = Compare mod, eşleşmede çıkışı ayarlarma
1001 = Compare mod, eşleşmede çıkışı temizleme
1010 = Compare mod, eşleşmede yazılım kesmesi yaratma
1011 = Compare mod, tetikleme özel olayı
11xx = PWM Modu
INTCON kaydedicisi, okunabilir ve yazılabilir bir kaydedicidir. Kapsamında TMR0 / WDT kaydedicisi taşma uyarı bitleri, PORTB değişim ve dış kesme (RB0 / INT pin interrupt) denetim bitleri, TMR0 kesme denetim bitleri bulunur.
7 6 5 4 3 2 1 0
GIE
|
PEIE
|
TOIE
|
INTE
|
RBIE
|
TOIF
|
INTF
|
RBIF
|
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
kesmeleri geçerli
yapma 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: PORTB değişiklik 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
Bu register değişik kontrol bitlerini içeren özel bir register'dır.
B portunun çıkışlarını pull-up yapan, interrupt sinyalinin tetikleme
kenarını seçen, TMR0 ve WDT için frekans bölme sayısını belirten ve TMR0 veya
WDT seçme bayrağı bulunduran bir registerdir.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
RBPU’
|
INTEGD
|
TOCS
|
TOSE
|
PSA
|
PS2
|
PS1
|
PS0
|
RBPU' : PORTB
pull-up aktif etme bayrağı
1 : PORTB pull-up’ lar pasifleştirilir.
0 : PORTB pull-up’ lar
aktifleştirilir.
INTEGD : Interrupt
kenarı seçme biti
1 : Interruptlar RB0/INT sinyalin yükselen
kenarında oluşur
0 : Interruptlar RB0/INT sinyalin düşen kenarında
oluşur.
TOCS : TMR0 clock
sinyali kaynağı seçme biti
1 :
RA4/TOCKI pinden alınan clock sinyali
0 :
Komut dizimi ile oluşturulan clock ( CLK0 )
TOSE : TMR0 harici
clock sinyali kenar seçme biti
1 :
Düşen kenarda artış
0 :
Yükselen kenarda artış
PSA : Frekans
bölücü seçme biti
1 :
Prescaler (frekans bölme sayısı) değeri WDT için geçerli
0
: Prescaler değeri Timer0 için geçerli
PS2, PS1, PS0
: Prescaler değeri seçme bitleri
PS2 PS1 PS0
|
TMR0
Değeri
|
WDT
Değeri
|
0
|
0
|
0
|
1/2
|
1/1
|
0
|
0
|
1
|
1/4
|
1/2
|
0
|
1
|
0
|
1/8
|
1/4
|
0
|
1
|
1
|
1/16
|
1/8
|
1
|
0
|
0
|
1/32
|
1/16
|
1
|
0
|
1
|
1/64
|
1/32
|
1
|
1
|
0
|
1/128
|
1/64
|
1
|
1
|
1
|
1/256
|
1/128
|
NOT: pic16f877 baz alınmıştır.