标题: 请问DS1302断电继续走的问题 [打印本页]

作者: 18228307769    时间: 2014-3-16 21:11
标题: 请问DS1302断电继续走的问题
我的程序能够正常运行,但加了电池断电后不能保存,我网上查了下改了初始化,改成了
                DS1302Write(0x8e,0x00);
                DS1302Write(0x90,0xA7);
                DS1302Write(0x8e,0x80);
                if(DS1302Read(0x81)&0x80)
                {       
                        DS1302Write(0x8c,time[0]);//Äê
                        DS1302Write(0x88,time[1]);//ÔÂ
                        DS1302Write(0x86,time[2]);//èÕ
                        DS1302Write(0x8A,--time[3]);//DÇÆú
                        DS1302Write(0x84,time[4]);//ê±
                        DS1302Write(0x82,time[5]);//·Ö
                        DS1302Write(0x80,time[6]);//
                }

这样,检测有电不初始化时间,但现在断电后时间是不用变回去了,但也没走,就停在了断电的时刻。请问是怎么回事

作者: admin    时间: 2014-3-16 21:36
http://www.51hei.com/bbs/dpj-4753-1.html
作者: xueyunmicheng    时间: 2014-8-6 11:33
本帖最后由 xueyunmicheng 于 2014-8-6 11:42 编辑

我是这样处理的  1302 里面不是有寄存器 完全掉电后 就丢失数据 备用电池有电 就不会丢 所以
步骤是

if(du(0xc1) != 0xaa)//读取数据 第一个寄存器中储存的数据 如果不是0xaa 则执行初始化
{
    xie(0x8E,0X00); //关闭写保护
    for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
        {
            xie(xie_add[n],time_data[n]); 用的循环 地址数组 初始时间数组
        }
    xie(0xc0,0xaa); //这个是重头戏  往寄存器中 写入0xaa数据 因为 有掉电丢失特点 所以进入初始化函数的时候首先判断的 这个寄存器是否还有数据
//有数据 就只会是这个 0xaa  那么初始化 不执行 要是 彻底断电后 1302 必须要初始化时间 所以 这个地方就是关键

}

作者: 周安松    时间: 2014-9-13 08:01
谢谢楼主分享
作者: shuiqinghan2012    时间: 2016-10-7 15:52
xueyunmicheng 发表于 2014-8-6 11:33
我是这样处理的  1302 里面不是有寄存器 完全掉电后 就丢失数据 备用电池有电 就不会丢 所以
步骤是

我试了你这种方式,大部分时候行,但有时候也会复位成初始值,不知道是不是有其他问题
作者: guobd    时间: 2016-10-8 20:52
shuiqinghan2012 发表于 2016-10-7 15:52
我试了你这种方式,大部分时候行,但有时候也会复位成初始值,不知道是不是有其他问题

电池接触有问题
作者: katuysha    时间: 2018-8-7 20:17
guobd 发表于 2016-10-8 20:52
电池接触有问题

电池没问题,断电一两秒可以继续,为什么断电几秒之后就不能继续断电前的时间了,还是会复位
作者: 红蔷薇小孩子    时间: 2019-5-14 12:18
DS1302要单独把它的vcc和gnd ,在断电时单独电池供电




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1