程序如下:
#include"DS1302.h"
unsigned char date[7]={0x14,0x03,0x21,0x03,0x18,0x02,0x00};//年月日 周 时分秒 14-3-21 3 18:02:00
unsigned char write_rtc_address[7]={0x8C,0x88,0x86,0x8A,0x84,0x82,0x80};
void write(uchar com,uchar value)
{
uchar i=0;
res=0;
clk=0;
res=1;
nop();
for(i=0;i<8;i++)
{
io=com&0x01;
clk=0;
clk=1;
com>>=1;
}
for(i=0;i<8;i++)
{
io=value&0x01;;
clk=0;
clk=1;
value>>=1;
}
res=0;
nop();
}
uchar Read_DS1302(uchar com)
{
uchar i=0;
uchar value=0;
res=0;
clk=0;
res=1;
for(i=0;i<8;i++)
{
io=com&0x01;
clk=0;
clk=1;
com>>=1;
}
for(i=0;i<8;i++)
{
clk=1;
clk=0;
if(io)
{
value|=0x01<<i;
}
}
res=0;
_nop_(); //以下为DS1302复位的稳定时间 这这这这这 就是这里
_nop_();
res=0;
clk=0;
_nop_();
_nop_();
_nop_();
_nop_();
clk=1;
_nop_();
_nop_();
io=0;
_nop_();
_nop_();
io=1;
_nop_();
_nop_();//就是这一段
value=(value/16*10)+value%16;
return value;
}
void Init_DS1302()
{
unsigned char i,*p;
p=write_rtc_address;
write(0x8E,0x00);//关闭写保护
write(0x84,0x00);//24小时
for(i=0;i<7;i++)
{
write(*p,date);
p++;
}
write(0x90,0xA5);
write(0x8E,0x80);//关闭寄存器操作
} |