PIC MCU da Komutların İşlem Süresi

Benzer belgeler
Komutların İşlem Süresi

Komutların İşlem Süresi

PIC MIKRODENETLEYICILER-3: GECĠKME ve KESME PROGRAMLARI

Yrd.Doç. Dr. Bülent ÇOBANOĞLU. Sakarya Üniversitesi, Teknoloji Fakültesi

BÖLÜM 2 INTERRUPT ve TIMER İŞLEMLERİ

# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

Mikro denetleyicili Uygulama devresi bileşenleri

7 Segment Display ve Kesmeler (Interrupts) Hafta6-7. Dr. Bülent Çobanoğlu-SAÜ 1

PIC MCU ile UYGULAMALAR

TIMER. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

BÖLÜM 3 CAPTURE/COMPARE/PWM ve TUŞ TAKIMI İŞLEMLERİ

DENEY-4. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

Deney No Deney Adı Tarih. 3 Mikrodenetleyici Portlarının Giriş Olarak Kullanılması / /201...

Mikroişlemciler Ara Sınav---Sınav Süresi 90 Dk.

Hacettepe Robot Topluluğu

LCD (Liquid Crystal Display )

Bank değiştirme Bir banktan diğerine geçmek için STATUS register denilen özel registerin 5. ve 6. bitinin durumunu değiştirmek gerekir.

KOMUT AÇIKLAMALARI VE ÖRNEKLERİ

DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI İÇERİK

# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

KONFİGÜRASYON BİTLERİ

PIC Mikrodenetleyiciler. Hazırlayan:Öğr.Gör.Bülent ÇOBANOĞLU 1

BSF STATUS,5 ;bank1 e geçiş CLRF TRISB ;TRISB= BCF STATUS,5 ;bank0 a geçiş

UYGULAMA 05_01 MİKRODENETLEYİCİLER 5.HAFTA UYGULAMA_05_01 UYGULAMA_05_01. Doç.Dr. SERDAR KÜÇÜK

PIC 16F84 VE TEK BUTONLA BĐR LED KONTROLÜ

DENEY-5. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

Program Kodları. void main() { trisb=0; portb=0; while(1) { portb.b5=1; delay_ms(1000); portb.b5=0; delay_ms(1000); } }

IŞIĞA YÖNELEN PANEL. Muhammet Emre Irmak. Mustafa Kemal Üniversitesi Mühendislik Fakültesi. Elektrik-Elektronik Mühendisliği Bölümü

16F84 ü tanıt, PORTB çıkış MOVLW h FF MOWF PORTB

1. PORTB ye bağlı 8 adet LED i ikili sayı sisteminde yukarı saydıracak programı

PIC TABANLI, 4 BASAMAKLI VE SER

DERS 7 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 örnek programlar Dallanma komutları Sonsuz döngü

Hacettepe Robot Topluluğu

Assembler program yazımında direkt olarak çizgi ile gösterilmemesine rağmen ekranınız ya da kağıdınız 4 ayrı sütunmuş gibi düşünülür.

KESME (INTERRUPT) NEDİR?

MİKRODENETLEYİCİLER II DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-FİNAL KISMI

DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI İÇERİK KESME

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu

T.C FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ EET-302 MİKROİŞLEMCİLER LABORATUVARI DENEY FÖYÜ

PIC MİKROKONTROLÖR TABANLI MİNİ-KLAVYE TASARIMI

Hyper Terminal programı çalıştırıp Uygun COM portu ve iletişim parametrelerinin ayarları yapılıp bekletilmelidir.

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) ELEKTRİK ELEKTRONİK TEKNOLOJİSİ

LCD (Liquid Crystal Display)

Sayfa 1

BÖLÜM 1 ALT PROGRAMLAR 1.1.ALTPROGRAM NEDİR?

MIKROBILGISAYARLAR ve PIC PROGRAMLAMA TEST ÇALIŞMA SORULARI

Mikroişlemciler. Microchip PIC

W SAYAC SAYAC SAYAC. SAYAC= ise, d=0 W

Ön Söz. Fırat Deveci Ağustos 2009 Elektrik ve elektroniğe gönül veren herkese. FxDev.org Sayfa 1

