﻿/******************************************************
      PIC16F877 ile Step Motor Uygulaması (ULN2003A İle)
*******************************************************/

#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.

// Giriş ve çıkış pinlerine isim atanıyor
#define buton_ileri pin_a0
#define buton_geri  pin_a1

int i=0,hiz=10;

const int yarim_adim[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; // Step motor yarım adım dönüş adımları

/********* 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ışı

   output_b(0x00);

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

      if (input(buton_ileri)) // İLERİ Butonuna basıldı ise
      {
         output_b(yarim_adim[i]);  // Step motor 1 adım ileri
         while(input(buton_ileri));// Basılan tuş bırakılana kadar bekle
         delay_ms(hiz);            // Adımlar arası bekleme süresi

         if (i==7)                 // i değişkeni 7 olunca i değeri -1 olsun
            i=-1;
         i++;                      // i değişkenini 1 arttır

      }

      if (input(buton_geri)) // GERİ Butonuna basıldı ise
      {
         if (i==0)                 // i değişkeni 0 ise i değeri 8 olsun
            i=8;
         i--;                      // i değişkenini 1 azalt
         output_b(yarim_adim[i]); // Step motora 1 adım geri
         while(input(buton_geri)); // Basılan tuş bırakılana kadar bekle
         delay_ms(hiz);            // Adımlar arası bekleme süresi
      }
   }
}

