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