Komutların İşlem Süresi Hazırlayan: Dr.Bülent ÇOBANOĞLU 1 PIC’lerde ŞARTSIZ dallanma komutları (GOTO, CALL, RETURN gibi ) hariç tüm Assembly dili komutları 1 saat saykılı (cycle) çeker . ŞARTLI dallanma komutları ise normalde 1 saat saykılı çekerken şart sağladığı durumda 2 saat saykılı çeker
22
Embed
Komutların İşlem Süresi - content.lms.sabis.sakarya.edu.trcontent.lms.sabis.sakarya.edu.tr/Uploads/67539/31206/hafta4_mek... · TMR0 Modülü ve TMR0 Kesmesi Hazırlayan: Dr.Bülent
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Komutların İşlem Süresi
Hazırlayan: Dr.Bülent ÇOBANOĞLU 1
PIC’lerde ŞARTSIZ dallanma komutları (GOTO, CALL, RETURN gibi ) hariç tüm Assembly dili
komutları 1 saat saykılı (cycle) çeker. ŞARTLI dallanma komutları ise normalde 1 saat saykılı
çekerken şart sağladığı durumda 2 saat saykılı çeker
PIC’in Bir Komutu İşleme Süresi
Örnek 1: a) 10 MHz b) 16MHz c) 4 MHz saat frekansına sahip PIC MCU için bir komutu işlemesüresi kaç sn dir. ( Farzedinki frekans ön bölücü değerleri yoktur.)
Çözüm:
Örnek 2: a) 10 MHz b) 16MHz saat frekansına sahip PIC MCU için bir komutu işleme işleme süresikaç sn dir. ( Farzedinki frekans ön bölücü değeri 1/64 )
Çözüm:
YRD.DOC.Dr.BÜLENT ÇOBANOĞLUNot: Komutların işlem süresi MPLAB simülatöründe Stopwatch ile izlenebilir.
Tabii 1000 saykıllık gecikme programının ne kadar sürelik bekleme sağlayacağı PIC mikro denetleyicinin çalışmafrekansına bağlıdır. 4 MHz lik PIC MCU için toplam gecikme; 1000*1/4µS*4=1000µS=1msn lik bir gecikmesağlayacaktır.
BEKLE
MOVLW d’249’ ;1 saykıl
MOVWF SAYAC ;+1 saykıl
DON
NOP ;+1*249
DECFSZ SAYAC, F ;+1*249 +(1)
GOTO DON ;+2*248
RETURN ;+2
TG=249+249+2*248+3+2(RETURN)+2(CALL)= 1001 saykıl
Hazırlayan: Dr.Bülent ÇOBANOĞLU 6
Gecikme Programları: 4Mhz, 100 msn lik gecikme
YRD.DOC.Dr.BÜLENT ÇOBANOĞLU
Hazırlayan: Dr.Bülent ÇOBANOĞLU 8
ÖRNEK 3: PORTB ye bağlı LEDleri sırası ile LSB- MSB taraflarını yakan programdaki BEKLE alt programı ne kadarlık bir gecikme sağlar?
İç içe Döngüler ile Yapılan GecikmeTek bir döngü ile genelde istediğimiz zaman gecikmesini elde edemeyebiliriz. Çünkü bir kaydediciiçine yazabileceğimiz en büyük değer ondalık olarak 255 tir. Bu da 255 ten fazla tekraryaptıramayacağımız anlamına gelir. Bu durumda iç içe döngüler kullanarak bu sayıyı çok çokbüyütebiliriz. İç içe döngüler kullandığımızda hem tekrarlanan komut sayısı artacağındandöngünün bir adımının harcadığı süre uzayacak, hem de içi içe döngüler sebebiyle iki (veyadaha fazla) döngünün çarpımı kadar sayıda tekrar olabilecektir.
Örnek 2. İç içe döngülü
bir gecikme alt programı ;
Bu programda yaklaşık
TG= 3*SAYAC1*SAYAC2
TG = 3*255*255 kadardır.
MHz lik dahili saat
saykılında bu süre yaklaşık
195µS lik bir gecikme sağlar.
Hazırlayan: Dr.Bülent ÇOBANOĞLU 9
İç içe döngülü gecikme Programı: 4Mhz, 1 Dakikalık gecikme
YRD.DOC.Dr.BÜLENT ÇOBANOĞLU
Zamanlayıcı kullanan Gecikme Programları:TMR0 Modülü ve TMR0 Kesmesi
Hazırlayan: Dr.Bülent ÇOBANOĞLU 11
PSA ; 0 ise TMR0
1 ise WDT
TOCS; 0 ise dahili komut saykılı
1 ise harici digital sinyal
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ı
Hazırlayan: Dr.Bülent ÇOBANOĞLU 12
TMR0 Donanımsal Yapısı
Timer0 (TMR0) modülü timer/sayaç aşağıdaki özelliklere sahiptir. • 8 bitlik dir. • Okunabilir ve yazılabilir , • 8 bitlik programlanabilir prescaler., • Dahili veya harici saat ayarı , • FFh` tan 00h`ye taşma üzeri kesme , • Dış saatin kenar seçimi ,
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ılacaksa 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çilmiş olunur.
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.
Timer 0 ile ilgili Kaydediciler
TMR0 Frekans ÖnBölücü(PreScaler) Ayarları
14
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
•1 = RA4/TOCK1 pininden (uçundan) gelen darbeler saat kaynağı
olurak kullanılır.
•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.
MOVLW b’11010111’; TMRO, dahili sinyal kaynağı ve prescaler:111 seçMOVWF OPTION_REG
TMR0 ile GecikmeTMR0 sayıcısının FF (255) den 00 ‘a geçmesi TMR0 kesmesine sebep olur ve bu kesme sonucunda
INTCON kesme kaydedicisinin 2. (T0IF) biti 1 değerini alır. Bu kesmeyi kullanabilmek için daha öncesinde INTCON kaydedicisinin TOIE bitinin 1 yapılarak kesmeye izin verilmesi gerektiği unutulmamalıdır.
Örnek-9: Timer 0 için harici kesmesini (RA4) kullanarak, 5 kere butona bastığımızda 4 ledin sırasıyla yanmasını sağlayan programın C kodu
Hazırlayan: Dr.Bülent ÇOBANOĞLU19
#include <htc.h> void main(void) { TRISA=0x10; // RA4 giris yapılıyor TRISB=0x00; // PORTB çıkıĢ olarak ayarlanıyor PORTA=0x00; // PORTA sıfırlanıyor PORTB=0x00; // PORTB sıfırlanıyor TMR0=-5; // Esasen 250 yüklenmis oluyor //Bit bit tanımlama veya OPTION_REG dogrudan atama
T0SE=0; // Düsen kenar tetikleme T0CS=1; // Harici osilatör PSA=1; // Prescaler TMR0 için PS2=0; // 1:2 bölüm değeri PS1=0; PS0=0; T0IF=0; // TMR0 kesme bayrağı temizleniyor T0IE=1; // TMR0 kesmesine izin veriliyor GIE=1; // Genel kesme izni veriliyor for(;;); // sonsuz dongu}
static void interrupt isim(void) // Kesme ismi (önemsiz){ char i; // Değiskenler tanımlanıyor if(T0IF) // TMR0 kesmesi olusmus mu { i++; // PORTB'de gözükecek değer if(i==16) i=0;PORTB=i; // Değisken değeri PORTB'ye yansıtılıyor TMR0=-5; // Esasen 250 yüklenmis oluyor T0IF=0; // Tekrar dıs kesme alabilmek için kesme bayrağı temizlenir } }
Örnek-9: Timer 0 için harici kesmesini (RA4) kullanarak, 5 kere butona bastığımızda 4 ledin sırasıyla yanmasını sağlayan programın Assembly dilinde kodlanması
Hazırlayan: Dr.Bülent ÇOBANOĞLU20
LIST P=16F877#include p16f877.inc N EQU 0X00ORG 0x0 ; Reset Adresigoto StartORG 0X04 ; Kesme Adresigoto KESME