貌似每次重启前,要恢复的秒钟数目 都是固定的 为什么呢
程序如下:谢谢找错!!
#include"DS1302.h"
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>>4)*10)+value%16;
return value;
}
uchar Read_DS1302_ram(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 DS1302_TimeStop(bit flag) // 是否将时钟停止
{
volatile unsigned char Data;
Data=Read_DS1302(0x81);
Data=((Data/10)<<4|(Data%10));
write(0x8E,0x00);//关闭写保护
if(flag)
write(0x80, Data|0x80);
else
write(0x80, Data&0x7F);
write(0x8E,0x80);//关闭寄存器操作
}
void Init_DS1302()
{
DS1302_TimeStop(0);
if(Read_DS1302_ram(0xc1)!=0x02)
{
write(0x8E,0x00);//关闭写保护
write(0x84,0x12);//24小时
write(0x8C,0x14);//2014
write(0x88,0x03);//2
write(0x86,0x27);//2
write(0x8A,0x04);//星期
write(0x84,0x15);//十
write(0x82,0x09);//分
write(0x80,0x00);//秒 启动时钟
write(0xc0,0x02);
write(0x90,0xA5);
write(0x8E,0x80);//关闭寄存器操作
}
} |