﻿/******************************************************
      PIC16F877 ile Compare Modu Uygulaması
      PIC PROG/DEKA     : Port B jumper'ı LED konumunda olmalı
*******************************************************/
#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
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli

//*********** CCP1 KESMESİ ******************
#INT_CCP1   // INT_CCP1 kesmesi fonksiyonu
void karsilastir1_kesmesi ()
{
   output_toggle(pin_b0); // RB0 çıkışı tersleniyor
}

//*********** CCP2 KESMESİ ******************
#INT_CCP2   // INT_CCP2 kesmesi fonksiyonu
void karsilastir2_kesmesi ()
{
   set_timer1(0);   // TMR1 içeriği sıfırlanıyor
   output_toggle(pin_b1); // RB1 çıkışı tersleniyor
}

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

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI 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ışı

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

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

   enable_interrupts(INT_CCP1);  // INT_CCP1 kesmesi aktif yapılıyor
   enable_interrupts(INT_CCP2);  // INT_CCP2 kesmesi aktif yapılıyor
   enable_interrupts(GLOBAL);    // Aktif edilen kesmelere izin ver

   setup_ccp1(CCP_COMPARE_INT); // CCP1 birimi COMPARE modunda kullanılacak
   setup_ccp2(CCP_COMPARE_INT); // CCP2 birimi COMPARE modunda kullanılacak


   setup_timer_1(T1_EXTERNAL_SYNC | T1_DIV_BY_1); // Timer1 ayarları yapılıyor

   CCP_1_HIGH=0x00; // CCPR1H kaydedicisi sıfırlanıyor
   CCP_1_LOW=0x05;  // CCPR1L kaydedicisine 05h değeri yükleniyor.

   CCP_2_HIGH=0x00; // CCPR2H kaydedicisi sıfırlanıyor
   CCP_2_LOW=0x0A;  // CCPR2L kaydedicisine 0Ah değeri yükleniyor.

   set_timer1(0); // TMR1 içeriği sıfırlanıyor

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



