Slayt 1 - cobanoglu
Transkript
B Yrd.Doç. Dr. Bülent ÇOBANOĞLU Sakarya Üniversitesi, Teknoloji Fakültesi Kesmeler Kesme (Interrupt), mikro denetleyicinin gerçekleştirdiği işleme bakmaksızın belirli durumların/olayların olması durumunda isteklere / olaylara cevap verilmesini sağlayan mekanizmadır. Bu mekanizma, mikro denetleyici ile çevre birimleri arasındaki bağlantıları oluşturması ve ilişkileri düzenlemesi nedeniyle çok önemli bir yere sahiptir. Oluşan her kesme programı ile programın normal işlenme süreci değiştirilerek program durdurulur ve kesme ile ilgili rutin / altprogram gerçekleştirildikten sonra ana programın işlenmesi kalınan noktadan devam eder. Örneğin bir DVD’de film seyrederken telefonunuz çaldı. Telefonun cevaplanması filmden daha önemli olduğu için filmi durdurur, telefona cevap verirsiniz. Telefon konuşmanız bittikten sonrada film izlemeye kaldığınız yerden devam edebilirsiniz. Mikro denetleyici çalışırken bir kesme gerçekleştiğinde çalışılmakta olan işlem duraklatılır. O andaki program sayıcının (PCL) değeri saklanır ve komut akışı kesme alt programına devredilir. Kesme alt programı sonlandığında kontrol tekrar ana programa devredilir ve program kaldığı yerden icra edilmeye devam eder. Kesme alt programından RETFIE komutu ile dönülür Kesme Mantığı Dr. Bülent ÇOBANOĞLU Kesmeler PIC mikro denetleyicilerde, kesme işlemlerini kontrol etmek için 'INTCON' kaydedicisi kullanılır. 'INTCON' kaydedicisinin en önemli işlevi kesmelere izin verilmesi veya izin verilmeyerek devre dışı bırakılmasıdır. Kesmelere izin verilmemesi durumunda, kaydedici kendi bitlerini kullanarak kesme isteklerine cevap verir. INTCON kesme kaydedicisinin GIE( Global Interrupt Enable) biti 0 değerinde ise (aktif değilse) hiçbir kesmeye izin verilmez. PIC16F84 mikro denetleyicisi dört farklı kaynaktan kesme alabilir. Bunlar; • • • • RB0/INT pini ile harici kesmesi PORTB değişim kesmesi (RB4 –RB7) TMR0 sayıcı kesmesi EEPROM kesmesi PIC16F877 Kesme Kaydedicisi ve Kesme Kaynakları PIC16F877, PIC16F84 dekiler dahil 14 kesme kaynağına sahiptir. Dr. Bülent ÇOBANOĞLU INTCON Kaydedicisi INTCON kaydedicisi içerisinde tüm bu kesmeleri aktifleştiren bitler ile kesme meydana gelip/gelmediğini gösteren bayraklar vardır. Bu bitler ve işlevleri yanda verilmiştir. Yandaki tablodan da anlaşılacağı üzere sonu E harfi ile biten bitler (GIE, INTE, RBIE, TOIE, PEIE/EEIE) kesmeleri etkinleştiren / aktif yapan bitlerdir. Hangi kesme kullanılacaksa programda o kesmeyi etkinleştiren bit, ‘1’ yapılarak o kesmeye izin verilir. RB0/INT Pini Harici Kesme Örneği RB0/INT pini harici kesmesi kenar tetiklemelidir. Yani bu uçtaki sinyalin 1 den 0’a veya 0 dan 1’e geçişi kesmeye sebep olur. Kesmenin yükselen kenarda mı yoksa düşen kenarda mı gerçekleşeceğine programcı karar verir. Bunun için OPTION_REG kaydedicisinin INTEDG biti kullanılır. INTEDG biti 1 ise kesme yükselen kenarda, 0 ise düşen kenarda gerçekleşir. INT kesmesini kullanabilmek için INTCON kaydedicisinin INTE biti 1 yapılarak kesmeye izin verilmelidir. INT kesmesi oluştuğunda INTCON kaydedicisinin INTF biti 1 olur. Programda kesme alt programı içerisinde INTF=0 yapılmalıdır. Öğr.Gör.Dr. Bülent ÇOBANOĞLU Örnek-1: PORTB nin RB0/INT ucundan gelen bir kesme gerçekleşince kesme alt programı nda PORTA ya bağlı LED’leri yakan programı yazalım. Program Algoritması: • • • • RB0/INT ucunu giriş olarak seç , OPTION_REG kaydedicisinin INTEDG biti ile düşen veya yükselen kenar tetiklemesini seç , INTCON kaydedicisinin GIE ve INTE bitleri 1 yapılarak kesmeye izin ver, Kesme oluşup, program kesme alt programına dallandığında INTF bitini 0 yap. Öğr.Gör.Dr. Bülent ÇOBANOĞLU MPLAB STIMULUS ile Tetikleme Sinyali Uygulama Programı MPLAB ile adım adım simüle ederken program sürekli ledleri sönük tutacaktır (yani PORTA nın değeri hep sıfırdır). Ne zamanki PORTB nin RB0/INT ucundan bir kesme tetikleme sinyali verilir o zaman program KESME alt programına dallanır ve PORTA nın değerini H’FF’ yapar, dolayısıyla PORTA ya bağlı tüm ledler yanmış olur. MPLAB ile INT ucuna kesme tetikleme sinyali verebilmek için; “Debugger” menüsünden “Stimulus - - > “New Workbook” seçilir. BASLA BSF STATUS,5 ; A portu çıkış, B portu giriş olarak CLRF TRISA ;ayarlandı. MOVLW h’FF’ MOVWF TRISB MOVLW b’10111111’ ; düşen kenarda kesme palsı , MOVWF OPTION_REG ;gelecek şekilde OPTION_REG’i kur. BCF STATUS,5 ;Bank0’a geç. CLRF PORTA ;A portunu sıfırla. BCF INTCON,1 ;INF bayrağını sil. BSF INTCON,7 ;Global kesmeyi etkinleştir. BSF INTCON,4 ;Hâricî kesmeyi aktifleştir. TEST_PORTB BTFSS PORTB,0 ;PORTA<0>=1 mi? GOTO TEST_PORTA ;hayır.Tekrar test et. MOVLW h’FF’ ;evet. W=h’ff’ yükle. MOVWF PORTA ;A portundaki tüm ledleri yak. GOTO TEST_PORTB END KESME BCF INTCON,1 ;INTF bayrağını sil. MOVLW h’00’ ;W=h’00’ yükle. MOVWF PORTA ;A portundaki tüm ledleri söndür. RETFIE END PORTB Değişim Kesmesi Örneği PORTB nin 4 - 7. bitlerinde (RB4-RB7) bitlerinde bir değişim meydana gelmesi PORTB değişim kesmesine sebep olur. Bu kesmeyi aktif hale getirmek için INTCON kaydedicisinin RBIE bitinin 1 yapılması gerekir. PORTB değişim kesmesi oluştuğunda RBIF=1 olur ve program kesme alt programına dallanır. Program RBIF bitini otomatik sıfırlayamadığı için kesme alt programı içerisinde RBIF=0 yapılır. Örnek-3: PORTB nin RB4-RB7 uçlarına bağlı butonlardan bir veya bir kaçına basıldığında PORTA’nın ilk 4 bitini yakan program. Program Algoritması: • PORTB nin 4, 5, 6 ve 7. bitlerini giriş olarak seç • INTCON kaydedicisinin GIE ve RBIE bitini 1 yaparak PORTB değişim kesmesine izin ver. • Kesme oluşup, program kesme alt programına dallandığında RBIF bitini 0 yap • RBIF bitini 0 yap Örnek 3: PORTB nin RB4-RB7 uçlarından gelen bir kesme gerçekleşince kesme alt programınd a PORTA ya bağlı LED’leri yakan programı yazalım Timer (TMR0) Kesmesi ile Gecikme Altprogramı yazma MOVLW b’11010111’; TMRO, dahili sinyal kaynağı ve prescaler:111 seç MOVWF OPTION_REG Dr. Bülent ÇOBANOĞLU TMR0 Kesmesi ile Gecikme Oluşturma TMR0 sayıcısının FF (255) den 00 ‘a geçmesi TMR0 kesmesine se bep olur ve bu kesme sonucunda INTCON kesme kaydedicisinin 2. (T0IF) biti 1 değerini alır. Bu kesmeyi kullanabilmek için daha önc esinde INTCON kaydedicisinin TOIE bitinin 1 yapılarak kesmeye izin verilmesi gerektiği unutulmamalıdır. Kesme gecikmesi (Overflow time)= 4 *TOSC * Prescaler *(256 – TMR0 başlangıç değeri) Bu formülden TMR0 başlangıç değeri de çekilebilir. O zaman TMR0 = 256 – (Gecikme zamanı)/(4 *TOSC* Prescaler) Dr. Bülent ÇOBANOĞLU TMR0 Kesmesi ile Gecikme Oluşturma TMR0 hem yazılabilir, hem okunabilir bir sayıcıdır. OPTION kayde dicisi ile belirlenebilen frekans bölme seçeneği vardır. Saymaya ana programda, alt programlarda ve kesme alt programlarında da devam eder. Bu bir avantajdır. En önemli özelliği ise, saydığı değer FFh sayısından 00h sayısına geçerken oluşan taşmada, INTCON kaydedicisinde T0IF bayrağı 1 değerini alır ve bu değer kullanılarak b ir kesme alt programı çalıştırılabilir. Öncesinde TOIE biti «1 « yapılarak TMRO da taşma olması halinde kesmeye izin verilmesi sağlanmalıdır. Kesme gecikmesi (Overflow time)= 4 *TOSC * Prescaler *(256 – TMR0 başlangıç değeri) Bu formülden TMR0 başlangıç değeri de çekilebilir. O zaman TMR0 = 256 – (Gecikme zamanı)/(4 *TOSC* Prescaler) Dr. Bülent ÇOBANOĞLU TMR0 Gecikme Alt programı Örnek 4: Osilatör frekansı 4MHz olan bir PIC için, OPTION kaydedicisindeki PS2, PS1, PS0 bitlerinin değerleri sırasıyla b’111’ şeklindedir. TMR0 zamanlayıcısının sıfır(0) değerinden saymaya başladığı kabulü ile bu PIC kaç saniye sonra TMR0 tarafından bir kesme oluşturur? Çözüm: 4 MHz saat frekansı ise peryot , TOSC =1/fosc =0.25 µs PS2:PS0 = “111” olduğundan Prescaler= 1:256 Kesme gecikmesi = 4 *TOSC * Prescaler *(256 – TMR0 başlangıç değeri) Kesme gecikmesi (Overflow time) = 4 *0.25 µs * 256 *(256 – 0) = 65536 µs =65.536ms MOVLW b’11010111’ ;TMR0, DAHİLİ SİNYAL,1:256 MOVWF OPTION_REG … GECIKME CLRF TMR0 DON BTFSS INTCON, TOIF GOTO DON BCF INTCON, TOIF RETURN Dr. Bülent ÇOBANOĞLU Örnek 5: Timer kesmesi ile 4 Bitlik Binary(ikili) Geri Sayıcı(15-0) LIST P=16F84A #INCLUDE<P16F84A.INC> CLRF PORTB BSF STATUS, 5 MOVLW b'11010111' MOVWF OPTION_REG MOVLW h'0F' MOVWF TRISA CLRF TRISB BCF STATUS, 5 ;PORTB temizlenir ;BANK1’e geçilir ;TMR0, DAHİLİ SİNYAL,1:256 ;PORTA nın tüm uçları giriş ;PORTB nin tüm uçları çıkış olacaktır ;BANK0’a geçilir BASLA MOVLW d'16' MOVWF PORTB TEST: BTFSC PORTA,0 GOTO TEST CALL BEKLE ;65,53ms CALL BEKLE ;65,53+65,53=131ms lik gecikme DECFSZ PORTB,F GOTO TEST GOTO BASLA ;Başa dön BEKLE: PORTB ye bağlı ledlerde binary sayım: ;gecikme alt programı CLRF TMR0 DON BTFSS INTCON,T0IF GOTO DON BCF INTCON,T0IF RETURN END Dr. Bülent ÇOBANOĞLU TUŞ TAKIMI UYGULAMASI Kontrol sistemlerinde dış dünyadan insanlar tarafından veri girişleri genellikle tuş takımı (keypad-klavye) ile yapılır. Tuş takımı butonlarla gerçekleştirilebileceği gibi çeşitli hazır tuş takımları piyasada bulunmaktadır. Örneğin 4x3’lük bir keypad, 4 satır ve 3 sutundan oluşan bir tuş takımıdır. TUŞ TAKIMI (KEYPAD) Dışarıdan bilgi girişi amacıyla yaygın olarak kullanılan birimlerden biri olan tuş takımı, sütun hatları ve satır hatları olarak düzenlenmiş iletken yolların bir buton ile kısa devre edilmesinden ibarettir. Bağlantımıza göre sütunlarda lojik-0 (GNDşase) vardır. Hangi tuşa basıldığını anlamak için önce satırlardan biri lojik-1 diğerleri lojik-0 yapılır. Sonra sütunlar okunur, hangi giriş lojik-1 ise o satıra ait sütundaki tuşa basılmış demektir. İstenen tuşa hangi değerin verileceği programcıya aittir. Şekil’de butonlarla yapılmış 4x4 tuş takımı görülmektedir. Butonların bir ucu satır kısmına, bir ucu da sütun kısmına bağlıdır. Denetleyici ile tarama yapılırken satırlar çıkış, sütunlar ise giriş olarak tanımlanır. Örnek 6: Basılan tuşu Displayde gösteren klavye uygulaması Basılan tuşun 7 segment display de göstrerimi KEYPAD UYGULAMASI: ASSEMBLY KODU (1/2) 220R RB0/INT RB1 RB2 RB3/PGM RA0/AN0 RB4 RA1/AN1 RB5 RA2/AN2/VREFRB6/PGC RA3/AN3/VREF+ RB7/PGD RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RE0/AN5/RD RC2/CCP1 RE1/AN6/WR RC3/SCK/SCL RE2/AN7/CS RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 PROGRAM=PicCOrnekleri\kaypadh.hex CLOCK=4MHz CFGWORD=0x3731 U1 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 R1 R2 R3 10k 10k 10k 3 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV 2 2 3 4 5 6 7 1 13 14 1 A 1 2 3 B 4 5 6 C 7 8 9 0 # D Basılan tuşun 7 segment display de göstrerimi KEYPAD UYGULAMASI: ASSEMBLY KODU (2/2) 220R RB0/INT RB1 RB2 RB3/PGM RA0/AN0 RB4 RA1/AN1 RB5 RA2/AN2/VREFRB6/PGC RA3/AN3/VREF+ RB7/PGD RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RE0/AN5/RD RC2/CCP1 RE1/AN6/WR RC3/SCK/SCL RE2/AN7/CS RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 PROGRAM=PicCOrnekleri\kaypadh.hex CLOCK=4MHz CFGWORD=0x3731 U1 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 R1 R2 R3 10k 10k 10k 3 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV 2 2 3 4 5 6 7 1 13 14 1 A 1 2 3 B 4 5 6 C 7 8 9 0 # D 74C922 klavye entegresi PINLER AÇIKLAMASI X1-X4 SUTUNLAR Y1-Y4 SATIRLAR A,B,C,D DATA ÇIKIŞLARI DA DATA MEVCUT UCU; 1: DATA VAR, 0: DATA YOK OE ÇIKIŞA IZIN VER; 0: BASILAN TUŞU GOSTER 1: BASILAN TUŞU GÖSTERME OSC OSİLATOR KBM ARK SÖNDÜRME Vcc +3-15 V ÇALIŞMA GERİLİMİ GND ŞASE Örnek 8: 74C922 klavye entegresi ile RBO/INT harici kesmesi kullanılarak tuş takımının herhangi bir tuşuna basılı ise alarm veren program Assembly program kodu LIST P=16F84 INCLUDE "P16F84.INC" ORG H'00' CLRF PORTA GOTO BASA ORG H'04' GOTO KLAVYE BASA BSF CLRF MOVLW MOVWF BCF BSF BSF STATUS,5 TRISA b'11000000‘ OPTION_REG STATUS,5 INTCON,INTE INTCON,GIE TEKRAR NOP BCF PORTA,0 GOTO TEKRAR KLAVYE BCF INTCON,INTF BSF PORTA,0 NOP RETFIE END ;BANK1 e geçiş yap ;PORTA çıkış seçildi ; --> KENAR ;BANK0 a geçiş yap ;RB0/INT kesmesine izin ver ;Tüm kesmelere izin ver Örnek 7: 74C922 klavye entegresi ile RB4-RB7 değişim kesmesi kullanılarak basılan tuşu 4 adet led üzerinde ikili gösteren program Assembly program kodu LIST P=16F84 INCLUDE "P16F84.INC" ORG H'00' GOTO BASA ORG H'04' GOTO KLAVYE BASA BSF STATUS,5 CLRF TRISA MOVLW 0XFF MOVWF TRISB BCF STATUS,5 CLRF PORTA BSF INTCON,RBIE BSF INTCON,GIE TEKRAR NOP GOTO TEKRAR KLAVYE BCF INTCON,RBIF SWAPF PORTB,W ANDLW 0X0F MOVWF PORTA RETFIE END ;BANK1 e geçiş yap ;PORTA çıkış seçildi ;PORTB GIRIŞ ;BANK0 a geçiş yap ;PORTA ya bağlı ledleri söndür ;RB değişim kesmesine izin ver ;Tüm kesmelere izin ver ÇALIŞMA SORU SU? Keypade basılı tuşu PIC16F877 nin PORTC sine bağlı 7 segment display de gösteren programı 74C922 klavye entegresini kullanarak yazınız?
Benzer belgeler
pic micro programlama
Bu da TrisA ve TrisB register larına degerler atayarak olur. Şekil-3 de
16F84 ün register haritası görülmektedir.
Ders 4: Kesme İşlemleri ve Timer Bileşeninin Kullanımı
Örnek 5: Timer kesmesi ile 4 Bitlik Binary(ikili) Geri Sayıcı(15-0)
LIST P=16F84A
#INCLUDE
PIC2_NOTLARI_14-15_FINAL_Kısmı
Dönüşüm tabloları bir kodu bir başka koda dönüştürmek için kullanılır. Örnek olarak belli
bir sayı ile o sayıyı göstergede yakmak için göstergeye uygulanması gereken sayı arasında fark vardır.
“3” ...
ARİTMETİK İŞLEMLER
PORTB’ ye yazın. Daha sonra Program parçası GECIKME alt programına giderek neticenin
bu kez üst-byte’ını UST’ adlı registere gönderip yine GECIKME’ ye gidecek ve tekrar en
başa dönerek işlemleri sü...
Slayt 1 - cobanoglu
MOVLW b’11010111’; TMRO, dahili sinyal kaynağı ve prescaler:111 seç
MOVWF OPTION_REG
Öğr.Gör.Dr. Bülent ÇOBANOĞLU