Slayt 1 - cobanoglu

Transkript

Slayt 1 - cobanoglu
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

pic micro programlama Bu da TrisA ve TrisB register larına degerler atayarak olur. Şekil-3 de 16F84 ün register haritası görülmektedir.

Detaylı

Ders 4: Kesme İşlemleri ve Timer Bileşeninin Kullanımı

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 CLRF PORTB BSF STATUS, 5 MOVLW b'11010111' MOVWF OPTION_REG MOVLW h'0F' MOVWF TRISA CLRF TRI...

Detaylı

PIC2_NOTLARI_14-15_FINAL_Kısmı

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” ...

Detaylı

ARİTMETİK İŞLEMLER

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ü...

Detaylı

Slayt 1 - cobanoglu

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

Detaylı