hi tech ds1307 kütüphanesi lazım

Başlatan satilla, 08 Ekim 2011, 13:58:49

satilla

üstadlar elinde olan varsa paylaşabilirmi
şimdiye kadar ds1302 kullanıyordum ancak mecburiyetten ds1307 kullancagım
çalışan bir kütüphane bulamadım yardımlarıınız bekliorm

M_B

Merhaba;
Daha once kullandıgım DS1307 kutuphane dosyası.
Kolay gelsin.

Not: i2c.h daha once forumda XX_CIHAN_XX paylastıgı kutuphanedir



ds1307.c
#include	<pic.h>
#include	"delay.h"
#include 	"i2c.h" 	// I2C kütüphanesi tanımlanıyor

char saniye10,saniye,dakika10,dakika,saat10,saat; 
char ay10,ay,gun10,gun,yil10,yil,haftaningunu,pm,saatmodu; 


unsigned char Saat[10];
unsigned char Tarih[10];


//tüm registerları okur. 
void saat_oku(unsigned char *Saat) 
{ 
   char temp; 
   i2c_Start(); 
   i2c_SendByte(0xd0); 
   i2c_SendByte(0x00); 
   i2c_Start(); 
   i2c_SendByte(0xd1); 
 						  	//saniyeyi oku 
   temp=i2c_GetByte(0); 
   saniye=0x0f & temp; 
   saniye10=(temp>>4) & 0x7; 
						   //dakikayı oku. 
   temp=i2c_GetByte(0); 
   dakika= temp & 0x0f; 
   dakika10=temp >>4; 
 						  	//saati oku. 
   temp=i2c_GetByte(0); 
   saat=temp & 0x0f;    
   if(temp &0x40)			//12 saatmodunda mı 
   { 
      saatmodu=1; 
      saat10=(temp>>4) & 0x01; 
      pm=(temp>>5) &0x01;       
   } 
   else 
   { 
      saatmodu=0; 
      saat10=(temp>>4) & 0x03; 
   }       
  						 		//haftanın gününü oku 
   haftaningunu=i2c_GetByte(0); 
  						 		//gunu oku 
   temp=i2c_GetByte(0); 
   gun=temp &0x0f; 
   gun10=temp>>4; 
  						 		//ayi oku. 
   temp=i2c_GetByte(0); 
   ay=temp & 0x0f; 
   ay10=temp>>4; 
  						 		//yılı oku. 
   temp=i2c_GetByte(1); 
   yil=temp & 0x0f; 
   yil10=temp>>4; 
   i2c_Stop();
  
	Saat[6]=saniye10+'0'; 
	Saat[7]=saniye+'0';
	Saat[2]=':';
	Saat[3]=dakika10+'0';
	Saat[4]=dakika+'0';
	Saat[5]=':';
	Saat[1]=saat+'0';
	Saat[0]=saat10+'0';
	
	Tarih[0]=gun10+'0';
	Tarih[1]=gun+'0';
	Tarih[2]='/';
	Tarih[3]=ay10+'0';
	Tarih[4]=ay+'0';
	Tarih[5]='/';
	Tarih[6]='2';
	Tarih[7]='0';
	Tarih[8]=yil10+'0';
	Tarih[9]=yil+'0';
	Tarih[10]='\0';
  
}


ds1307.h
void saat_oku(unsigned char *saat);


İlk çalıştırma icin.

void ayarla(unsigned char _yil_,unsigned char _ay_,unsigned char _gun_,unsigned char _hafta_gun_,unsigned char _saat_,unsigned char _dakika_,unsigned char _saniye_) 
{ 
   
  _yil_=((_yil_/10)<<4)+(_yil_%10);
  _ay_=((_ay_/10)<<4)+(_ay_%10);
  _gun_=((_gun_/10)<<4)+(_gun_%10);
  _saat_=((_saat_/10)<<4)+(_saat_%10);
  _dakika_=((_dakika_/10)<<4)+(_dakika_%10);
  _saniye_=((_saniye_/10)<<4)+(_saniye_%10);


   i2c_Start(); 
   i2c_SendByte(0xd0);  //ds1307 adresi. yazma modunda. 
   i2c_SendByte(0x00);  //word adres. 
   i2c_SendByte(_saniye_);   
   i2c_SendByte(_dakika_); 
   i2c_SendByte(_saat_); 
   i2c_SendByte(_hafta_gun_); 
   i2c_SendByte(_gun_); 
   i2c_SendByte(_ay_); 
   i2c_SendByte(_yil_); 
   i2c_SendByte(0x10);    //control wordu yaz. 1hzlik kare dalga. 
   i2c_Stop();    
}   

Ornek kullanım.
ayarla(8,4,1,2,12,12,00);
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

satilla

hocam yanıtınız için teşekkür ederim