﻿/******************************************************
      PIC16F877 ile PWM Modu Uygulaması-1
      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(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli

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

/********* 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_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı

   set_tris_a(0x03);   // RA0 ve RA1 pinleri giriş
   set_tris_c(0x00);   // RC0, RC1 ve RC2 pini giriş

   setup_ccp1(CCP_PWM);  // CCP1 birimi PWM çıkışı için ayarlandı
   setup_ccp2(CCP_PWM);  // CCP2 birimi PWM çıkışı için ayarlandı

   setup_timer_2(T2_DIV_BY_16,170,1); // Timer2 ayarları yapılıyor

   set_pwm1_duty(i); // PWM1 çıkışı görev saykılı belirleniyor
   set_pwm2_duty(i); // PWM2 çıkışı görev saykılı belirleniyor

   while(1) // Sonsuz döngü
   {
      if (input(pin_a0)) // Eğer RA0 girişine bağlı butona basılırsa
      {
         delay_ms(20);   // Buton arkı önleme gecikmesi
         while(input(pin_a0)); // Basılı butondan el çekile kadar bekle
         i+=3; // i=i+3 anlamındadır.

         if (i>130) // i değeri 130'dan büyükse i değeri 130 olsun
            i=130;

         set_pwm1_duty(i); // PWM1 çıkışı görev saykılı belirleniyor
         set_pwm2_duty(i); // PWM2 çıkışı görev saykılı belirleniyor
      }

      if (input(pin_a1)) // Eğer RA1 girişine bağlı butona basılırsa
      {
         delay_ms(20);  // Buton arkı önleme gecikmesi
         while(input(pin_a1)); // Basılı butondan el çekile kadar bekle
         i-=3;  // i=i-3 anlamındadır.

         if (i<10) // i değeri 10'dan küçük ise i değeri 10 olsun
            i=10;

         set_pwm1_duty(i); // PWM1 çıkışı görev saykılı belirleniyor
         set_pwm2_duty(i); // PWM2 çıkışı görev saykılı belirleniyor
      }
   }
}


