Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

KESMELER (Interrupts) Mikrodenetleyiciler1 5.Hafta.

Benzer bir sunumlar


... konulu sunumlar: "KESMELER (Interrupts) Mikrodenetleyiciler1 5.Hafta."— Sunum transkripti:

1 KESMELER (Interrupts) Mikrodenetleyiciler1 5.Hafta

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 Mikrodenetleyiciler4 Kesme İsteği/Olayı Lojik Devresi

5 RB0/INT KESME OLAYI 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 listp=pic16f877a #include __CONFIG_HS_OSC & _WDT_OFF org0x000 goto basla org0x004 goto kesme basla: bsfSTATUS, RP0; Bank 1' gecis movlw0x01 movwfTRISB; PortB I/O atama bcf OPTION_REG, INTEDG bsf OPTION_REG, NOT_RBPU ; Pull-up disable bcfSTATUS, 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 retfie end Ö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.

7 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. PORTB Değişim Kesme Olayı INTCON

8 listp=pic16f877a #include __CONFIG 0x3F31 ;__CONFIG b' ' org0x000 goto basla org0x004 goto ISR basla: bsfSTATUS, RP0 ; Bank 1' gecis movlw0xF0 movwfTRISB; PortB I/O atama bsf OPTION_REG, NOT_RBPU ; Pull-up disable bcfSTATUS, RP0; Bank 0'a gecis movlw0xFF movwfPORTB;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 retfie LED1: bcf PORTB,1 retfie LED2: bcf PORTB,2 retfie LED3: bcf PORTB,3 retfie end Ö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.

9 Çalışma Sorusu: 1.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 ) 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 ) 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 ) 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ı Mikrodenetleyiciler12 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 OPTION_REG

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 = = T komut 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 T komut zamanı =1/(fosc/4)=1µs bulunur. Kesme Gecikme Süresi = T komut 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: Kesme Gecikme Süresi = T komut zamanı *Prescaler değeri*(256-TMR0 başlangıç sayısı) = 1µs*8*( ) = 1000µs = 1 ms olur.

14 TMR0 Kesmesi TMR0 blok diyagramı TMR0 kesmesi, TMR0 kaydedicisinin değeri FFh`dan 00h`ye geçtiğinde üretilmektedir. Bu TMR0 taşması sonucunda TOIF bayrağı (INTCON ) lojik1 olur. Kesme istenmiyorsa, TOIE bitinin (INTCON ) temizlenmesi ile gizlenebilir. Yeni kesme alınabilmesi için (INTCON ) TOIF bayrağı, yazılımdan silinmelidir.

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 T komut zamanı =1/(fosc/4)=1µs TMR0 sayma aralığı zamanı = T komut zamanı *TMR0 oranı= 1µs*2= 2µs Kesme Gecikmesi = TMR0 sayma aralığı zamanı*256= 512µs

16 listp=pic16f877a #include __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF SAYICI_250 equ0x20 SAYICI_4equ0x21 org0x000 goto basla org0x004 goto ISR basla: clrfPORTB bsfSTATUS, 5 clrfTRISB movlw 0x02 ;b' movwf OPTION_REG bcfSTATUS, 5 bsfINTCON,7 bsfINTCON,5 dongu: gotodongu Ö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. ISR: bcfINTCON,2 movlw0x83 movwfTMR0 bcfSTATUS,Z incfSAYICI_250,f movlwd'250' subwfSAYICI_250,w btfssSTATUS,Z retfie bcfSTATUS,Z incfSAYICI_4,f movlwd'4' subwfSAYICI_4,w btfssSTATUS,Z retfie clrfSAYICI_250 clrfSAYICI_4 btfssPORTB,0 gotoYAK gotoSONDUR YAK: bsfPORTB,0 retfie SONDUR: bcfPORTB,0 retfie 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.

