找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

DS1302掉电不丢失时间单片机程序编写问题

查看数: 14888 | 评论数: 19 | 收藏 3
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-9-2 20:51

正文摘要:

本帖最后由 jianwei2030 于 2017-9-3 21:12 编辑 自己做了一个万年历时钟,利用STC15W408AS单片机,时钟芯片采用DS1302。当前自己参考网上写了时间读取的程序,在实验板走时正常,但是断电再上电后无法保存时间, ...

回复

ID:716109 发表于 2020-3-31 09:11
黑暗人才 发表于 2017-9-2 23:08
你可以修改一下你的初始化函数,DS1302里面不是有好多空着的寄存器嘛,你可以先检测某一个寄存器是否为0, ...

我是这样检测的,第一次上电后是我的初始化时间,但是第二次上电后时间从0开始,说明我的备用电源正常,应为向存储器写的内容没有丢失,但是时间为啥不对呢,请问遇到过同类型的问题吗,新手已被逼疯。
ID:316880 发表于 2020-3-30 23:51
这个问题啊,时间初始化是程序的问题,要设置一下那个什么命令,不太记得了,我DS1302,都是直接调用程序,改一下IO口就可以用了,你找的程序不对,你这个是程序初始化的时候把时间给初始化了。
ID:65297 发表于 2020-3-30 21:30
软件你已经写好了,而且是可以正常使用的,现在最简单的方法就是用一个IO口来判断是否需要初始化即可,
例如你的P55脚是空的,在初始化前面先判断P55,是0的话初始化,是1就不初始化,你烧录好程序,如果想要初始化就把P55接地再上电就会初始化了,不需要初始化时悬空即可,多简单啊
ID:47286 发表于 2020-3-30 20:48
不明白你说的不成都什么不成 也没太看明白你要求什么 1302这东西 掉电就没时间了 必须要重新写入时间

往1302的RAM写校验标记是可以的 完全没问题 我正在用 写的是第一个地址 注意 因为1302是BCD格式写入 如果你写的值超过6位读出来就只有6位 比如写0xaa进去出来是0x2a

如果你的板子没设计后备电池 可以在供电线路上并联一个电池 电池的正极串联一个二极管 和后备电池意思一样

如果是片子断电后再上电 也不一定非要去读1302 写个预处理函数 在主循环的while之前执行 只要是第一次上电 都先从1302读时间到缓冲区 然后再到主循环里显示 当然 这样做的前提是1302不能断电 否则读出来的肯定是错误的时间 读1302的RAM方法只是为了判断是否执行调表
ID:716109 发表于 2020-3-30 18:50
我以上方法都试了都不行
ID:420015 发表于 2019-3-26 20:44
我还看到过说1302的vcc2连接一个10000uF的电容,就可以断电也能继续计时,说再加一个write1302_time(0x90,0xa6);就可以
这个说法是真的吗?

为什么我的板是连了一个10 0000uF的电容,试了,失败了,还是说一定要加一个3v的备用电池才能做到断电继续计时?
ID:362877 发表于 2018-7-2 09:41

DS1302掉电后内部RAM的值不等于3,可以判断后初始化时间,然后标记为3即可。
ID:362877 发表于 2018-7-2 09:40
你们也太厉害了吧
ID:144936 发表于 2018-7-2 01:29
DS1302掉电后内部RAM的值不等于3,可以判断后初始化时间,然后标记为3即可。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

ID:140489 发表于 2017-10-10 15:58
jianwei2030 发表于 2017-9-7 21:53
换过了,前后都是用达拉斯的芯片

换进口的DS1302,同样的程序,进口的芯片可以,有些国产的芯片就是不行
ID:135636 发表于 2017-10-8 15:35
我修改了上电检测部分的程序(如下),
思路是:上电后检测RAM中存储的数据十位是否为7,如果是则跳过初始化程序(什么也不执行),如果不是则执行初始化子程序
可是不管我怎么修改,修改后的时间就是无法保存,每次上电后依然是初始化的时间,要怒了。。。

