CCS C ile Timer Uygulamaları

pr_01_37_max

 

 

PIC16F877 ile Timer0 Uygulaması

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli

int i=0; // Tamsayı tipinde değişken tanımlanıyor

//****************** Timer0 Kesmesi *****************************
#int_timer0 // Timer0 kesmesi
void timer0_kesme () // Kesme fonksiyonu ismi
{
 set_timer0(60); // TMR0 değeri belirleniyor
 i++; // i değeri 1 arttırılıyor
 if (i==10) // i değeri 10'a eşitse RB0 çıkışı lojik-1 olsun
 output_high(pin_b0);
 if (i==20) // i değeri 20'ye eşitse RB0 çıkışı lojik-1 olsun ve i değeri sıfırlansın
 {
 output_low(pin_b0);
 i=0;
 }
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
 setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
 setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı


 set_tris_b(0x00); // B portu komple çıkış

 output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor

 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor
 set_timer0(60); // TMR0 değeri belirleniyor


 enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
 enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

 while(1); // Sonsuz döngü

 }

PIC16F877 ile Timer1 Uygulaması

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli

int i=0; // Tamsayı tipinde değişken tanımlanıyor

//****************** Timer0 Kesmesi *****************************
#int_timer1 // Timer1 kesmesi
void timer1_kesme () // Kesme fonksiyonu ismi
{
 set_timer1(63036); // TMR1 değeri belirleniyor

 i++; // i değeri 1 arttırılıyor

 if (i==50) // i değeri 50'ye eşit olursa RB0 lojik-1 olsun
 output_high(pin_b0);
 if (i==100) // i değeri 100'e eşit olursa RB0 lojik-0 ve i=0 olsun 
 {
 output_low(pin_b0);
 i=0;
 }
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
 setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı


 set_tris_b(0x00); // B portu komple çıkış

 output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor

 setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // Timer1 ayarları yapılıyor
 set_timer1(63036); // TMR1 değeri belirleniyor


 enable_interrupts(INT_timer1); // int_timer0 kesmesini aktif yapar
 enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

 while(1); // Sonsuz döngü

 }

PIC16F877 ile Timer2 Uygulaması

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli

unsigned int kesme=0; // Tamsayı tipinde 16 bitlik değişken tanımlanıyor

//****************** Timer2 Kesmesi *****************************
#int_timer2 // Timer2 kesmesi
void timer2_kesme () // Kesme fonksiyonu ismi
{
 kesme++; // kesme değeri 1 arttırılıyor
 output_high(pin_b0); // RB0 lojik-1 yapılıyor
 output_low(pin_b0); // RB0 lojik-0 yapılıyor
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_1(T1_DISABLED); // T1 birimi devre dışı
 setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

 set_tris_a(0x01); // RA0 pini giriş
 set_tris_b(0x00); // B portu komple çıkış

 output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor

 setup_timer_2(T2_DIV_BY_16,250,16); // Timer2 ayarları yapılıyor

 enable_interrupts(INT_timer2); // int_timer2 kesmesini aktif yapar
 enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

 while(1) // Sonsuz döngü
 {
 if (input(pin_a0)) // RA0 butonuna basıldığında
 output_b(kesme); // kesme değerini B portuna gönder
 }

 }

timer uygulamaları

Bu yazı CCS C Örnekleri kategorisine gönderilmiş ve , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.