T.C FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ EET-302 MİKROİŞLEMCİLER LABORATUVARI DENEY FÖYÜ

B.Ç. / E.B. MİKROİŞLEMCİLER

T.C. MİLLÎ EĞİTİM BAKANLIĞI ELEKTRİK ELEKTRONİK TEKNOLOJİSİ MİKRODENETLEYİCİYLE ANALOG İŞLEMLER 523EO0022

BÖLÜM 3 3. PIC 16F8X KOMUTLARI 3.1.KULLANILAN SEMBOLLER: 3.2.KOMUTLAR VE KULLANIM ÖRNEKLERİ

TUŞ TAKIMI (KEYPAD) UYGULAMALARI

MİKRODENETLEYİCİLER II DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-FİNAL KISMI

BÖLÜM 1: MİKRODENETLEYİCİLER

MİKRODENETLEYİCİ GELİŞTİRME SETİ TASARIM VE UYGULAMALARI. öğrencilerine eğitimleri esnasında iş hayatında karşılaşabilecekleri kontrol işlemleri ve

Yrd. Doç.Dr. Bülent ÇOBANOĞLU. Hazırlayan:Yrd.Doç.Dr.Bülent ÇOBANOĞLU 1

5. BÖLÜM - DÖNGÜ (ÇEVRİM) ve Z BAYRAĞI

PROGRAMLANABİLİR ZAMANLAYICI

T.C. NİĞDE ÜNİVERSİTESİ MÜHENDİSLİK-MİMARLIK FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ BİTİRME ÖDEVİ

ROBOT KOL BİTİRME PROJESİ DÖNEM İÇİ RAPORU

BÖLÜM 7 XTAL2 XTAL1. Vss. Şekil Mikrodenetleyicisi osilatör bağlantı şekli. Bir Makine Çevrimi = 12 Osilatör Periyodu

MİKROİŞLEMCİLER VE MİKRO DENETLEYİCİLER 2 DERS NOTLARI Prof. Dr. Hakan Ündil Bahar-Final

T.C. NİĞDE ÜNİVERSİTESİ MÜHENDİSLİK-MİMARLIK FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ BİTİRME ÖDEVİ

BÖLÜM 1

Sistem Gereksinimleri: Uygulama Gelistirme: PIC Mikroislemcisinin Programlanmasi: PIC Programlama Örnekleri -1

PIC UYGULAMALARI. Öğr.Gör.Bülent Çobanoğlu

MİKRODENETLEYİCİLER ÖRNEK PROGRAMLAR

Mikroişlemci: Merkezi işlem biriminin fonksiyonlarını tek bir yarı iletken tümleşik devrede birleştiren programlanabilir sayısal elektronik devre

MİKRODENETLEYİCİLER 2 DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-Final Kısmı

PIC Mikrodenetleyicileri

Eğitim - Öğretim Yöntemleri Başlıca öğrenme faaliyetleri Kullanılan Araçlar Dinleme ve anlamlandırma

MİKRO DENETLEYİCİLER II DERS NOTLARI (VİZE KONULARI) Prof. Dr. Hakan Ündil Bahar-Vize

3.2 PIC16F84 Yazılımı PIC Assembly Assembler Nedir?

8 Ledli Havada Kayan Yazı

Mikroişlemcili Sistemler ve Laboratuvarı

PIC MCU ile UYGULAMALAR-II

PIC 16F877 nin kullanılması

DENEY-1. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

T.C. MİLLÎ EĞİTİM BAKANLIĞI DENİZCİLİK MİKRODENETLEYİCİ 2

Alıcı Devresi; Sinyali şu şekilde modüle ediyoruz;

5.Eğitim E205. PIC16F628 ve PIC16F877 Hakkında Genel Bilgi IF THEN ELSE ENDIF HIGH-LOW GOTO-END- PAUSE Komutları Tanıtımı ve Kullanımı PIC16F628:

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

MİKRO DENETLEYİCİLER II DERS NOTLARI (Vize) Prof. Dr. Hakan Ündil Bahar

PIC MİKRODENETLEYİCİLERİN HAFIZA YAPISI. Temel olarak bir PIC içerisinde de iki tür hafıza bulunur:

ELEKTRİK-ELEKTRONİK TEKNOLOJİSİ

