1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

DS1302掉電不丟失時(shí)間單片機(jī)程序編寫問題

查看數(shù): 16173 | 評(píng)論數(shù): 19 | 收藏 3
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2017-9-2 20:51

正文摘要:

本帖最后由 jianwei2030 于 2017-9-3 21:12 編輯 自己做了一個(gè)萬年歷時(shí)鐘,利用STC15W408AS單片機(jī),時(shí)鐘芯片采用DS1302。當(dāng)前自己參考網(wǎng)上寫了時(shí)間讀取的程序,在實(shí)驗(yàn)板走時(shí)正常,但是斷電再上電后無法保存時(shí)間, ...

回復(fù)

ID:716109 發(fā)表于 2020-3-31 09:11
黑暗人才 發(fā)表于 2017-9-2 23:08
你可以修改一下你的初始化函數(shù),DS1302里面不是有好多空著的寄存器嘛,你可以先檢測(cè)某一個(gè)寄存器是否為0, ...

我是這樣檢測(cè)的,第一次上電后是我的初始化時(shí)間,但是第二次上電后時(shí)間從0開始,說明我的備用電源正常,應(yīng)為向存儲(chǔ)器寫的內(nèi)容沒有丟失,但是時(shí)間為啥不對(duì)呢,請(qǐng)問遇到過同類型的問題嗎,新手已被逼瘋。
ID:316880 發(fā)表于 2020-3-30 23:51
這個(gè)問題啊,時(shí)間初始化是程序的問題,要設(shè)置一下那個(gè)什么命令,不太記得了,我DS1302,都是直接調(diào)用程序,改一下IO口就可以用了,你找的程序不對(duì),你這個(gè)是程序初始化的時(shí)候把時(shí)間給初始化了。
ID:65297 發(fā)表于 2020-3-30 21:30
軟件你已經(jīng)寫好了,而且是可以正常使用的,現(xiàn)在最簡(jiǎn)單的方法就是用一個(gè)IO口來判斷是否需要初始化即可,
例如你的P55腳是空的,在初始化前面先判斷P55,是0的話初始化,是1就不初始化,你燒錄好程序,如果想要初始化就把P55接地再上電就會(huì)初始化了,不需要初始化時(shí)懸空即可,多簡(jiǎn)單啊
ID:47286 發(fā)表于 2020-3-30 20:48
不明白你說的不成都什么不成 也沒太看明白你要求什么 1302這東西 掉電就沒時(shí)間了 必須要重新寫入時(shí)間

往1302的RAM寫校驗(yàn)標(biāo)記是可以的 完全沒問題 我正在用 寫的是第一個(gè)地址 注意 因?yàn)?302是BCD格式寫入 如果你寫的值超過6位讀出來就只有6位 比如寫0xaa進(jìn)去出來是0x2a

如果你的板子沒設(shè)計(jì)后備電池 可以在供電線路上并聯(lián)一個(gè)電池 電池的正極串聯(lián)一個(gè)二極管 和后備電池意思一樣

如果是片子斷電后再上電 也不一定非要去讀1302 寫個(gè)預(yù)處理函數(shù) 在主循環(huán)的while之前執(zhí)行 只要是第一次上電 都先從1302讀時(shí)間到緩沖區(qū) 然后再到主循環(huán)里顯示 當(dāng)然 這樣做的前提是1302不能斷電 否則讀出來的肯定是錯(cuò)誤的時(shí)間 讀1302的RAM方法只是為了判斷是否執(zhí)行調(diào)表
ID:716109 發(fā)表于 2020-3-30 18:50
我以上方法都試了都不行
ID:420015 發(fā)表于 2019-3-26 20:44
我還看到過說1302的vcc2連接一個(gè)10000uF的電容,就可以斷電也能繼續(xù)計(jì)時(shí),說再加一個(gè)write1302_time(0x90,0xa6);就可以
這個(gè)說法是真的嗎?

為什么我的板是連了一個(gè)10 0000uF的電容,試了,失敗了,還是說一定要加一個(gè)3v的備用電池才能做到斷電繼續(xù)計(jì)時(shí)?
ID:362877 發(fā)表于 2018-7-2 09:41

DS1302掉電后內(nèi)部RAM的值不等于3,可以判斷后初始化時(shí)間,然后標(biāo)記為3即可。
ID:362877 發(fā)表于 2018-7-2 09:40
你們也太厲害了吧
ID:144936 發(fā)表于 2018-7-2 01:29
DS1302掉電后內(nèi)部RAM的值不等于3,可以判斷后初始化時(shí)間,然后標(biāo)記為3即可。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

ID:140489 發(fā)表于 2017-10-10 15:58
jianwei2030 發(fā)表于 2017-9-7 21:53
換過了,前后都是用達(dá)拉斯的芯片