void init_1302() //初始化函数 设置时间
{
                write1302_time(write_control_add,0x00);  //保护取消,可以进行读写操作
                write1302_time(write_sec_add,0x30);//写入初始秒时间 0101 0110
                write1302_time(write_min_add,0x05);//写入初始分时间 0101 0110
                write1302_time(write_hr_add,0x21); //写入初始时时间 0101 0110
                write1302_time(write_week_add,0x07); //写入初始周时间 0101 0110
                write1302_time(write_month_add,0x09); //写入初始月时间 0101 0110
                write1302_time(write_day_add,0x03); //写入初始日时间 0101 0110
                write1302_time(write_year_add,0x17); //写入初始年时间 0101 0110
                write1302_time(write_RAM0_add,0x17); //往RAM寄存器中写入0xf0数据,因为RAM有掉电丢失特点,所以进入初始化函数的时候首先判断这个寄存器是否还有数据
                write1302_time(write_charger_add,0xab);        //使能涓流充电,两个二极管+8k电阻  1010 1011
                write1302_time(write_control_add,0x80);   //保护启动,禁止对1302写操作
}

void ram_flag()
{
        read_ram_data = read1302_time(read_RAM0_add);                
        ram_data = ((read_ram_data&0x70)>>4)*10+(read_ram_data&0x0f);
        if((ram_data%10) == 7)
        {
                write1302_time(write_control_add,0x80);   //保护启动,禁止对1302写操作
        }
        else if((ram_data%10) != 7)
        {
                init_1302();
        }
}
ID:135636 发表于 2017-9-7 21:56
黑暗人才 发表于 2017-9-2 23:08
你可以修改一下你的初始化函数,DS1302里面不是有好多空着的寄存器嘛,你可以先检测某一个寄存器是否为0, ...

网上也是这么说的,我是检测1302内部的31字节的第一位,初始化时给这一位写入一个数据,再上电时读取这一位是不是之前写入的值,但是根据网上的程序修改没有效果。
ID:135636 发表于 2017-9-7 21:53
mengx 发表于 2017-9-5 10:48
电路没问题,不同公司的1302驱动方法上可能存在不同,我也遇到过同样的问题,换个1302就好了

换过了,前后都是用达拉斯的芯片
ID:158667 发表于 2017-9-5 10:48
电路没问题,不同公司的1302驱动方法上可能存在不同,我也遇到过同样的问题,换个1302就好了
ID:99130 发表于 2017-9-4 22:49
屏蔽掉初始化
ID:135636 发表于 2017-9-3 20:14
cjjcjj1 发表于 2017-9-2 21:31
你好!
1、要想断电时钟继续走时,1302要加后备电池
2、断电后,重启,时钟恢复 17年8月12日

后备电池是有加3V纽扣电池的;删掉初始化函数后第一次上电就什么也不显示了,我希望第一次上电时显示一个初始时间,用户在这个时间的基础上再修改。
ID:135636 发表于 2017-9-3 20:09
黑暗人才 发表于 2017-9-2 23:08
你可以修改一下你的初始化函数,DS1302里面不是有好多空着的寄存器嘛,你可以先检测某一个寄存器是否为0, ...

网上的说法也是这样做,初始化时在1302的ram中写入一个数值,以后每次上电都检测这个数值,如果检测到就不执行初始化程序,检测不到就执行初始化程序。但是我想知道怎么写这个检测程序。
ID:230544 发表于 2017-9-2 23:08
你可以修改一下你的初始化函数,DS1302里面不是有好多空着的寄存器嘛,你可以先检测某一个寄存器是否为0,为零就初始化,初始化完毕后给这个寄存器写1,这样就可以了

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

ID:82765 发表于 2017-9-2 21:31
提示: 作者被禁止或删除 内容自动屏蔽

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表