19

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 ) 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 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 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*** ORGh'000' GOTOBASLA ORGh'004' GOTOKESME_ALTPROG BASLA CLRFPORTB ;PORTB'nin içerigini temizleyerek LED'leri söndürür BSFSTATUS, 5 ;BANK1'e geç CLRFTRISB ;PORTB'nin uçlarini çikis yap BSFPIE1,0 ;TMR1IE (PIE1 ) (TMR1 interrupt enable bit) BCFSTATUS, 5 ;BANK0'a geç BSFINTCON,7 ;Tüm kesmelere izin ver (GIE=1) BSFINTCON,6 ;PEIE=1 Çevresel kesmelere izin verildi BCFT1CON,1 ; TMR1CS : Timer1 Clock Source Select bit = 0 ;(Internal clock Fosc/4) BSFT1CON,0 ;Timer1 çalistir (1= Enables Timer1,0=Stops Timer1) BSFT1CON,5 ; T1CON 5.ve 4. bitleri '11' yapilinca frekans BSFT1CON,4 ; bölme orani 1/8 olmaktadir. BCF STATUS, 5 ;BANK0'a geç LOOP GOTOLOOP TMR1 zamanlayıcısını kullanarak 1/2 sn (500 ms) zaman gecikmesi elde edilmesi uygulaması KESME_ALTPROG ; 500 ms sure dolunca kesme olayi olusur. BCFPIR1,0 ;TMR1IF TASMA BAYRAGINI SIL MOVLWh'0B' ;h'OBDC' SAYISINI TMR1H VE TMR1L YAZMAÇLARINA YÜKLE MOVWFTMR1H MOVLWh'DC' ;h'OBDC' SAYISINI TMR1H VE TMR1L YÜKLE MOVWFTMR1L BTFSSPORTB,0; RB0'i TEST ET (1 MI?) GOTOYAK; HAYIR, RB0=ON RB1=OFF GOTOSONDUR; EVET, RB0=OFF RB1=ON YAK BSFPORTB,0; RB0 ON BCFPORTB,1; RB1 OFF RETFIE SONDUR BCFPORTB,0; RB0 OFF BSFPORTB,1; RB1 ON RETFIE ;======================================================= 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 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_250EQU h'20' SAYICI_4EQU h'21' ORGh'000' GOTOBASLA ORGh'004' GOTOKESME_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) MOVLWd'125' ; TMR2 üst sayma degeri d'125' olarak MOVWFPR2; TMR2'ye yüklendi BCFSTATUS, 5 ;BANK0'a geç MOVLWb' ' ;bit(6:3)= 0111->1/8 son frekans bölme,bit(2)TMR2ON=1, MOVWFT2CON;bit (1:0) = 00 -> 1/1 ön frekans bölücü BSFINTCON,7 BSFINTCON,6 LOOP GOTOLOOP KESME_ALTPROG BCFPIR1,1;TMR2IF KESME BAYRAGINI SIL BCFSTATUS,Z;STATUS ZERO BAYRAGINI SIL INCFSAYICI_250,F; HER 1 MS DE SAYICI DEGERI BIR ARTAR MOVLWd'250‘; W <- d'250‘ SUBWFSAYICI_250,W; W = SAYICI_250 - W BTFSSSTATUS,Z; SAYICI_250 =250 DEGERINE ULASTI MI? RETFIE BCFSTATUS,Z INCFSAYICI_4,F ;SAYICI_4 = (her 250 ms'de bir artar) MOVLWd'4'; W <- d'4' SUBWFSAYICI_4,W; W = SAYICI - W BTFSSSTATUS,Z; SAYICI_4 =4 DEGERINE ULASTI MI? RETFIE CLRFSAYICI_250SAYICILARI SIFIRLA (1 sn SÜRE ELDE EDILDI) CLRFSAYICI_4 BTFSSPORTB,0; RB0'I TEST ET (1 MI?) GOTOYAK; HAYIR, RB0=ON RB1=OFF GOTO SONDUR; EVET, RB0=OFF RB1=ON YAK BSFPORTB,0; RB0 ON BCFPORTB,1; RB1 OFF RETFIE SONDUR BCFPORTB,0; RB0 OFF BSFPORTB,1; RB1 ON RETFIE 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 ) 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ı


"KESMELER (Interrupts) Mikrodenetleyiciler1 5.Hafta." indir ppt

Benzer bir sunumlar


Google Reklamları