HUNRobotX - Makaleler - Hız Ayarlı Çoklu DC Motor Kontrolü. Makaleler Hız Ayarlı Çoklu DC Motor Kontrolü

KANPUR/microcontrollers/micro/ui/Course_home3_16.htm Yrd.Doç. Dr.

Microprocessors and Programming

ÖĞRENME FAALİYETİ-1 1. MİKRODENETLEYİCİ PROGRAMI YAZMA

ADC: Anolog-Digital Çevirici

DENEY-2. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) ENDÜSTRİYEL OTOMASYON TEKNOLOJİLERİ

Proton Plus ile PIC Programlama Bölüm 2

İçİndekİler. 1. Bölüm - Mİkro Denetleyİcİ Nedİr? 2. Bölüm - MİkroDenetleyİcİlerİ Anlamak

Transkript:

PIC MCU da Komutların İşlem Süresi PIC lerde dallanma komutları (GOTO, CALL, RETURN gibi ) hariç tüm Assembly dili komutları 1 saat saykılı (cycle) çeker. Hazırlayan: Dr.Bülent ÇOBANOĞLU 1

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şleme sü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üresi kaç sn dir. ( Farzedinki frekans ön bölücü değeri 1/64 ) Çözüm: Not: Komutların işlem süresi MPLAB simülatöründe Stopwatch ile izlenebilir. YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

KARŞILAŞTIRMA KOMUTLARI İLE TEKRARLI İŞLEMLER (SUBWF, SUBLW KOMUTLARI) Hazırlayan: Dr.Bülent ÇOBANOĞLU 3

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? ;O dan 9 a ARTAN SAYICI LIST P=16F877 #INCLUDE<P16F877.INC> SAYAC EQU 20H ;16F84 İÇİN 0CH OLACAK 1 CLRF PORTB ;PORTB temizlenir 1 BSF STATUS, 5 ;BANK1 e geçilir 1 CLRF TRISB ;PORTB nin tüm uçları çıkış olacaktır 1 BCF STATUS, 5 ;BANK0 a geçilir 1 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 1 1 1 1 1 1 2 TG= Donguİci*Sayac+DonguDisi= =8*10+5+1=86 saykıl Hazırlayan: Dr.Bülent ÇOBANOĞLU 4

Gecikme Programları: 4Mhz, 1 msn lik gecikme YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Gecikme Programları: 4Mhz, 100 msn lik gecikme 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=1000 saykıl Tabii 1000 saykıllık gecikme programının ne kadar sürelik bekleme sağlayacağı PIC mikro denetleyicinin çalışma frekansına bağlıdır. 10 MHz lik PIC MCU için toplam gecikme; 1000*0.1µS*4=400µS lik bir gecikme sağlayacaktır. MOVLW d 250 ;1 saykıl MOVWF SAYAC ;+1 saykıl DON NOP ;+1*250 DECFSZ SAYAC, F ;+1*250 +(1) GOTO DON ;+2*249 RETURN ;+2 TG=250+250+2*249+3+2= 1003 saykıl Hazırlayan: Dr.Bülent ÇOBANOĞLU 7

Ö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? Hazırlayan: Dr.Bülent ÇOBANOĞLU 8

