DS1302的工作原理
DS1302工作時(shí)為了對(duì)任何數(shù)據(jù)傳送進(jìn)行初始化,需要將復(fù)位腳(RST)置為高電平且將8位地址和命令信息裝入移位寄存器。數(shù)據(jù)在時(shí)鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時(shí)鐘周期,讀操作時(shí)輸出數(shù)據(jù),寫操作時(shí)輸出數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8(8位地址+8位數(shù)據(jù)),在多字節(jié)方式下為8加最多可達(dá)248的數(shù)據(jù)。
DS1302的寄存器和控制命令
對(duì)DS1302的操作就是對(duì)其內(nèi)部寄存器的操作,DS1302內(nèi)部共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器以外的寄存器。日歷、時(shí)間寄存器及控制字如表1所示:
表1:日歷、時(shí)鐘寄存器與控制字對(duì)照表
日表2:DS14302內(nèi)部主要寄存器分布表
DS1302內(nèi)部的RAM分為兩類,一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元為一個(gè)8位的字節(jié),其命令控制字為COH~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。
我們現(xiàn)在已經(jīng)知道了控制寄存器和RAM的邏輯地址,接著就需要知道如何通過(guò)外部接口來(lái)訪問這些資源。單片機(jī)是通過(guò)簡(jiǎn)單的同步串行通訊與DS1302通訊的,每次通訊都必須由單片機(jī)發(fā)起,無(wú)論是讀還是寫操作,單片機(jī)都必須先向DS1302寫入一個(gè)命令幀,這個(gè)幀的格式如表1所示,最高位BIT7固定為1,BIT6決定操作是針對(duì)RAM還是時(shí)鐘寄存器,接著的5個(gè)BIT是RAM或時(shí)鐘寄存器在DS1302的內(nèi)部地址,最后一個(gè)BIT表示這次操作是讀操作抑或是寫操作。
物理上,DS1302的通訊接口由3個(gè)口線組成,即RST,SCLK,I/O。其中RST從低電平變成高電平啟動(dòng)一次數(shù)據(jù)傳輸過(guò)程,SCLK是時(shí)鐘線,I/O是數(shù)據(jù)線。具體的讀寫時(shí)序參考圖5,但是請(qǐng)注意,無(wú)論是哪種同步通訊類型的串行接口,都是對(duì)時(shí)鐘信號(hào)敏感的,而且一般數(shù)據(jù)寫入有效是在上升沿,讀出有效是在下降沿(DS1302正是如此的,但是在芯片手冊(cè)里沒有明確說(shuō)明),如果不是特別確定,則把程序設(shè)計(jì)成這樣:平時(shí)SCLK保持低電平,在時(shí)鐘變動(dòng)前設(shè)置數(shù)據(jù),在時(shí)鐘變動(dòng)后讀取數(shù)據(jù),即數(shù)據(jù)操作總是在SCLK保持為低電平的時(shí)候,相鄰的操作之間間隔有一個(gè)上升沿和一個(gè)下降沿。
圖5 DS1302的命令字結(jié)構(gòu)