CCS C İLE PIC PROGRAMLAMA DERS-2-

Slides:



Advertisements
Benzer bir sunumlar
ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama
Advertisements

PLC.
Prof. Dr. Eşref ADALI Yrd. Doç. Dr. Şule Gündüz Öğüdücü Sürüm-A
8259A Programlanabilir Kesme Denetleyicisi (PIC)
e-Fatura İşlemleri e-Fatura İşlemleri İçin Gerekli Adımlar
Ali AKMAN Reset, WDT, Basic Timer, Timer-A BİL325  C Ders - 6.
Endüstriyel Otomasyon Mekatronik Mühendisliği Bölümü
8088 Kesme Operasyonu.
MikroC ile PIC Programlama
FORTEL F1xxx Serisi IP PBX Ailesinin Tanıtım ve Eğitimi
BÖLÜM 2: BİLGİSAYAR SİSTEM YAPILARI
PIC 16F84 ile ALT PROGRAMLARIN ve ÇEVRİM TABLOLARININ KULLANIMI
DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI
8051 MİKROKONTROLÖR AİLESİ
PROGRAMLAMA VE ASSEMBLY DİLİ
Bilgisayar Programlama
Çağlar AKGÖZ WEB SAYFALARININ DEĞERLENDİRİLMESİ.
İSTANBUL İLİNDEKİ ENDÜSTRİ MESLEK LİSELERİN KONUMUNU BELİRTEN HARİTA
Metotlar.
Timer 1 16bit (65535) Programlanabilir dahili ve harici saat kaynağı
DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ
DERS 5 PIC 16F84 PROGRAMLAMA.
Bilgisayar Programlama
JAVA’DA DÖNGÜLER.
DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI
Bilişim Teknolojileri Öğretmeni İsmail ÖZTÜRK
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
CNC tezgah ve sistemlerde; tezgah, parça ve takım olmak üzere üç ayrı koordinat sistemi vardır. Bu koordinat sistemlerinin  orijinlerine; tezgaha ait olanına 
LD/LDI LD X0 LDI X0 X0 Y0 X0 Y1 Temel Komutlar
OFF Zamanlayıcı OFF zamanlayıcısı (OFF Timer) kullanıcı tarafından belirlenen zaman süresince çıkışını önceden lojik “1” de tutan ve zaman süresi dolduğu.
BİLGİSAYAR MUHASEBE YAZILIMLARI
ZAMANLANMIŞ GÖREVLER. Linux sistemde bazı işlerin istediğiniz zamanlarda ya da zaman aralıklarında otomatik olarak yapılmasını sağlayabilirsiniz. Yani.
Dijital Çıkış Mantığı.
CCS C İLE PİC PROGRAMLAMA DERS -1-
Mikrodenetleyiciler.
CCS C İLE PIC PROGRAMLAMA DERS-4-
ARDUINO DİJİTAL PİN KONTROLÜ
CCS C İLE PIC PROGRAMLAMA DERS-3-
Adım Adım Algoritma.
MİKRODENETLEYİCİLER.
Amaçlar Assembly dilinin genel özelliklerini tanımak
Programlama Dillerinin Prensipleri
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
İnformasiya texnologiyaları kafedrası Mövzu № 9. Assembler. ( Assembler anlayışı. Assemblerin təyinatı. Assemblerdə operatorların formatı. Direktivlər.
Kaydediciler (Registers)
BASYS KARTININ TANITIMI. KARTIN GÖRÜNÜMÜ KARTIN ÖZELLİKLERİ 100,000 lojik kapılı Xilinx Spartan 3E FPGA; JTAG programlama bağlantı noktası FPGA biçimlendirme.
İnformasiya texnologiyaları kafedrası Mövzu № 9. Assembler. ( Assembler anlayışı. Assemblerin təyinatı. Assemblerdə operatorların formatı. Direktivlər.
İnformasiya texnologiyaları kafedrası Mövzu № 9. Assembler. ( Assembler anlayışı. Assemblerin təyinatı. Assemblerdə operatorların formatı. Direktivlər.
İnformasiya texnologiyaları kafedrası Mövzu № 9. Assembler. ( Assembler anlayışı. Assemblerin təyinatı. Assemblerdə operatorların formatı. Direktivlər.
DERS 5 PIC 16F84 PROGRAMLAMA.
PIC 16F84 ile ALT PROGRAMLARIN ve ÇEVRİM TABLOLARININ KULLANIMI
DERS 9 PIC 16F84 PROGRAMLAMA.
Sayıcı Entegreleri Prof. Dr. Hüseyin EKİZ.
Senkron Sayıcılar Prof. Dr. Hüseyin EKİZ.
Bilgisayar Donanım ve Sistem Yazılımı
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI
Display (7 Sengment Display) Uygulamaları SİSTEM KONTROL UYGULAMALARI
Prof. Dr. Eşref ADALI Doç. Dr. Şule Gündüz Öğüdücü Sürüm-B
Bilgisayar Mühendisliğine Giriş
Bilgisayar Bilimi Problem Çözme Süreci-2.
DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI
Konu: EĞİTİM AMAÇLI BLDC MOTOR HIZININ PID KONTROLÜ
MBLOCK ile Arduino ve Robotik Kodlama
Prof. Dr. Eşref ADALI Doç. Dr. Şule Gündüz Öğüdücü Sürüm-B
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
NİŞANTAŞI ÜNİVERSİTESİ
Interrupts.
MBLOCK ile Arduino ve Robotik Kodlama
Sunum transkripti:

CCS C İLE PIC PROGRAMLAMA DERS-2-

KESME(INTERRUPT) İŞLEMLERİ

KESME MANTIĞI VE KESME OLAYLARINA GENEL BİR BAKIŞ Mikrodenetleyicinin değişik kaynaklardan gelen sinyaller ile mevcut programının çalışmasını kesip, önceden tanımlanmış kesme programını(fonksiyonunu) icra edip, tekrar ana programa kaldığı yerden çalışmaya devam etmesi işlemini kesme olarak tanımlayabiliriz. Mikroişlemcili ve mikrodenetleyicili sistemlerde kesmeler olmazsa olmaz niteliktedir. Peki, neden kesmeler bu kadar önemlidir? Tasarlanan sistemlerde yapılan rutin kontrol işlemlerinin yanında çoğunlukla bazı giriş/çıkış uçları da denetlenmektedir –taranmaktadır-. Bu denetleme işlemleri sadece program vasıtası ile yapıldığında programın çalışma süresinin ve hızının neredeyse büyük kısmını işgal etmektedir. Bu kontrol veya tarama işlemi programda icra edilmesi gereken diğer işlerin yavaş yapılmasına veya kontrol edilmesi gereken diğer giriş/çıkış uçlarında veri kaybına yol açmasına sebep olabilir. Bu durumu engellemek, çok daha verimli ve esnek programlar yazabilmek için kesme(interrupt) kullanılır.

PIC denetleyilere ilk enerji geldiğinde veya PIC sıfırlandığında(resetlendiğinde) program sayıcı(Program Counter-PC, çalıştırılan komutun adresini tutan kaydedici) 0000h adresini gösterir. Bu adrese reset vektörü denir. Bu 0000h adresine PIC’e yüklenen programın başlangıç adresi yüklenir. Böylece denetleyici ilk enerjilendiği anda ilk başta 0000h adresine bakar ve bu adresin içinde bulunan adres değerine giderek programını icra eder. Kesme durumlarından biri oluştuğunda da program sayıcı(PC) program hafızasındaki 0004h adresine gider. Bu adrese kesme vektörü denir. 0004h adresindeki herhangi bir kesme sinyali geldiğinde ana program çalışması kesilir, kesme alt programına gidilir, kesme alt programı icra edilir ve ana programa geri dönülür.

KESME ÇEŞİTLERİ RB0 Harici Kesmesi RB4-RB7 Pinlerindeki Değişiklik Kesmesi Timer0 Birimi Taşma Kesmesi Timer1 Birimi Taşma Kesmesi Timer2 Birimi Taşma Kesmesi A/D Çevrimi Yapıldığında Meydana Gelen Kesme CCP1 Modülü Kesmesi CCP2 Modülü Kesmesi Paralel Porttan Veri Gelme Kesmesi Seri Porttan Veri Geldiğinde Oluşan Kesme SPI veye I2C İletişimi Sırasında Veri Gelme Kesmesi EEPROM’a Veri Yazma İşlemi Sonlandığında Oluşan Kesme RS232 Seri İletişiminde Gönderilecek Veri Tamponu Boş Olduğunda Meydana Gelen Kesme Bus Collision Kesmesi

CCS’DE KESME OLUŞTURMA İŞLEMLERİ CCS’de bir kesme komutu kullanıldığında ilgili kesme meydana geldiğinde işlenecek komutları içinde barındıran bir kesme fonksiyonunun tanımlanması gereklidir. CCS C’de kullanılacak kesme fonksiyonları mutlaka ana fonksiyondan önce tanımlanmalıdır. Kesme fonksiyonu tanımlanırken aşağıda verilen yapı kullanılır. #int_xxx //xxx yerine ilgili kesme ismi yazılır. [fonksiyon geri dönüş değeri türü][fonksiyon ismi]() { komut veya komutlar; } Örnek bir kesme fonksiyonu; #int_ext void dis_kesme () output_low(pin_d1); x++;

#int_xxx komutunda aktif edilen fonksiyon ismi yazılır #int_xxx komutunda aktif edilen fonksiyon ismi yazılır. Bu kesme isimleri kullanılan denetleyicinin tanıtım dosyasında (örneğin 16f876a.h dosyasının içinde) tanımlanmıştır. Örnek : #int_EXT dış kesme Kesmelerin aktif veya pasif yapılması için aşağıdaki komutlar kullanılır; enable_interrupts(kesme ismi); // kesmeyi aktif yapmak için disable_interrupts(kesme ismi); // kesmeyi pasif yapmak için enable_interrupt(int_ext); // RB0/INT dış kesmesi aktif disable_interrupt(int_ext); // RB0/INT dış kesmesi pasif PIC denetleyicilerde kesmeleri aktif etmek yetmez. CCS C’de aşağıdaki komutlarla tüm aktif edilmiş kesmelere izin verilir veya verilmez. enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin verilir. disable_interrupts(GLOBAL); // Aktif edilen kesmelere izin verilmez.

Bir kesme meydana geldiğinde o kesme fonksiyonu icra edilirken başka bir kesme meydana gelse dahi aktif olmaz. İlk başta icra edilen kesme fonksiyonunun bitmesi gereklidir. Fakat aynı anda meydana gelen kesmeler de hangi kesmenin geçerli olacağını belirlemek için kesmelere öncelik verilmelidir. Öncelik vermek için aşağıdaki komut kullanılır. İlk başta yazılan kesme en fazla önceliğe sahip demektir. #priority kesme isme , kesme ismi,… #priority ext, timer0 PIC denetleyicilerde bir kesme meydana geldiğinde o kesmeye ait kesme bayrağı biti lojik-1 olur. Bunun nedeni kesme komutları işlenirken yine aynı kesme meydana gelirse kesme komutları icra edilirken kesmeden çıkılmamasıdır. Kesme komutlarının sonunda bu bayrak bitinin lojik-0 yapılması gerekir. Eğer bu bit lojik-0 yapılmazsa, aynı kesme şartı oluşsa dahi ikinci kesme meydana gelmez. CCS C derleyicisinde ise herhangi bir kesme meydana geldiğinde, CCS C programı kesme fonksiyonu çıkışında otomatik olarak kesme bayrağını siler. Kullanıcının bu son işlemi komut ile yapmasına gerek kalmaz.

DIŞ KESME (EXTERNAL INTERRUPT) UYGULAMASI

15 DAKİKA ARA ZAMANI 

ZAMANLAYICI VE SAYICI İŞLEMLERİ Zamanlayıcı(timer) ve sayıcı(counter) birimleri hem mikroişlemci hem de mikrodenetleyiciler için neredeyse bulunması zorunlu birimlerdir. Mikrodenetleyici yapılarının gelişim evresinde önemli bir yerde bu tip donanım birimlerinin mikrodenetleyici yapısına eklenmesidir. Zamanlayıcı ve sayıcı donanım birimlerinin yaptığı işlemler yazılımsal olarak da yapılabilir. Fakat bu durumda yazılımın büyük çoğunluğu meşgul edilmiş olur. Zamanlayıcı/sayıcı birimleri aynı birimlerdir, kullanım şekline göre zamanlayıcı veya sayıcı olarak kullanılabilir. Bir birimin zamanlayıcı olarak kullanılması için değer artışının düzenli(periyodik) olması gerekmektedir. Sayıcı olarak kullanımda ise değer artışının düzenli olması gerekliliği yoktur.

TIMER0 BİRİMİ Timer0 birimi zamanlayıcı ve sayıcı olarak kullanılabilen bir donanım birimidir. Bu birimin özellikleri aşağıda verilmiştir. 8 bit Zamanlayıcı/Sayıcı kullanım, Okuma-yazma yapılabilir. 8 bitlik yazılım ile programlanabilen bölme oranı (prescaler) Dahili ve harici saat(clock) sinyali kaynağı seçme, Harici saat kaynağı sinyal tetikleme kenarı seçimi(edge select)

Timer0 birimi ister dahili kaynakla ister RA4/TOCKI pininden uygulanan harici saat sinyali kaynağından beslenir. Kaynak seçimine göre çalışma tipi(zamanlayıcı veya sayıcı) seçilmiş olur. Seçilen kaynaktan gelen saat sinyali direkt olarak kullanılmaz. Bu sinyal bölme oranı(prescaler) değeri ile çarpılarak elde edilen değer sinyal kaynağı olarak kullanılır. Normalde Timer0 değeri başlangıçta sıfırdır. Programla data hattından istenen değer yüklenebilir. Böylece sayma işlemi istenen değerden başlatılabilir.

SETUP_TIMER_0() FONKSİYONU Timer0 zamanlayıcı ayarlarını yapmaya yarayan bir fonksiyonudur. setup_timer_0(mod); Fonksiyondaki «mod» kısmına aşağıda belirtilen sabit tanımlamalardan biri veya birden fazlası yazılabilir. İki sabit arasında «|» operatörü konulur. Bu fonksiyonda kullanılacak sabitler denetleyicinin başlık dosyasında (16f876a.h) yazılıdır. Kesme Aktif Kenar Ayarı Sabitleri; «RTCC_INTERNAL»=Timer0 clock kaynağının denetleyici çalışma frekansı olacağını bildirir. «RTCC_EXT_L_TO_H»=Timer0 clock kaynağının dış çevreden alınacağını ve sinyalin her yükselen kenarında tetikleme olacağını bildirir. «RTCC_EXT_H_TO_L»=Timer0 clock kaynağının dış çevreden alınacağını ve sinyalin her düşen kenarında tetikleme olacağını bildirir. Bölme Oranı(Prescaler) Sabitleri; «RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32, RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256» Sabitin sonundaki rakamlar bölme oranını belirtir. Örnek; setup_timer_0(RTCC_DIV_4 | RTCC_EXT_L_TO_H); komutu ile Timer0’ın harici kaynaktan besleneceği (sayıcı olarak kullanılacağı), harici kaynak sinyalinin her yükselen kenarında artış olacağı ve bölme oranının 4 olduğu belirtilmiş olur.

SET_TIMER0 VE SET_RTCC() FONKSİYONU SET_TIMER0 ve SET_RTCC() fonksiyonları aynı anlamdadır. İki fonksiyonda Timer0 birimin saymaya başlama değerini belirlemek için kullanılırlar. Tüm sayıcılar yukarı doğru sayar ve maksimum değere ulaşınca sıfıra döner ve tekrar yukarı saymaya başlar. set_timer0(değer); veya set_rtcc(değer); Fonksiyonda «değer» kısmında Timer0 biriminin saymaya başlama değeri yazılır. Timer0 birimi 8 bitlik olduğu için buraya yazılacak değer 0 ile 255 arasında (0 ve 255 dahil) olmalıdır. Örnek; set_timer0(45); komutu ile Timer0 birimi saymaya 45’den itibaren saymaya başlar.

TIMER0 KESMESİ(#INT_TIMER0) Normal kesme oluşturma mantığı ile aynı mantıkla #int_timer0 komutu ile kesme fonksiyonu oluşturulur. Burada dikkat edilmesi gereken nokta kesme fonksiyonu içinde mutlaka set_timer0() komutu ile programda set edilen değerin tekrar kesme fonksiyonu içinde de belirtilmesi gerekliliğidir. Çünkü program kesme fonksiyonuna gittiğinde, içerik sıfırlanır. Timer0 biriminin tekrar başlangıçta istenen değer ile saymaya başlanması isteniyorsa kesme fonksiyonunda mutlaka tekrardan set_timer0() komutu ile set değeri belirtilmelidir.

Timer0 kaydedici için oluşturulacak kesmenin oluşma süresi aşağıdaki formül ile hesaplanabilir. Kesme Oluşma Süresi=Tkomut x (Bölme Oranı) x (256-TMR0’a yazılan değer) Tkomut periyodu; Tkomut (sn)= 1/ fkomut(hz) formülünden bulunur. fkomut değeri bilindiği gibi PIC denetleyiciye bağlanan osilatör frekansının 4’e bölümü ile elde edilir(PIC denetleyicilerde kullanılan osilatör frekansının denetleyici tarafından 4’e bölünüp öyle kullanıldığını unutmayınız!)

Timer0 ile Sayıcı Uygulaması

Timer0 ile Zamanlayıcı Uygulaması

BİZİ DİNLEDİĞİNİZ İÇİN TEŞEKKÜR EDİNİZ  BU SLAYT HAZIRLANIRKEN SERDAR ÇİÇEK’İN CCS C İLE PIC PROGRAMLAMA KİTABINDAN FAYDALANILMIŞTIR.