İç içe Döngüler ile Yapılan Gecikme Tek bir döngü ile genelde istediğimiz zaman gecikmesini elde edemeyebiliriz. Çünkü bir kaydedici içine yazabileceğimiz en büyük değer ondalık olarak 255 tir. Bu da 255 ten fazla tekrar yaptıramayacağımız anlamına gelir. Bu durumda iç içe döngüler kullanarak bu sayıyı çok çok büyütebiliriz. İç içe döngüler kullandığımızda hem tekrarlanan komut sayısı artacağından döngünün bir adımının harcadığı süre uzayacak, hem de içi içe döngüler sebebiyle iki (veya daha 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 PSA ; 0 ise TMR0 1 ise WDT TOCS; 0 ise dahili komut saykılı 1 ise harici digital sinyal 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<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. Hazırlayan: Dr.Bülent ÇOBANOĞLU 11

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, Hazırlayan: Dr.Bülent ÇOBANOĞLU 12

Timer 0 ile ilgili Kaydediciler 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.

TMR0 Frekans ÖnBölücü(PreScaler) Ayarları OPTION_RE G 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. 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 MOVLW b 11010111 ; prescaler:111 seç MOVWF OPTION_REG TMRO, dahili sinyal kaynağı ve 14

TMR0 ile Gecikme TMR0 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 Gecikmesi TMR0 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 ; T komut 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ı Örnek 7: 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 Hazırlayan: Dr.Bülent ÇOBANOĞLU 17

Örnek-8: 4 Bitlik Binary(ikili) Geri Sayıcı(15-0) Uygulaması LIST P=16F877A #INCLUDE<P16F877A.INC> ORG 0X00 GOTO ANA ANA CLRF PORTB ;PORTB temizlenir BSF STATUS, 5 ;BANK1 e geçilir MOVLW b'11010111' ;TMR0, DAHİLİ SİNYAL,1:256 MOVWF OPTION_REG CLRF TRISB ;PORTB nin tüm uçları çıkış olacaktır BCF STATUS, 5 ;BANK0 a geçilir EnBasa MOVLW d'16' MOVWF PORTB Say CALL BEKLE ;65,53ms CALL BEKLE ;65,53+65,53=131ms lik gecikme DECFSZ PORTB,F ;PORTB-GOTO Say ;Tekrarla GOTO EnBasa BEKLE: ;gecikme alt programı CLRF TMR0 DON BTFSS INTCON,T0IF GOTO DON BCF INTCON,T0IF RETURN END PORTB ye bağlı ledlerde binary sayım: Hazırlayan: Dr.Bülent ÇOBANOĞLU 18

Ö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 #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 } şma Sorusu: Aynı programı Assembly de nasıl kodlarız } Hazırlayan: Dr.Bülent ÇOBANOĞLU 19

TIMER1 Modülü Timer1 aşağıdaki modlardan birini işletebilir. Zamanlayıcı olarak Senkronize sayıcı/sayacı olarak Asenkronize sayıcı olarak 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, Dahili ve harici saat girişi seçimi, FFFFh değerinden 0000h değerine geçilirken kesme oluşur, {16bitlik olması 0 dan 65535 e kadar sayım yapabilmesini sağlar.} CCP modülünden reset yapılabilir.

TIMER1 Blok diyagramı TMR1CS (T1CON<1>) 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<1:0> değeri ihmal edilir.

TIMER1 Kaydedicileri Timer 1 i kontrol eden kaydediciler ve görevleri şöyledir; T1CKPS1, T1CKPS0 : Prescalar değeridir, (1:1, 1:2, 1:4, 1:8) T1OSCEN : Timer1 osilatör kontrol biti (0: Kapalı, 1: Açık) TMR1CS : Saat kaynağı seçme biti (0: Dahili, 1: Harici) T1SYNC : Senkronizasyon biti (1: Senk. Yok, 0: Senk. Var) TMR1ON : Timer1 açma kapama biti (0: Kapalı, 1: Açık) TMR1H : Timer1 sayıcısının yüksek değerlikli bitini tutan kaydedici TMR1L : Timer1 sayıcısının düşük değerlikli bitini tutan kaydedici TMR1IE : Timer1 kesme izin biti TMR1IF : Timer1 kesme bayrak biti

TIMER1 Donanımsal Yapısı

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

TIMER1 Zamanlayıcı Kesmesi Algoritması //Ana Program ayarları void main() { PIR1.TMR1IF = 0; // TMR1IF kesme bayrağı sıfırlanır TMR1H = 0x22; // TMR1 zamanlayıcı olarak ayarlanır TMR1L = 0x00; TMR1CS = 0; // Timer1 dahili osc. Kaynağı seçilir T1CKPS1 = T1CKPS0 = 1; // prescaler oranı 1:8 seçilir PIE1.TMR1IE = 1; // TMR1 kesmesi aktif INTCON = 0xC0; // Kesme izin bitleri (GIE ve PEIE) aktif TMR1ON = 1; // TMR1 zamanlayıcısı hazır... ; ana programda gerekli ayarlamalar yapıldıktan sonra KESME_ALTPROG ; Assembly BCF PIR1,0 ;TMR1IF TASMA BAYRAGINI SIL MOVLW h'0b ;h'obdc' SAYISINI TMR1H VE TMR1L YÜKLE MOVWF TMR1H MOVLW h'dc' ;h'obdc' SAYISINI TMR1H VE TMR1L YÜKLE MOVWF TMR1L RETFIE //XC8 Kodu void interrupt kesme (void) { if (TMR0IE && TMR0IF) { TMR0IF=0; TMR1L=0xDC; //Bu degerler programa göre değişir TMR1H=0x0B; return; } // baska kesme kaynagi varsa yazılabilir }

Örnek 10. TMR1 zamanlayıcısını kullanarak 0.5 sn (500 ms) zaman gecikmesi elde eden uygulamanın C kodu #include <xc.h> #define LED RD0 /* TMR1 kesme hizmet fonksiyonu (4 Mhz'lik kristalde 0,5sn aralıklarla bu fonksiyona girilir)*/ void main(){ LED=0; TRISD0=0; // RD0 portu çıkış TMR1ON=1; // TMR1 aktif TMR1CS=0; // Dahili clock (timer) T1CKPS0=1; // Ön Bölücü 11 T1CKPS1=1; // 1:8 (8 usn) TMR1H=3036/256; // 65536-62500=3036 say TMR1L=3036%256; sn // 62500 sayma x 8 usn = 0.5 TMR1IF=0; // TMR1 kesme bayrağını resetle TMR1IE=1; // TMR1 kesmesi aktif PEIE=1; // Çevre birim kesmeleri aktif GIE=1; // Global kesme aktif while(1); // Kesme bekle void interrupt kesmetmr1() { if(tmr1if){ // Kesme geldi mi? TMR1H=3036/256; // 0'lanan timer'ı yeniden yükle (65536-//62500=3036) TMR1L=3036%256; // 62500 sayma x 8 usn = 0.5 sn LED=~LED; // Çıkış LED'ini tersle TMR1IF = 0; // TMR1 kesme bayrağını sıfırla. } } 4MHz, 1µSn dir ve 500.000 sayım için Timer 1 i öncelikle 62.500 e kadar saydıracak olursak; Prescaler oranını 1:8 seçdiğimizde 62500*8=500000 yani 0,5 sn lik gecikme demektir.

Örnek 10. Aynı programın Assembly kodu LIST P=16F877A #INCLUDE "P16F877A.INC" ORG 0X00 GOTO BASLA ORG 0X04 GOTO KESME_ALTPROG BASLA CLRF PORTD BSF ;PORTD'nin içerigini TEMIZLE STATUS, 5 ;BANK1'e geç CLRF TRISD ;PORTD'nin uçlarini çikis yap BSF PIE1,0 ;TMR1IE (PIE1<0>) (TMR1 interrupt enable bit) BCF STATUS, 5 ;BANK0'a geç BSF INTCON,7 ;Tüm kesmelere izin ver (GIE=1) BSF INTCON,6 ;PEIE=1 Çevresel kesmelere izin verildi BCF T1CON,1 ;TMR1CS : Timer1 Clock Source Select bit= 0, dahili T1CON,0 ;Timer1 çalistir (1= Enables Timer1,0=Stops Timer1) BSF T1CON,5 ; T1CON 5.ve 4. bitleri '10' yapilinca frekans BCF T1CON,4 ; bölme orani 1/4 olmaktadir. BSF BCF STATUS, 5 ;BANK0'a geç LOOP GOTO LOOP KESME_ALTPROG BCF PIR1,0 ;TMR1IF TASMA BAYRAGINI SIL MOVLW 0X0B ;h 0BDC' SAYISINI TMR1H VE TMR1L YÜKLE MOVWF TMR1H MOVLW 0XDC ;h 0BDC' SAYISINI TMR1H VE TMR1L YÜKLE MOVWF TMR1L BTFSS PORTD,0 ; RD0'i TEST ET (1 MI?) GOTO YAK ; HAYIR, RB0=ON RB1=OFF GOTO SONDUR ; EVET, RB0=OFF RB1=ON YAK BSF PORTD,0 ; RD0 ON RETFIE SONDUR BCF PORTD,0 ; RD0 OFF RETFIE END ;Prog. Sonu

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ü, Timer 2 birimi 16f877a da bir çok görevde kullanılan özel bir Timer dır. Özellikle kullanım amacı PWM üretmek olan Timer 2, Timer 0 gibi 8 bitliktir. TIMER2 Blok diyagramı

T2CON: TIMER2 Kontrol Kaydedicisi TMR2=PR2 : Timer2 sayıcısının yüksek değerlikli bitini tutan kaydedici TOUTPS3, TOUTPS2, TOUTPS1, TOUTPS0 : Postscale değerleri, TMR2ON : Timer2 sayıcısını açma biti T2CKPS1, T2CKPS0 : Prescaler değerler (1:1, 1:4, 1:16) TMR2IE : Timer2 kesme izin biti TMR2IF : Timer2 kesme bayrak biti

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. T2CKPS0,T2CKPS1: Timer2 de prescaler in ayarlandığı bitlerdir. Bu bitlerin aldığı değerlere göre prescaler değeri değişmektedir. 3-6. BİTLER: POSTSCALE DEĞERİ

Zamanlayıcı 2 (TIMER2) Kesme Gecikmesi TMR2IF_PER = (PR2+1) * PRE * POST * TOSC * 4 Soru: Fazedelim ki FOSC = 30 MHz, ve her 5 ms de bir Timer2 periyodik kesmesi üretmek istiyorsunuz, PR2 nin başlangıç değeri ne olmalıdır? Cevap: POST = 16 için; PR2 = [ 5 ms / [(1/30 MHz)*4*PRE*16] ] = [0.005/[3.33e-8 * 4 * PRE*16] Buradan; PRE = 1 için PR2 = 2343, PRE = 4 için PR2 = 585 ve PRE = 16 için PR2 = 145 değerleri elde edilir.

Örnek 11: TMR2 kesmesi ile PORTB ye bağlı bitleri tersleyen program. Program; Yaklaşık 8 sn de bir tersleme yapmaktadır

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 edilir Bütün PIC 16F mikro denetleyicileri dört farklı kaynaktan kesme alabilir. Bunlar; YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

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

PIC16F877 Kesme Kaynakları YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Kesme Örneği: Seri port kesmesi YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

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. YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Uygulama-12: 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 verilir, Kesme oluşup, program kesme alt programına dallandığında INTF bitini 0 yap. YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

PORTB Değişim Kesmesi Örneği PORTB nin 4 ve 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 kay dedicisinin 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. UYGULAMA - 13 : 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 prog ram. 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 YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Uygulama-13: PORTB nin RB4-RB7 uçlarından gelen bir kesme gerçekleşince kesme alt programında PORTA ya bağlı LED leri yakan programı yazalım LIST P=16F84 INCLUDE "P16F84.INC" CBLOCK H'0C' SAYAC1,SAYAC2 ENDC ORG 0X00 GOTO BASLA ORG 0X04 GOTO KESME BASLA BSF STATUS,5 ;BANK1 e geçiş yap CLRF TRISA ;PORTA çıkış seçildi MOVLW 0XFF MOVWF TRISB ;PORTB GIRIŞ BCF STATUS,5 ;BANK0 a geçiş yap CLRF PORTA ;PORTA ya bağlı ledleri söndür BSF INTCON,RBIE;RB değişim kesmesine izin ver BSF INTCON,GIE ;Tüm kesmelere izin ver GOTO BASLA KESME MOVLW 0X0F MOVWF PORTA CLRF INTCON CALL BEKLE RETFIE BEKLE MOVLW 0X05 MOVWF SAYAC1 DON1 MOVLW 0X06 MOVWF SAYAC2 DON2 DECFSZ SAYAC2,F GOTO DON1 DECFSZ SAYAC1,F GOTO DON2 RETURN END YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Çalışma Sorusu: Şekilde çalışma devresi verilen Çamaşır makinesinin programını yazınız.

WDT Zamanlayıcısı #include <xc.h> config _WDT_ON & _CP_OFF void main() { OPTION_REG = 0x0E; // WDT seçildi (1:64) #asm CLRWDT; #endasm PORTB = 0x0F; // PORTB baslangıç degeri TRISB = 0; // PORTB çıkış delay_ms(300); // 300mS bekle PORTB = 0xF0; // PortB swap yapıldı while (1); } // WDT zamanlayıcısı