﻿/******************************************************
 PIC16F877 ile CCS C Dosyalarını Kullanarak 24C02 Harici 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 Fonksiyonu,SDA ve SCL pinleri ve iletişim hızı belirleniyor

#include <input.c> // input.c dosyası programa ekleniyor
#include <2402.c>  // 2402.c dosyası programa ekleniyor

byte veri,adres; // byte tipinde değişken tanımlanıyor
char islem;      // char 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ışı

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

   while(1)
   {
      do  // do-while döngüsü tanımlanıyor
      {
         printf("\n\rOkuma (O) veya Yazma (Y) >"); // RS232 portuna veri gönderiliyor
         islem=getc(); // RS232 portundan gelen veri alınıyor
         islem=toupper(islem); // toupper fonksiyonu tüm 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 "0" veya "Y" dışında ise döngü başına dön

      if (islem=='O')  // Eğer okunan karakter "O" ise
      {
         printf("\n\rOkumak istediginiz adresi giriniz> ");
         adres=gethex(); // RS232 portundan gelen veriyi hex formatında al
         printf("\n\rDeger= %X",read_ext_eeprom(adres) );
      }

      if (islem=='Y')  // Eğer okunan karakter "Y" ise
      {
         printf("\n\rBilgi yazmak istediginiz adresi giriniz> ");
         adres=gethex(); // RS232 portundan gelen veriyi hex formatında al
         printf("\n\rBilgiyi giriniz> ");
         veri=gethex();  // RS232 portundan gelen veriyi hex formatında al
         write_ext_eeprom(adres,veri); // Harici EEPROM'da belirtilen adrese "veri" değerini yaz
      }
   }
}


