CCS C ile Dahili EEPROM Uygulamaları

pr_01_37_max

 

/*****************************************************************
 PIC16F877 ile Dahili EEPROM Uygulaması-1 (Hafızalı Kronometre)
PIC PROG/DEKA : Port B jumper'ı LCD konumunda olmalı
******************************************************************/

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

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

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // LCD.c dosyası programa ekleniyor

int8 _10ms=0; // Tam sayı tipinde değişken tanımlanıyor
unsigned int8 saniye=0; // İşaretsiz tam sayı tipinde değişken tanımlanıyor

//****************** Timer0 Kesmesi *****************************
#int_timer0 // Timer0 kesmesi. Her 10 msn'de bir kesme oluşur.
void timer0_kesme () // Kesme fonksiyonu ismi
{
 set_timer0(217); // TMR0 değeri belirleniyor

 _10ms++; // _10ms değişkeni değerini 1 arttır

 if (_10ms==100) // _10ms değeri 100 olunca (Geçen süre 1 saniye olunca)
 {
 _10ms=0; // _10ms değişkenini sıfırla
 saniye++; // saniye değişkenini bir arttır
 if (saniye==255) // Eğer saniye değişkeni 999 olursa sıfırla
 saniye=0; // saniye değişkenini sıfırla
 }
}

/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
 setup_psp(PSP_DISABLED); // PSP 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(0x0F); // RA0, RA1, RA2, RA3 pinleri giriş

 lcd_init(); // LCD kurulumu yapılıyor

 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor
 set_timer0(217); // TMR0 değeri belirleniyor

 lcd_gotoxy(1,1); // İmleç 1.sütun, 1. satırda
 printf(lcd_putc,"Sure=%03u.%02d",saniye,_10ms); // Saniye ve milisaniye LCD'ye yazdırılıyor
 lcd_gotoxy(1,2); // İmleç 1.sütun, 2. satırda
 printf(lcd_putc,"Sonuc=%03u.%02d",read_eeprom(0),read_eeprom(1)); // EEPROM'da saklanan saniye ve milisaniye değerleri LCD'ye yazdırılıyor

 while(1)
 {
 if(input(pin_a3)) // SIFIRLA butonuna basıldı ise
 {
 saniye=_10ms=0;
 write_eeprom(0,saniye); // 0 (0x00) adresine saniye değerini yaz
 write_eeprom(1,_10ms); // 1 (0x01) adresine milisaniye değerini yaz
 lcd_gotoxy(1,1); // İmleç 1.sütun, 1. satırda
 printf(lcd_putc,"Sure=%03u.%02d",saniye,_10ms); // Sıfırlanan süre LCD'ye yazdırılıyor
 lcd_gotoxy(1,2); // İmleç 1.sütun, 2. satırda
 printf(lcd_putc,"Sonuc=%03u.%02d",saniye,_10ms);// Sıfırlanan kayıtlı süre LCD'ye yazdırılıyor
 while(input(pin_a3)); // Butondan el çekilene kadar bekle
 }

 if(input(pin_a0)) // BAŞLA butonuna basıldı ise
 {
 while(!input(pin_a2)) // DUR butonuna basılana kadar döngü dönsün
 {
 enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
 enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

 lcd_gotoxy(1,1); // İmleç 1.sütun, 1. satırda
 printf(lcd_putc,"Sure=%03u.%02d",saniye,_10ms); // Süre LCD'ye yazdırılıyor
 lcd_gotoxy(1,2); // İmleç 1.sütun, 2. satırda
 printf(lcd_putc,"Sonuc=%03u.%02d",read_eeprom(0),read_eeprom(1)); // EEPROM'da saklanan saniye ve milisaniye değerleri LCD'ye yazdırılıyor

 if (input(pin_a1)) // YAKALA butonuna basılmışsa
 {
 write_eeprom(0,saniye); // 0 (0x00) adresine saniye değerini yaz
 write_eeprom(1,_10ms); // 1 (0x01) adresine milisaniye değerini yaz
 lcd_gotoxy(7,2); // İmleç 7.sütun, 2. satırda
 printf(lcd_putc,"%03u.%02d",read_eeprom(0),read_eeprom(1)); // LCD'de yakalanan zamanı göster
 while(input(pin_a1)); // Butondan elimizi çekene kadar bekle
 }

 lcd_gotoxy(6,1); // İmleç 6.sütun, 1. satırda
 printf(lcd_putc,"%03u.%02d",saniye,_10ms); // Geçen zamanı LCD'de göster
 }
 disable_interrupts(GLOBAL); // Tüm kesmeleri pasif yap.
 }
 }
}

dahili eeprom

Bu yazı CCS C Örnekleri kategorisine gönderilmiş ve , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.