void ds1302_close()
{
DS1302_RST=0;
DS1302_SCLK=0;
}
/********
void ds1302_twbyte(uchar c)
{
uchar i;
for(i=0;i<8;i++)
{
DS1302_IO=(bit)(c & 0x01);
c=c>>1;
DS1302_SCLK=0;
DS1302_SCLK=1;
}
}
*************/
void ds1302_twbyte(uchar c)
{
uchar i;
for(i=0;i<8;i++)
{
DS1302_IO=0;
if(c & 0x01 !=0) DS1302_IO=1;
c=c >>1;
DS1302_SCLK=0;
DS1302_SCLK=1;
}
}
uchar ds1302_trbyte()
{
uchar i,ret;
DS1302_IO=1;
ret=0;
for(i=0;i<8;i++)
{
DS1302_SCLK=0;
ret=ret>>1;
if(DS1302_IO==1) ret=ret | 0x80;
DS1302_SCLK=1;
}
return ret;
}
void ds1302_init()
{
ds1302_close();
ds1302_open();
ds1302_twbyte(0xbe); /* write all */
rtc.second=rtc.second &0x7f;
ds1302_twbyte(rtc.second);
ds1302_twbyte(rtc.minute);
ds1302_twbyte(rtc.hour);
ds1302_twbyte(rtc.date);
ds1302_twbyte(rtc.month);
ds1302_twbyte(rtc.week);
ds1302_twbyte(rtc.year);
ds1302_twbyte(0x00); /* control */
ds1302_twbyte(0xa5); /* charge mode */
ds1302_close();
}
void read_rtc()
{
ds1302_close();
ds1302_open();
ds1302_twbyte(0xbf);
rtc.second=ds1302_trbyte();
rtc.minute=ds1302_trbyte();
rtc.hour=ds1302_trbyte();
rtc.date=ds1302_trbyte();
rtc.month=ds1302_trbyte();
rtc.week=ds1302_trbyte();
rtc.year=ds1302_trbyte();
ds1302_close();
}
void write_rtc()
{
ds1302_close();
ds1302_open();
ds1302_twbyte(0xbe); /* write all */
ds1302_twbyte(rtc.second);
ds1302_twbyte(rtc.minute);
ds1302_twbyte(rtc.hour);
ds1302_twbyte(rtc.date);
ds1302_twbyte(rtc.month);
ds1302_twbyte(rtc.week);
ds1302_twbyte(rtc.year);
ds1302_close();
}
uchar get_ds1302_ram(uchar address_ds1302) /*地址范围: 00--30 */
{
uchar c;
address_ds1302=address_ds1302<<1;
address_ds1302=address_ds1302 | 0x0c1;
ds1302_open();
ds1302_twbyte(address_ds1302);
c=ds1302_trbyte();
ds1302_close();
return c;
}
void put_ds1302_ram(uchar address_ds1302, uchar value) /*地址范围: 00--30 */
{
address_ds1302=address_ds1302<<1;
address_ds1302=address_ds1302 | 0x0c0;
ds1302_open();
ds1302_twbyte(address_ds1302);
ds1302_twbyte(value);
ds1302_close();
}