找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13441|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

10分鐘理解DS1302時(shí)鐘模塊

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1. 思路分析


講解DS1302模塊之前先來看看我們平時(shí)使用的電子表或者手機(jī)。主要涉及兩個(gè)方面,如下圖所示。第一個(gè)就是查看時(shí)間和日期,比如2014年11月15日09時(shí)00分50秒星期六,等等。另外一個(gè)方面就是設(shè)置或者調(diào)整時(shí)間/日期信息。




圖1 時(shí)鐘信息示意圖


同樣的道理,對于DS1302模塊,我們也是從這兩個(gè)方面來類比分析的。第一個(gè),查看日期時(shí)間,既然是“查看”也就是從DS1302“獲取”信息,那么與‘讀’ DS1302相關(guān)。第二個(gè),設(shè)置日期時(shí)間,既然是“設(shè)置”也就是向DS1302“輸入”信息,那么就是與 ‘寫’ DS1302相關(guān)了,或者說修改它的相關(guān)信息。好了,分析到這里,根據(jù)以前講過的內(nèi)容,你應(yīng)該可以猜到它的大概設(shè)計(jì)模樣了。既然是‘讀’和‘寫’ DS1302,那么緊跟著的問題就是,怎么讀,從哪里‘讀‘,怎么“寫”,往哪里“寫”?前面講過,對于機(jī)器只有0和1,那么很明顯需要把年月日時(shí)間等轉(zhuǎn)成用0和1來表示。根據(jù)前面的經(jīng)驗(yàn)通常以一個(gè)字節(jié)為單位,F(xiàn)在我們把年月日時(shí)分秒星期拆成幾個(gè)部分。比如‘秒’,我們就用一個(gè)字節(jié)來表示,‘分’也用一個(gè)字節(jié)來表示,依此類推,這樣‘秒-分-時(shí)-日-月-年’一共需要6個(gè)字節(jié),另外加一個(gè)‘星期’,一共7個(gè)字節(jié)來表示,同時(shí)給它們排序。比如地址0的字節(jié)表示‘秒’,地址1的字節(jié)表示’分‘,等等。如下表1所示,注意這個(gè)表格只是我們自己的猜測。




表1 時(shí)鐘信息存儲(chǔ)分布猜測


這樣就好理解了,當(dāng)我們需要設(shè)置時(shí)間和日期時(shí),就是往這7個(gè)字節(jié)寫入信息,當(dāng)需要查看時(shí)間和日期時(shí),就是去讀取這7個(gè)字節(jié)內(nèi)容即可。如果理解了這個(gè),那么對DS1302的整個(gè)分析思路也就清晰了,下面我們就按照這個(gè)思路看看具體的操作步驟。


2. 操作步驟分析


這里以"寫"為例,簡單描述這個(gè)過程,"讀"的過程與"寫"類似。


(1) 如何確定地址

既然是寫,首先要告訴1302寫到哪一個(gè)地址,思考過程與LCD1602類似,那么就給DS1302發(fā)送一個(gè)地址命令(CMD)。前面說過,機(jī)器之間的溝通通常是以字節(jié)也就是8位為基本單元的,那么就用"0000 0000"來表示1302地址0的字節(jié),用"0000 0001"來表示1302地址1的字節(jié),依此類推。前面做了個(gè)猜想,DS1302一共才7個(gè)字節(jié)(表格1所示),用8個(gè)bit來確定,太浪費(fèi)了。那么就改進(jìn)一下,如何改進(jìn)呢?我們用這個(gè)地址命令CMD的bit1~bit5來確定這7個(gè)字節(jié),比如當(dāng)bit1~bit5取00000的時(shí)候就表示DS1302地址0的字節(jié),取00001的時(shí)候就表示DS1302地址1的字節(jié),依此類推。那么地址命令CMD的bit0,bit6和bit7如何處理?這個(gè)bit7也就是最高位固定為1,bit6用來設(shè)置選擇CK(時(shí)鐘)還是RAM。那么還剩下最后一位bit0如何處理?

(2) 如何確定"寫"還是"讀"

通過上面的分析已經(jīng)知道了單片機(jī)如何告訴1302"寫"的地址。注意,這里只是確定了"地址",DS1302仍然不知道你對這個(gè)地址是要"讀"還是"寫"。這樣地址命令CMD的最低位還沒有處理,剛好拿來用作"寫"和"讀"的確定。比如當(dāng)CMD的bit0取0的時(shí)候就表示"寫", 取1的時(shí)候就表示"讀"。這樣CMD里面既有地址信息,又有命令信息,所以叫做地址命令字節(jié)。

現(xiàn)在我們來舉個(gè)例子,假如往表格1中的地址0寫入數(shù)據(jù)(實(shí)際上就是設(shè)置秒鐘),那么CMD的bit1~bit5就取00000,最低位bit0確定"讀"還是"寫",很明顯也取"0"。最高位bit7固定為1。剩下bit6用來選擇寫RAM還是CK,我們要寫時(shí)鐘相關(guān)的信息,很明顯取0,這樣CMD就是1000 0000(0x80). 如果你要"讀"地址0的數(shù)據(jù)(實(shí)際上就是查看秒鐘)呢?只需要把CMD的bit0修改為1就可以了。那么CMD就為1000 0001(0x81).


