﻿/******************************************************
      PIC16F877A ile Karşılaştırıcı Modülü Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LED konumunda olmalı
*******************************************************/

#include <16f877A.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

/********* 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_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_a(0x0B);   // RA0,RA1,RA3 pini giriş,RA2 çıkış
   set_tris_b(0x00);   // B portu komple çıkış

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

   setup_comparator(A0_A3_A1_A3);      // Karşılaştırıcı modülü ayarları yapılıyor
   setup_vref (VREF_A2|VREF_HIGH |15); // Voltaj referans modülü ayarları yapılıyor

   while (1)  // Sonsuz döngü
   {
      if (C1OUT==1)  // Karşılaştırıcı-1 çıkışı "1" ise
         output_high(pin_b0);  // RB0 çıkışı lojik-1
      else
         output_low(pin_b0);   // RB0 çıkışı lojik-0

      if (C2OUT==1) // Karşılaştırıcı-2 çıkışı "1" ise
         output_high(pin_b1); // RB1 çıkışı lojik-1
      else
         output_low(pin_b1);  // RB1 çıkışı lojik-0
   }
}

