Cái này trên mạng đầy , do mấy u k chịu tìm hiểu và thử nghiệm code
Code:
void start(void)
{ SCL=0;SDA=1;SCL=1;SCL=1;
SDA=0;SCL=0;}
void stop(void)
{ SCL=0;SDA=0;SCL=1;SDA=1;}
bit write_data(unsigned char chr)
{ unsigned char temp,ack;
for(temp=0;temp<8;temp++)
{ SDA = (chr& 0x80) ? 1:0;
SCL=1;
SCL=0;
chr=chr<<1;
};
SDA=1;SCL=1;ack=SDA;
SCL=0;
return(ack);
}
unsigned char convertBCD(unsigned char _data)
{ unsigned char temp;
temp=(_data/10<<4)|(_data%10&0x0F);
return temp;
}
unsigned char read_data(void)
{ unsigned char temp1,temp2=0;
for(temp1=0;temp1<8;temp1++)
{ SCL=1;
temp2=temp2<<1;
temp2=temp2|((unsigned char)(SDA));
SCL=0;
};
return(temp2);
}
void write_RTC(unsigned char address, unsigned char _data)
{ bit status;
start();
write_data(0xD0);
write_data(address);
write_data(_data);
stop();
start();
status=write_data(0xD0);
while(status) //status = 1 (NACK)
{ start();
status=write_data(0xd0);
};
}
unsigned char read_RTC(unsigned char address)
{ unsigned char k;
start();
write_data(0xD0);
write_data(address);
start();
write_data(0xD1);
k=read_data();
stop();
return ((k>>4)*10+(k&0x0F));
}
void init_RTC()
{ write_RTC(0x07,0x10);
write_RTC(0x00,0x00); //0s
write_RTC(0x01,0x47); // phut : 47
write_RTC(0x02,0x13); // h : 13
write_RTC(0x04,0x26); // ngay : 26
write_RTC(0x05,0x06); // thang : 6
write_RTC(0x06,0x09); // nam : 2009
}
Đọc bài hướng dẫn chi tiết
http://svdanang.com/@pbk/showthread.php?t=29583