(3) 確定寫入的數(shù)據(jù)


"讀"還是"寫"確定了,地址也確定了,之后再發(fā)送一個(gè)字節(jié)的數(shù)據(jù),這個(gè)數(shù)據(jù)與秒鐘是如何對應(yīng)的,就去翻一翻芯片手冊了,這個(gè)比較好理解。

3. 突發(fā)模式(Burst Mode)分析


以上操作過程如果正確,就能顯示和設(shè)置時(shí)間了。但是這里面實(shí)際上還有個(gè)BUG,舉個(gè)例子來說明一下。假如你要記錄一個(gè)人跑步的圖像,第一次觀察到他的左腿在前,第二次觀察到他的右腿在前,如果你把這兩次信息結(jié)合起來一定會(huì)得出錯(cuò)誤的結(jié)論,就是兩條腿都在前面,這不是"跑"這是"跳"。 錯(cuò)誤的原因是"跑"是一個(gè)動(dòng)態(tài)的過程。同樣的道理,假設(shè)現(xiàn)在時(shí)間為00分59秒,你先讀"秒",記錄為59秒,然后讀"分"。注意這也是一個(gè)動(dòng)態(tài)的過程,此時(shí)00分可能變成01分了,這樣你讀到就是01分,然后把這兩次讀的結(jié)果結(jié)合起來就是01分59秒。很明顯是不對的,那么如何處理呢?對于"跑",處理過程很簡單,"拍照"就行了,拍完照片然后去觀察照片就不會(huì)出錯(cuò)了,因?yàn)檎掌?quot;靜止"的。對于DS1302也用同樣"拍照"的處理方法,把"時(shí)"分"""秒"等信息"照"下來,然后去讀這張"靜止"的照片就不會(huì)出錯(cuò)了。拍照是一個(gè)比較平民化的詞匯,為了體現(xiàn)這個(gè)行業(yè)的專業(yè)性,換一個(gè)比較難懂的詞匯顯得更高深,叫Burst Mode-突發(fā)模式,實(shí)際上就是拍照或者說我們平時(shí)用的截屏。


綜合來看,不論是LCD1602,OLED 還是DS18B20,如果仔細(xì)去分析的話,它們還是有很多內(nèi)在共同點(diǎn)的。


上一篇:


10分鐘理解LCD1602液晶顯示模塊
10分鐘理解LCD1602如何顯示自定義字符
10分鐘理解OLED顯示模塊
10分鐘理解DS18B20數(shù)字溫度計(jì)模塊


所有參考代碼工具視頻下載百度網(wǎng)盤鏈接:


百度云盤鏈接地址-51HEI分享.rar (180 Bytes, 下載次數(shù): 107)



評分

參與人數(shù) 2黑幣 +15 收起 理由
dingqinhong + 5 很給力!
zkele + 10 贊一個(gè)!謝謝分享

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:183763 發(fā)表于 2018-4-24 20:16 | 只看該作者
學(xué)習(xí)了,精彩的文章
回復(fù)

使用道具 舉報(bào)

板凳
ID:64913 發(fā)表于 2018-4-27 00:16 | 只看該作者
人才,我得好好學(xué)習(xí)學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

地板
ID:395964 發(fā)表于 2018-9-11 09:41 來自手機(jī) | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

5#
ID:388099 發(fā)表于 2018-9-11 13:43 | 只看該作者
鏈接失效了。
回復(fù)

使用道具 舉報(bào)

6#
ID:378310 發(fā)表于 2018-9-11 14:44 | 只看該作者
大家都好厲害呀。
回復(fù)

使用道具 舉報(bào)

7#
ID:110903 發(fā)表于 2018-9-11 15:37 | 只看該作者
精彩的文章,值得一看
回復(fù)

使用道具 舉報(bào)

8#
ID:91165 發(fā)表于 2018-9-18 11:07 | 只看該作者
下載了分享的連接不能用啊,黑幣浪費(fèi)了
回復(fù)

使用道具 舉報(bào)

9#
ID:599561 發(fā)表于 2021-2-26 00:53 | 只看該作者
精彩的文章,好厲害呀值得一看
回復(fù)

使用道具 舉報(bào)

10#
ID:670025 發(fā)表于 2021-3-31 10:17 | 只看該作者
很有用的答案,對DS1302時(shí)鐘模塊解釋的很到位,很清晰。
回復(fù)

使用道具 舉報(bào)

11#
ID:670025 發(fā)表于 2021-3-31 10:18 | 只看該作者
很有用的答案,對DS1302時(shí)鐘模塊的解釋很到位,很清晰。
回復(fù)

使用道具 舉報(bào)

12#
ID:900518 發(fā)表于 2021-4-17 10:29 | 只看該作者
文章很詳細(xì)啊  謝謝了  好好學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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