Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
KESMELER (Interrupts)
5.Hafta Mikrodenetleyiciler
2
Kesmeler Kesme, mikrodenetleyicinin gerçekleştirdiği işleme bakmaksızın belirli durumların veya olayların oluşması halinde isteklere/olaylara cevap verilmesini sağlayan mekanizmadır. Oluşan her kesme olayı ile programın normal işlenme süreci değiştirilerek program durdurulur ve kesme alt programı işletildikten sonra ana programın işlenmesi kalınan noktadan devam eder. Kesme kaynakları;
3
Kesme Kaydedici Blok Diyagramları
4
Kesme İsteği/Olayı Lojik Devresi
Mikrodenetleyiciler
5
RB0/INT KESME OLAYI OPTION INTCON
RB0/INT girişinden harici olarak kesme oluşturulur. Bu girişe uygulanan interrupt sinyalinin hangi kenarda olacağı OPTION 6. biti ile belirlenir. INTCON 7.biti GIE ile kesmelerine izin verilir. INTCON 4. biti INTE ile kesmeye izin verilir. INTCON 1. biti INTF bitinin 1 olması kesme oluştuğunu 0 olursa harici kesme oluşmadığının bildirir. OPTION INTCON
6
Örnek: RB0 girişine bağlı buton ile harici kesme;Başlangıçta ON durumunda olan RB7 ye bağlı LED, RB0 dan kaynaklanan kesme olayında LED OFF konumuna alınmakta yeni bir kesme ile yeniden ON konumuna alınması istenmektedir. list p=pic16f877a #include<p16f877a.inc> __CONFIG _HS_OSC & _WDT_OFF org 0x000 goto basla org 0x004 goto kesme basla: bsf STATUS, RP0 ; Bank 1' gecis movlw 0x01 movwf TRISB ; PortB I/O atama bcf OPTION_REG, INTEDG bsf OPTION_REG, NOT_RBPU ; Pull-up disable bcf STATUS, RP0 ; Bank 0'a gecis clrf PORTB ; Portu temizle bsf PORTB, 7 ; RB7 çıkış lojik1 bsf INTCON, INTE ; RB/INT enable bsf INTCON, GIE ; Global Interrupt Enable git: goto git ; sonsuz dongu kesme: ; Interrupt altprogrami bcf INTCON, INTF ; bayragi temizle btfss PORTB, 7 ; RB7 lojik1 mi goto alt_prg bcf PORTB, 7 ; RB7 lojik0 ata retfie alt_prg: bsf PORTB,7 ; RB7 lojik1 ata end
7
PORTB Değişim Kesme Olayı
PORTB nin 4,5,6,7 pinlerinden en az birinde durum değişikliği olması durumunda RB Port değişimi kesme olayı meydana gelir. INTCON 7.biti GIE ile kesmelerine izin verilir. INTCON 3. biti RBIE biti ile kesmeye izin verilir. INTCON 0. biti RBIF kesme bayrağı biti PORTB nin 4,5,6,7 pinlerindeki değişikliği bildirir. INTCON
8
Örnek: PORTB nin 4,5,6,7 pinlerindeki butonlardan herhangi birisine basılması ile kesme alt programı çalışarak kesme olayı hangi pinin de olduğunu PORTB nin 0,1,2,3 pinlerindeki LED lerde görülmesi. list p=pic16f877a #include<p16f877a.inc> __CONFIG 0x3F31 ;__CONFIG b' ' org 0x000 goto basla org 0x004 goto ISR basla: bsf STATUS, RP0 ; Bank 1' gecis movlw 0xF0 movwf TRISB ; PortB I/O atama bsf OPTION_REG, NOT_RBPU ; Pull-up disable bcf STATUS, RP0 ; Bank 0'a gecis movlw 0xFF movwf PORTB ;PortB lojik1 bsf INTCON, RBIE ; PORTB degisim kesme enable bsf INTCON, GIE ; Global Kesme Enable dongu: goto dongu ;sonsuz dongu ISR: ;kesme programi bcf INTCON, RBIF ; kesme bayragi sil btfss PORTB, 7 ; RB7 test et goto LED0 btfss PORTB, 6 ; RB6 test et goto LED1 btfss PORTB, 5 ; RB5 test et goto LED2 btfss PORTB, 4 ; RB4 test et goto LED3 retfie LED0: bcf PORTB,0 LED1: bcf PORTB,1 LED2: bcf PORTB,2 LED3: bcf PORTB,3 end
9
Çalışma Sorusu: RB0 pinine bağlı olan bir tuşa her basıldığında kesme üreten ve PD4-PD7 pinlerine bağlı olan 4 adet led ile 0-9 arasında binary sayan program kodlarını yazın.
10
TIMER0 Modülü Timer0 modül, timer/sayaç aşağıdaki özelliklere sahiptir. • 8 bitlik timer/sayaç , • Okunabilir ve yazılabilir , • 8 bitlik programlanabilir prescaler., • İçten veya dıştan saat ayarı , • FFh` tan 00h`ye taşma üzeri kesme , • Dış saatin kenar seçimi ,
11
Timer modu; TOCS biti (OPTION<5>) biti lojik 0 atandığında TMR0 kaydedicinin içeriği dahili osilatör frekansı ile artar. Eğer temizlenmesiyle seçilir. Timer modunda Timer0 modülü her bir komut sürecini uzatır. Eğer, Sayaç modu kullanılması için TOCS biti (OPTION<5>) lojik 1 olarak atanır ve RA4 girişinden dışarıdan gelen değişim ile TMR0 kaydedici içeriği artar. Bu modda, artım için yükselen ve düşen kenar tetiklemesi TOSE (OPTION<4>) tarafından belirlenmektedir. TOSE bitinin temizlenmesi ile yükselen sınırları seçecektir. OPTION_REG Bit 5 TOCS: TMR0 saat kaynağını seçme biti 0 = Dahili komut çevrim clocku kullanılır (CLKOUT) 1 = RA4/TOCK1 pininden (uçundan) gelen darbeler clock kaynağı olur Bit 4 TOSE: TMR0 kaynak kenarı seçme biti (Eğer TOCS = 1 ise) 0 = RA4/TOCK1 pininden gelen her yükselen kenar için bir artırılır 1 = RA4/TOCK1 pininden gelen her düşen kenar için bir artırılır.
12
TMR0 Frekans Önbölücü(PreScaler) Ayarları
OPTION_REG Bit 3 PSA: Önbölücü / önölçekleme yapılacak birimi seçme biti 0 = Önbölücü TMR0 modülü için ayrılır 1 = Önbölücü WDT için ayrılır. Bit 2,1,0; PS2, PS1, PS0: Önbölücü oranı seçme bitleri Mikrodenetleyiciler
13
TMR0 Sayıcısının Başlangıç Değerinin Atanması
TMR0 sayıcısı h’00’ değeri yerine istenilen bir sayıdan başlatılabilir. Kesme Gecikme Süresi= = Tkomut zamanı*Prescaler değeri*(256-TMR0 başlangıç sayısı) Formülü ile istenilen geçikme süresi hesaplanabilir. Formülde TMR0 başlangıç sayısı ve Prescaler değeri ondalık olarak alınmalıdır. TMR0 ile elde edilebilen en büyük kesme gecikme süresi ; PD: ‘111’ seçilerek Fosc=4MHz ise Tkomut zamanı=1/(fosc/4)=1µs bulunur. Kesme Gecikme Süresi= Tkomut zamanı*Prescaler değeri*(256-TMR0 başlangıç sayısı) = 1µs*256*(256-0) = 65536µs = 65,5 ms olur. 1 ms zaman gecikmesi için: = 1µs*8*( ) = 1000µs = 1 ms olur.
14
TMR0 Kesmesi TMR0 kesmesi, TMR0 kaydedicisinin değeri FFh`dan 00h`ye geçtiğinde üretilmektedir. Bu TMR0 taşması sonucunda TOIF bayrağı (INTCON<2>) lojik1 olur. Kesme istenmiyorsa, TOIE bitinin (INTCON<5>) temizlenmesi ile gizlenebilir. Yeni kesme alınabilmesi için (INTCON<5>) TOIF bayrağı, yazılımdan silinmelidir. TMR0 blok diyagramı
15
Örnek Hesaplama İşlemleri
OPTION yazmacının PS0:PS2 bitleri ‘000’ seçildiğinde TMR0 sayma aralığı ve kesme gecikme sürelerinin bulunması: PD değerleri ’000’ seçildiğinde TMR0 oranı ½ olmasıyla frekans 2’ye bölünmesi zamanın 2 ile çarpılması olduğunda (1/(1/2)=2) komut zamanının 2 katı sürede TMR0 değerini bir arttıracaktır. Fosc=4MHz ise Tkomut zamanı=1/(fosc/4)=1µs TMR0 sayma aralığı zamanı= Tkomut zamanı*TMR0 oranı= 1µs*2= 2µs Kesme Gecikmesi= TMR0 sayma aralığı zamanı*256= 512µs
16
Örnek: TMR0 zamanlayıcısı kullanılarak 1 sn zaman gecikmesi elde edilmesi uygulaması. PortB.0 a bağlı LED i 1sn aralıkla yakıp söndüren program. list p=pic16f877a #include<p16f877a.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF SAYICI_250 equ 0x20 SAYICI_4 equ 0x21 org 0x000 goto basla org 0x004 goto ISR basla: clrf PORTB bsf STATUS, 5 clrf TRISB movlw 0x02 ;b' movwf OPTION_REG bcf STATUS, 5 bsf INTCON,7 bsf INTCON,5 dongu: goto dongu ISR: bcf INTCON,2 movlw 0x83 movwf TMR0 bcf STATUS,Z incf SAYICI_250,f movlw d'250' subwf SAYICI_250,w btfss STATUS,Z retfie incf SAYICI_4,f movlw d'4' subwf SAYICI_4,w clrf SAYICI_250 clrf SAYICI_4 btfss PORTB,0 goto YAK goto SONDUR YAK: bsf PORTB,0 SONDUR: bcf PORTB,0 end
17
TIMER1 Modülü Timer1 modül, zamanlayıcı/sayıcı olmak üzere 2 farklı modda çalıştırılabilir. • 16 bitlik zamanlayıcı/sayıcı, • Okunabilir ve yazılabilir 2 adet 8-bit yazmaca sahip (TMR1H ve TMR1L), • 8 bitlik programlanabilir prescaler, • İçten ve dıştan saat seçimi, • FFFFh değerinden 0000h değerine geçilirken kesme oluşur, • CCP modülünden resetleme,
18
TIMER1 Blok diyagramı Timer1’in aktif/pasif, ayarlama/sıfırlama işlemleri gösterilmektedir.
20
TIMER1 ZAMANLAYICI MOD
21
TIMER1 SAYICI MOD
22
Zamanlayıcı 1 (TIMER1) İşlemleri
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.
23
T1CON: TIMER1 Kontrol Kaydedicisi
TIMER1’deki işlemlerin kontrol edildiği ve i şlemler yürütülürken bazı bilgilerin alındığı kaydedicidir. 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.
24
4-5 T1CKPS0,T1CKPS1 :Timer1 giriş sinyalinin bölme (prescaler) oranının seçildiği bitlerdir. 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 Prescaler değeri 10 = 1:4 Prescaler değeri 01 = 1:2 Prescaler değeri 00 = 1:1 Prescaler değeri
25
TMR1 zamanlayıcısını kullanarak 1/2 sn (500 ms) zaman gecikmesi elde edilmesi uygulaması
LIST P=16F877A INCLUDE "P16F877A.INC" __CONFIG h'3F31' ;__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF ; veya __CONFIG b' ' ;****Program belleginin yapisi*** ORG h'000' GOTO BASLA ORG h'004' GOTO KESME_ALTPROG BASLA CLRF PORTB ;PORTB'nin içerigini temizleyerek LED'leri söndürür BSF STATUS, 5 ;BANK1'e geç CLRF TRISB ;PORTB'nin uçlarini çikis yap BSF PIE1,0 ;TMR1IE (PIE1<0>) (TMR1 interrupt enable bit) BCF STATUS, 5 ;BANK0'a geç BSF INTCON,7 ;Tüm kesmelere izin ver (GIE=1) BSF INTCON,6 ;PEIE=1 Çevresel kesmelere izin verildi BCF T1CON,1 ; TMR1CS : Timer1 Clock Source Select bit = 0 ;(Internal clock Fosc/4) BSF T1CON,0 ;Timer1 çalistir (1= Enables Timer1,0=Stops Timer1) BSF T1CON,5 ; T1CON 5.ve 4. bitleri '11' yapilinca frekans BSF T1CON,4 ; bölme orani 1/8 olmaktadir. BCF STATUS, 5 ;BANK0'a geç LOOP GOTO LOOP KESME_ALTPROG ; 500 ms sure dolunca kesme olayi olusur. BCF PIR1,0 ;TMR1IF TASMA BAYRAGINI SIL MOVLW h'0B' ;h'OBDC' SAYISINI TMR1H VE TMR1L YAZMAÇLARINA YÜKLE MOVWF TMR1H MOVLW h'DC' ;h'OBDC' SAYISINI TMR1H VE TMR1L YÜKLE MOVWF TMR1L BTFSS PORTB,0 ; RB0'i TEST ET (1 MI?) GOTO YAK ; HAYIR, RB0=ON RB1=OFF GOTO SONDUR ; EVET, RB0=OFF RB1=ON YAK BSF PORTB,0 ; RB0 ON BCF PORTB,1 ; RB1 OFF RETFIE SONDUR BCF PORTB,0 ; RB0 OFF BSF PORTB,1 ; RB1 ON ;======================================================= END ;Prog. Sonu
26
Zamanlayıcı 2 (TIMER2) Modülü
Timer2 modül aşağıdaki özelliklere sahiptir. • 8 bit zamanlayıcı (TMR2 kaydedici), • 8 bit peryot kaydedici (PR2), • Okunabilir ve yazılabilir, • Yazılım ile programlanabilir prescaler, • TMR2, PR2 eşlemesinde kesme, • Saat kaymasını üretmek için TMR2 çıkışının seçimli kullanımı SSP modülü, TIMER2 Blok diyagramı
27
Zamanlayıcı 2 (TIMER2) İşlemleri
Timer2, CCP modülünün PWM modu için PWM zaman tabanı olarak kullanılabilir. Giriş saati (Fosc/4)‘in prescaler seçeneğine sahip olur. Aşağıdaki durumlardan herhangi biri gerçekleştiğinde prescaler ve postscaler sayaçları temizlenirler. • TMR2 kaydedicisine yazıldığında , • T2CON kaydedicisine yazıldığında, • Herhangi bir aygıt hazır olduğunda , ***T2CON yazıldığında, TMR2 temizlenemez.
28
T2CON: TIMER2 Kontrol Kaydedicisi
T2CKPS0,T2CKPS1: Timer2’de prescaler’in ayarlandığı bitlerdir. Bu bitlerin aldığı değerlere göre prescaler değeri değişmektedir. When using the TMR2 timer, one should know several specific details that have to do with its registers: • Upon the power is on, the PR2 register contains the value FFh. • Both prescaler and postscaler are cleared by writing to the TMR2 register. • Both prescaler and postscaler are cleared by writing to the T2CON register. • On any reset - you guess, both prescaler and postscaler are cleared.
29
TMR2ON: Timer2’ e yetki veren bittir
TMR2ON: Timer2’ e yetki veren bittir. TMR2ON biti 1 yapıldığında Timer2 kullanılır durumdadır, 0 ise kullanım dışıdır. TOUTPS3:TOUTPS0: Timer2’de postscaler ayarlarını n yapıldığı bitlerdir. Bu bitlerin aldığı değerlerle timer2 değişik postscaler değerlerine ulaşmaktadır.
30
TMR2 zamanlayıcısını kullanarak 1 sn zaman gecikmesi elde edilmesi uygulaması
LIST P=16F877A INCLUDE "P16F877A.INC" __CONFIG h'3F31' ;__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF ; veya __CONFIG b' ' SAYICI_250 EQU h'20' SAYICI_4 EQU h'21' ORG h'000' GOTO BASLA ORG h'004' GOTO KESME_ALTPROG BASLA CLRF PORTB BSF STATUS, 5 CLRF TRISB BCF OPTION_REG,7 BSF PIE1,1 ; TMR2 ile PR2 degeri ayni ; olunca kesme olayi izni verildi) MOVLW d'125' ; TMR2 üst sayma degeri d'125' olarak MOVWF PR2 ; TMR2'ye yüklendi BCF STATUS, 5 ;BANK0'a geç MOVLW b' ' ;bit(6:3)= 0111->1/8 son frekans bölme,bit(2)TMR2ON=1, MOVWF T2CON ;bit (1:0) = 00 -> 1/1 ön frekans bölücü BSF INTCON,7 BSF INTCON,6 LOOP GOTO LOOP KESME_ALTPROG BCF PIR1,1 ;TMR2IF KESME BAYRAGINI SIL BCF STATUS,Z ;STATUS ZERO BAYRAGINI SIL INCF SAYICI_250,F ; HER 1 MS DE SAYICI DEGERI BIR ARTAR MOVLW d'250‘ ; W <- d'250‘ SUBWF SAYICI_250,W ; W = SAYICI_250 - W BTFSS STATUS,Z ; SAYICI_250 =250 DEGERINE ULASTI MI? RETFIE BCF STATUS,Z INCF SAYICI_4,F ;SAYICI_4 = (her 250 ms'de bir artar) MOVLW d'4' ; W <- d'4' SUBWF SAYICI_4,W ; W = SAYICI - W BTFSS STATUS,Z ; SAYICI_4 =4 DEGERINE ULASTI MI? CLRF SAYICI_250 SAYICILARI SIFIRLA (1 sn SÜRE ELDE EDILDI) CLRF SAYICI_4 BTFSS PORTB,0 ; RB0'I TEST ET (1 MI?) GOTO YAK ; HAYIR, RB0=ON RB1=OFF GOTO SONDUR ; EVET, RB0=OFF RB1=ON YAK BSF PORTB,0 ; RB0 ON BCF PORTB,1 ; RB1 OFF SONDUR BCF PORTB,0 ; RB0 OFF BSF PORTB,1 ; RB1 ON END
31
WDT (Watch-dog Timer - Zamanlayıcı)
WDT 'nin kullanım amacı, PIC 'i veya herhangi bir işlemciyi bir döngüde kilitlenmekten uzak tutmaktır. Böyle bir durum yazılımda bir hata veya harici bir elektriksel kıvılcımlar nedeniyle ortaya çıkabilir. WDT, PIC 'e bir çeşit kalp atışı sağlar ve eğer WDT yazmacını düzenli aralıklarla temizlenmezse bu kalp atışları PIC 'i resete zorlar. Bu mükemmel bir özelliktir ve Güvenlik Sistemleri gibi ana kontrol panelinde bir kilitlenmenin asla söz konusu olmaması gereken uygulamalar için birebirdir. Güç koruması gereken ve yalnızca periyodik olarak açılması gereken ürünlerde WDT 'den faydalanırlar. WDT’ın birkaç özelliği; Watchdog Timer, başka hâricî bileşenler talep etmeyen serbest çalışan on-chip RC osilatörüdür. Bu osilatörün WDT’a sağladığı nominal zaman aşımı süresi 18 ms’dir. Prescaler değeri artırılarak bu değer 2-3 sn’ye kadar çıkarılabilir. WDT RC osilatörü , OSC1/CLKIN pininin RC osilatöründen ayrılmıştır. Yani, WDT , OSC1/CLKIN ve OSC2/CLKOUT pinlerindeki saat palsı (clock) dursa bile çalışacaktır. Örneğin , SLEEP komutu yürürlüğe konduğu durumlarda buna rastlanır. Normal işletim esnasında bir WDT zaman aşımı (time-out) PIC reset’i yaratacaktır. Eğer PIC SLEEP modunda ise bir WDT cihazın uyanmasını (wake-up) ve normal işletimine devam etmesine sebep olur. OPTION kayıtçısının sadece ilk 4 biti (prescaler ve TMR0/WDT seçim bitleri) WDT’la ilgilidir. OPTION kayıtçısının 3.biti 1 yapılarak WDT seçilir ve prescaler bitleri (OPTION<0:2>) ile de frekans bölme değeri ayarlanır. WDT’ın, CLRWDT komutuyla reset yapıldıktan sonra, saymasını tamamlayıp baştan tekrar saymaya başladığı ana kadar geçen süreye zaman aşımı süresi (time-out) denir. WDT saymasını tamamladığı anda zaman aşımı sinyali verir. Bu sinyal STATUS kayıtçısının 3. ve 4. bitlerindeki (TO ve PD bayrakları) bayrakların durumunu değiştirir.
32
Eğer WDT ile, kontrolden çıkmış bir programı tekrar resetleyerek, kontrolü ele almayı planladıysanız , ana program başında STATUS kayıtçısının bu bitlerini kontrol etmelisiniz. Daha sonra da reset gerçekleştikten hemen sonra da bu bitleri kontrol etmelisiniz. Böylece WDT’ın zaman aşımı süresi dolduğunda program akışını başka bir yere dallandırabilirsiniz. Örnek program parçası aşağıdaki gibi olabilir. WDT_KONTROL BTFSS STATUS,TO ;TO bayrağı 1 mi? CALL KUR ;hayır (zaman aşımı oluşmuş) , KUR altprogramını çağır. MOVLW h’CC’ ;Evet (zaman aşımı oluşmamış) programa devam et. . PIC içerisinde bulunan WDT zamanlayıcısının durumunu konfigürasyon bitlerini yazarken belirleyebiliriz. Bu konfigürasyon bitlerini program içerinde aşağıdaki gibi yazabiliriz. _CONFIG _CP_OFF & _WDT_ON &_ PWRT_ON & _RC_OSC
33
Zaman Aşım ı Süresi WDT'nin CLRWDT komutuyla reset yapıldıktan sonra saymasını tamamlayıp, baştan tekrar saymaya başladığı anda kadar geçen süredir. WDT'nin saymasını tamamladığı anda zaman aşımı sinyali verir. Bu sinyal STATUS registerin 3. ve 4. bit'indeki flagların durumunu değiştirir .
34
WDT zamanlayıcısı blok diyagramı
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.