﻿/******************************************************
 Uygulama Adı      : Port Okuma ve Porta Bilgi Gönderme
 Programın Amacı   : A portu RA0,RA1,RA2 ve RA3 pinlerine bağlı butonların durumunun
                     okunarak, okunan bu bilginin B portuna bağlı LED'lerde gösterilmesi
 PIC PROG/DEKA     : Port B jumper'ı LED konumunda olmalı
 Yazan             : SERDAR ÇİÇEK
*******************************************************/

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan 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

#byte portb=6  // Bu komutla portb kelimesi denetleyicinin B portu kaydedicisi adresiyle eşleştirilmiştir

int giris;     // 8 bitlik 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_a(0xFF);    // A portu tümüyle giriş olarak yönlendiriliyor
   set_tris_b(0x00);    // B portu tümüyle çıkış olarak yönlendiriliyor

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

   basla:

   giris=input_a();   // A port girişi komple okunuyor ve okunan değer giris değişkenine aktarılıyor
   giris=giris&0b00111111;  // giris değerinin yüksek değerlikli son 2 biti maskeleniyor
   portb=giris;       // giris değişkeni değeri B portuna çıkış olarak gönderiliyor

   goto basla;        // basla etiketine dallanılıyor
}

