// ------------------------------------------------------- // DS1302 projesi icin kutuphane dosyasi. 06-10-2008 Y.E. // ------------------------------------------------------- ///////////////////////////////////////////////////////// //// DS1302.C //// //// //// //// (2) reset3w(); //// //// (3) pals_gonder(); //// //// (4) bayt_yaz(bilgi); //// //// (5) veri=bayt_oku(); //// //// (6) DS1302_yaz(komut,veri); //// //// (7) veri=DS1302_oku(komut); //// //// (8) BCD_Dec(deger); //// //// //// ///////////////////////////////////////////////////////// // ------------------------------------------------------- // (1) PIC16F628A icin bacak tanimlamalari // ------------------------------------------------------- #define SCLK RB4 #define I_O RB5 #define CE RB6 // ------------------------------------------------------- // (2) DS1302 resetleme // ------------------------------------------------------- void reset_3w(void){ CE=0; DelayMs(1); CE=1; } // ------------------------------------------------------- // (3) Pals gonderme // ------------------------------------------------------- void pals_gonder(void){ SCLK=1; DelayMs(2); SCLK=0; DelayMs(2); } // ------------------------------------------------------- // (4) DS1302'ye 1 bayt bilgi yazma // ------------------------------------------------------- void bayt_yaz(unsigned char bilgi) { TRISB=0x80; // I_O ucunu cikis sec SCLK=0; I_O=(bilgi&1);DelayUs(3); pals_gonder(); I_O=(bilgi&2)>>1;DelayUs(3); pals_gonder(); I_O=(bilgi&4)>>2;DelayUs(3); pals_gonder(); I_O=(bilgi&8)>>3;DelayUs(3); pals_gonder(); I_O=(bilgi&16)>>4;DelayUs(3); pals_gonder(); I_O=(bilgi&32)>>5;DelayUs(3); pals_gonder(); I_O=(bilgi&64)>>6;DelayUs(3); pals_gonder(); I_O=(bilgi&128)>>7;DelayUs(3); pals_gonder(); } // ------------------------------------------------------- // (5) DS1302'den 1 bayt okuma // ------------------------------------------------------- unsigned char bayt_oku(void){ unsigned char veri,i; veri=0; TRISB=0xA0; // I_O ucunu giris sec SCLK=0; veri=(veri|I_O);DelayUs(3); pals_gonder(); for (i=1;i<8;i++){ veri=veri<<1; veri=(veri|I_O);DelayUs(3); pals_gonder(); } // D0-D7 seklindeki bilgiyi D7-D0 haline getir i=0; i=i|((veri&1)<<7); i=i|((veri&2)<<5); i=i|((veri&4)<<3); i=i|((veri&8)<<1); i=i|((veri&16)>>1); i=i|((veri&32)>>3); i=i|((veri&64)>>5); i=i|((veri&128)>>7); veri=i; return veri; // okunan 1 bayt veri } // ------------------------------------------------------- // (6) DS1302'ye [1 bayt komut + 1 bayt veri] yazma // ------------------------------------------------------- void DS1302_yaz(unsigned char komut,unsigned char veri) { SCLK=0; reset_3w();DelayUs(3); bayt_yaz(komut); bayt_yaz(veri); reset_3w();DelayUs(3); CE=0; } // ------------------------------------------------------- // (7) Komut esliginde DS1302'den 1 bayt veri okuma // ------------------------------------------------------- unsigned char DS1302_oku(unsigned char komut) { unsigned char veri; veri=0; SCLK=0; reset_3w();DelayUs(3); bayt_yaz(komut); veri=bayt_oku(); reset_3w();DelayUs(3); CE=0; return veri; } // ------------------------------------------------------- // (8) BCD'den desimal'e cevirme // ------------------------------------------------------- char BCD_Dec(char deger) { return (deger%16 + 10*(deger/16)); }