﻿/******************************************************
 Uygulama Adı      : 74138 İle Port Çoğullama 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ılan osilatör frekansı belirtiliyor

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

int i; // 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_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 tümüyle çıkış olarak yönlendiriliyor

   while(1) // Sonsuz döngü
   {
      for(i=0;i<8;i++) // 1. 74138 entegresi çıkış kontrolü
      {
         output_b(i|0b00000000); // İlk 74138 seçiliyor ve sırayla çıkışlar aktif yapılıyor
         delay_ms(250);          // Gecikme veriliyor
      }
      for (i=0;i<8;i++) // 2. 74138 entegresi çıkış kontrolü
      {
         output_b(i|0b00010000); // İkinci 74138 seçiliyor ve sırayla çıkışlar aktif yapılıyor
         delay_ms(250);          // Gecikme veriliyor
      }
      for(i=0;i<8;i++) // 3. 74138 entegresi çıkış kontrolü
      {
         output_b(i|0b00100000); // Üçüncü 74138 seçiliyor ve sırayla çıkışlar aktif yapılıyor
         delay_ms(250);          // Gecikme veriliyor
      }
      for (i=0;i<8;i++) //  4. 74138 entegresi çıkış kontrolü
      {
         output_b(i|0b00110000); // Dördüncü 74138 seçiliyor ve sırayla çıkışlar aktif yapılıyor
         delay_ms(250);          // Gecikme veriliyor
      }
   }
}


