﻿/******************************************************************
 PIC16F877 ile CCS C Dosyalarını Kullanarak 24C02 EEPROM Uygulaması
*******************************************************************/

#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 rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)   // RS232 ayarları belirtiliyor

#use i2c(master,sda=pin_c4,scl=pin_c3,slow=100000)//I2C iletişimi SDA ve SCL pinleri ve iletişim hızı belirleniyor

#include <kendi_input.c> // kendi_input.c dosyası programa ekleniyor
#include <kendi_2402.c>  // kendi_2402.c dosyası programa ekleniyor

byte veri,adres;
char islem;

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

   printf("\n\r*************************************************");
   printf("\n\r  24C02C Harici EEPROM Bilgi Okuma Yazma  ");
   printf("\n\r*************************************************");
   printf("\n\n\r Bir islem seciniz>");


   while(1) //Sonsuz döngü
   {
      do  // do-while döngüsü tanımlanıyor
      {
         printf("\n\rOkuma (O) veya Yazma (Y) >");
         islem=getc();// RS232 portundan gelen veri alınıyor
         islem=toupper(islem); // toupper fonksiyonu karakterleri  // büyük karaktere çevirir (a>A)
         putc(islem); //"islem" değişkeni içeriği RS232 portuna gönderiliyor
      }  while ( (islem!='O') && (islem!='Y') ); // Girilen karakter "O" veya "Y" dışında ise döngü başına dön

      if (islem=='O') // Eğer okunan karakter ‘O’ ise
      {
         printf("\n\rOkumak istediğiniz adresi giriniz> ");
         adres=hex_oku2();// RS232 portundan gelen veriyi heksadesimal formatında al
         printf("\n\rDeger= %X",eeprom_oku(adres) ); // “adres” değişkeninin tuttuğu adresteki bilgiyi oku ve RS232’ye gönder
      }

      if (islem=='Y') // Eğer okunan karakter "Y" ise
      {
         printf("\n\rBilgi yazmak istediğiniz adresi giriniz> ");
         adres=hex_oku2();// RS232 portundan gelen veriyi heksadesimal formatında al
         printf("\n\rBilgiyi giriniz> ");
         veri=hex_oku2();// RS232 portundan gelen veriyi heksadesimal formatında al
         eeprom_yaz(adres,veri); // “adres” değişkeninin belirttiği adrese “veri” değişkeni değerini yaz
      }
   }
}