換進(jìn)口的DS1302,同樣的程序,進(jìn)口的芯片可以,有些國(guó)產(chǎn)的芯片就是不行
ID:135636 發(fā)表于 2017-10-8 15:35
我修改了上電檢測(cè)部分的程序(如下),
思路是:上電后檢測(cè)RAM中存儲(chǔ)的數(shù)據(jù)十位是否為7,如果是則跳過初始化程序(什么也不執(zhí)行),如果不是則執(zhí)行初始化子程序
可是不管我怎么修改,修改后的時(shí)間就是無法保存,每次上電后依然是初始化的時(shí)間,要怒了。。。

void init_1302() //初始化函數(shù) 設(shè)置時(shí)間
{
                write1302_time(write_control_add,0x00);  //保護(hù)取消,可以進(jìn)行讀寫操作
                write1302_time(write_sec_add,0x30);//寫入初始秒時(shí)間 0101 0110
                write1302_time(write_min_add,0x05);//寫入初始分時(shí)間 0101 0110
                write1302_time(write_hr_add,0x21); //寫入初始時(shí)時(shí)間 0101 0110
                write1302_time(write_week_add,0x07); //寫入初始周時(shí)間 0101 0110
                write1302_time(write_month_add,0x09); //寫入初始月時(shí)間 0101 0110
                write1302_time(write_day_add,0x03); //寫入初始日時(shí)間 0101 0110
                write1302_time(write_year_add,0x17); //寫入初始年時(shí)間 0101 0110
                write1302_time(write_RAM0_add,0x17); //往RAM寄存器中寫入0xf0數(shù)據(jù),因?yàn)镽AM有掉電丟失特點(diǎn),所以進(jìn)入初始化函數(shù)的時(shí)候首先判斷這個(gè)寄存器是否還有數(shù)據(jù)
                write1302_time(write_charger_add,0xab);        //使能涓流充電,兩個(gè)二極管+8k電阻  1010 1011
                write1302_time(write_control_add,0x80);   //保護(hù)啟動(dòng),禁止對(duì)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);   //保護(hù)啟動(dòng),禁止對(duì)1302寫操作
        }
        else if((ram_data%10) != 7)
        {
                init_1302();
        }
}
ID:135636 發(fā)表于 2017-9-7 21:56
黑暗人才 發(fā)表于 2017-9-2 23:08
你可以修改一下你的初始化函數(shù),DS1302里面不是有好多空著的寄存器嘛,你可以先檢測(cè)某一個(gè)寄存器是否為0, ...

網(wǎng)上也是這么說的,我是檢測(cè)1302內(nèi)部的31字節(jié)的第一位,初始化時(shí)給這一位寫入一個(gè)數(shù)據(jù),再上電時(shí)讀取這一位是不是之前寫入的值,但是根據(jù)網(wǎng)上的程序修改沒有效果。
ID:135636 發(fā)表于 2017-9-7 21:53
mengx 發(fā)表于 2017-9-5 10:48
電路沒問題,不同公司的1302驅(qū)動(dòng)方法上可能存在不同,我也遇到過同樣的問題,換個(gè)1302就好了

換過了,前后都是用達(dá)拉斯的芯片
ID:158667 發(fā)表于 2017-9-5 10:48
電路沒問題,不同公司的1302驅(qū)動(dòng)方法上可能存在不同,我也遇到過同樣的問題,換個(gè)1302就好了
ID:99130 發(fā)表于 2017-9-4 22:49
屏蔽掉初始化
ID:135636 發(fā)表于 2017-9-3 20:14
cjjcjj1 發(fā)表于 2017-9-2 21:31
你好!
1、要想斷電時(shí)鐘繼續(xù)走時(shí),1302要加后備電池
2、斷電后,重啟,時(shí)鐘恢復(fù) 17年8月12日

后備電池是有加3V紐扣電池的;刪掉初始化函數(shù)后第一次上電就什么也不顯示了,我希望第一次上電時(shí)顯示一個(gè)初始時(shí)間,用戶在這個(gè)時(shí)間的基礎(chǔ)上再修改。
ID:135636 發(fā)表于 2017-9-3 20:09
黑暗人才 發(fā)表于 2017-9-2 23:08
你可以修改一下你的初始化函數(shù),DS1302里面不是有好多空著的寄存器嘛,你可以先檢測(cè)某一個(gè)寄存器是否為0, ...

網(wǎng)上的說法也是這樣做,初始化時(shí)在1302的ram中寫入一個(gè)數(shù)值,以后每次上電都檢測(cè)這個(gè)數(shù)值,如果檢測(cè)到就不執(zhí)行初始化程序,檢測(cè)不到就執(zhí)行初始化程序。但是我想知道怎么寫這個(gè)檢測(cè)程序。
ID:230544 發(fā)表于 2017-9-2 23:08
你可以修改一下你的初始化函數(shù),DS1302里面不是有好多空著的寄存器嘛,你可以先檢測(cè)某一個(gè)寄存器是否為0,為零就初始化,初始化完畢后給這個(gè)寄存器寫1,這樣就可以了

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

ID:82765 發(fā)表于 2017-9-2 21:31
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表