#include"ds1302.h"
#include"intrins.h"
u8 gwrite_rtc_addr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
u8 gread_rtc_addr[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
u8 gds1302_time[7]={0x59,0x37,0x15,0x19,0x03,0x06,0x21};
void ds1302_write_byte(u8 addr , u8 dat)
{
u8 i=0;
ds1302_rst=0;
_nop_();
ds1302_clk=0;
_nop_();
ds1302_rst=1;
_nop_();
for(i=0;i<8;i++)
{
ds1302_io=addr&0x01;
addr>>=1;
ds1302_clk=1;
_nop_();
ds1302_clk=0;
_nop_();
}
for(i=0;i<8;i++)
{
ds1302_io=dat&0x01;
dat>>=1;
ds1302_clk=1;
_nop_();
ds1302_clk=0;
_nop_();
}
ds1302_rst=0;
_nop_();
}
u8 ds1302_read_byte(u8 addr)
{
u8 i=0;
u8 temp=0;
u8 value=0;
ds1302_rst=0;
_nop_();
ds1302_clk=0;
_nop_();
ds1302_rst=1;
_nop_();
for(i=0;i<8;i++)
{
ds1302_io=addr&0x01;
addr>>=1;
ds1302_clk=1;
_nop_();
ds1302_clk=0;
_nop_();
}
for(i=0;i<8;i++)
{
temp=ds1302_io;
value=(temp<<7)|(value>>1);
ds1302_clk=1;
_nop_();
ds1302_clk=0;
_nop_();
}
ds1302_rst=0;
ds1302_clk=1;
_nop_();
ds1302_io=0;
_nop_();
ds1302_io=1;
_nop_();
return value;
}
void ds1302_init(void)
{
u8 i=0;
ds1302_write_byte(0x8e,0x00);
for(i=0;i<7;i++)
{
ds1302_write_byte(gwrite_rtc_addr[i],gds1302_time[i]);//addr dat
}
ds1302_write_byte(0x8e,0x80);
}
void ds1302_read_time(void)
{
u8 i=0;
for(i=0;i<7;i++)
{
gds1302_time[i]=ds1302_read_byte(gread_rtc_addr[i]);
}
}
评论0