komutların İşlem süresi -...

22
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

Upload: vonguyet

Post on 20-Sep-2018

234 views

Category:

Documents


0 download

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.

Hazırlayan: Dr.Bülent ÇOBANOĞLU3

KARŞILAŞTIRMA KOMUTLARI İLE TEKRARLI İŞLEMLER (SUBWF, SUBLW KOMUTLARI)

Hazırlayan: Dr.Bülent ÇOBANOĞLU 4

;O dan 9 a ARTAN SAYICI

LIST P=16F877

#INCLUDE<P16F877.INC>

SAYAC EQU 20H ;16F84 İÇİN 0CH OLACAK

CLRF PORTB ;PORTB temizlenir

BSF STATUS, 5 ;BANK1’e geçilir

CLRF TRISB ;PORTB nin tüm uçları çıkış olacaktır

BCF STATUS, 5 ;BANK0’a geçilir

CLRF SAYAC

DON:

MOVF SAYAC,W

MOVWF PORTB

INCF SAYAC,F

MOVLW .10

SUBWF SAYAC,W

BTFSS STATUS,Z

GOTO DON

SON

GOTO SON

END

Aşağıdaki program kaç saat saykılında çalışır? Ve 4MHz lik bir MCU için çalışma süresini hesaplayınız?

1

1

1

1

1

1

2

1

1

1

1

1

TG= Donguİci*Sayac+DonguDisi=

=8*10+5+1=86 saykıl

Gecikme Programları: 4Mhz, 1 msn lik gecikme

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Gecikme Programları

Örnek 2: Tek bir döngü ile yaklaşık 1000 saykıllık bir gecikme sağlayacak programı yazınız.

Çözüm: Toplam Gecikme= Döngü dışındakiler + SAYAC* Döngü içindekiler = 1+1+ (249*4) + 2+1=1001 saykıl

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

OPTION_REG

OPTION_REG Kaydedici bitleri

•Bit 5 TOCS: TMR0 saat kaynağını seçme biti

•0 = Dahili komut çevrim saati kullanılır (CLKOUT)

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

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)

Hazırlayan: Dr.Bülent ÇOBANOĞLU 15

TMR0 Kesme GecikmesiTMR0 sayıcısı h’00’ değeri yerine istenilen bir sayıdan başlatılabilir.

Kesme Gecikme Süresi=Tkomut zamanı(4 *TOSC )*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 (PS0-PS2:’111’ seçilirse) ve 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:

Kesme Gecikme Süresi= Tkomut zamanı*Prescaler değeri*(256-TMR0 başlangıç sayısı)

= 1µs*8*(256-131)

= 1000µs = 1 ms olur.Hazırlayan: Dr.Bülent ÇOBANOĞLU 16

TMR0 Gecikme Alt programı

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

Hazırlayan: Dr.Bülent ÇOBANOĞLU 17

Örnek 7:

Osilatör frekansı 4MHz olan bir PIC için, OPTION kaydedicisindeki PS2, PS1, PS0 bitlerinin değerleri sırasıyla b’111’ şek

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

Örnek-8: 4 Bitlik Binary(ikili) Geri Sayıcı(15-0) Uygulaması

Hazırlayan: Dr.Bülent ÇOBANOĞLU18

LIST P=16F877A#INCLUDE<P16F877A.INC>ORG 0X00GOTO ANA

ANACLRF PORTB ;PORTB temizlenirBSF STATUS, 5 ;BANK1’e geçilirMOVLW b'11010111' ;TMR0, DAHİLİ SİNYAL,1:256MOVWF OPTION_REGCLRF TRISB ;PORTB nin tüm uçları çıkış

olacaktırBCF STATUS, 5 ;BANK0’a geçilir

EnBasaMOVLW d'16'MOVWF PORTB

SayCALL BEKLE ;65,53msCALL BEKLE ;65,53+65,53=131ms lik gecikmeDECFSZ PORTB,F ;PORTB--GOTO Say ;TekrarlaGOTO EnBasa

BEKLE: ;gecikme alt programıCLRF TMR0

DONBTFSS INTCON,T0IFGOTO DONBCF INTCON,T0IFRETURNEND

PORTB ye bağlı ledlerde binary sayım:

Ö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

StartCLRF PORTBBSF STATUS,5MOVLW b'11101000'BSF TRISA,4MOVWF OPTION_REGCLRF TRISBBCF STATUS,5CLRF PORTBMOVLW b'11100000'MOVWF INTCONMOVLW -3MOVWF TMR0CLRF N

LOOPGOTO LOOP

KESMEINCF N,FMOVF N,WMOVWF PORTBBCF INTCON,T0IFMOVLW -3MOVWF TMR0RETFIE

END

PIC16F877 Kesme Kaynakları

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Kesmeler

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Kesme (Interrupt), mikro denetleyicinin gerçekleştirdiği işleme bakmaksızın belirli durumların/olayların olma

sı durumunda isteklere / olaylara cevap verilmesini sağlayan mekanizmadır. Bu mekanizma, mikro denetle

yici ile çevre birimleri arasındaki bağlantıları oluşturması ve ilişkileri düzenlemesi nedeniyle çok önemli bir yer

e sahiptir.

Oluşan her kesme programı ile programın normal işlenme süreci değiştirilerek program durdurulur ve kes

me ile ilgili rutin/altprogram gerçekleştirildikten sonra ana programın işlenmesi kalınan noktadan devam edilir

Bütün PIC 16F mikro denetleyicileri dört farklı kaynaktan kesme alabilir. Bunlar;