1 、 DS1302****的特點
DS1302是DALLAS公司推出的涓流充電時鐘芯片,內含一個實時時鐘/日歷和31字節靜態RAM,可以通過串行接口與單片機進行通信。實時時鐘/日歷電路提供秒、分、時、日、星期、月、年的信息,每個月的天數和閏年的天數可自動調整,時鐘操作可通過AM/PM標志位決定采用24或12小時時間格式。
通俗的說,DS1302是時鐘芯片,那它就有計時的作用。它和我們日常接觸的電子表差不多,可以對年月日、時分秒、星期計時。我們可以用單片機往DS1302里面寫入時間進行時間設置,也可以用單片機從DS1302中讀取時間,讀出來的時間數據我們顯示出來,這樣我們就可以實現了電子時鐘的功能。
2 、DS1302的封裝
DS1302有兩種封裝,一種是DIP8的雙列直插式,一種是SOP8貼片式。根據封裝的名字我就知道這芯片有8個引腳,引腳分布如圖1:
3 、DS1302引腳功能
1-VCC2,主電源引腳,,當Vcc2比Vcc1高0.2V以上時,DS1302由VCC2供電,當Vcc2低于Vcc1時,由Vcc1供電。
2、3-X1、X2,這兩個引腳需要接一個32.768K的晶振,給DS1302提供一個基準。特別注意,要求這個晶振的引腳負載電容必須是6pF,而不是要加6pF的電容。如果使用有源晶振的話,接到X1上即可,X2懸空。
4-GND,電源地。
5-CE(注1:有些資料里寫的是RST),DS1302的復位引腳。當讀寫DS1302的時候,這個引腳必須是高電平,低電平表示不讓芯片工作。
6-I/O,DS1302的數據輸入輸出口,這個引腳是一個雙向通信引腳,讀寫數據都是通過這個引腳完成。
7-SCLK,串行時鐘信號,用來作為通信的時鐘信號。
8-VCC1,備用電源引腳。
DS1302的電路一個重點就是時鐘電路,它所使用的晶振是一個32.768k的晶振,晶振外部也不需要額外添加其他的電容或者電阻電路,只需要晶振的引腳的負載電容為6pF。時鐘的精度,首先取決于晶振的精度以及晶振的引腳負載電容。如果晶振不準或者負載電容過大過小,都會導致時鐘誤差過大。在這一切都搞定后,最終一個考慮因素是晶振的溫漂。隨著溫度的變化,晶振往往精度會發生變化,因此,在實際的系統中,其中一種方法就是經常校對。
4 、寄存器簡介
DS1302的寄存器(讀時81h~8Dh,寫時80h~8Ch)是存放秒、分,小時、日、月、年、周數據的,存放的數據格式為BCD碼形式。它的內部時間寄存器如下表:
上表是DS1302內部的7個與時間、日期有關的寄存器圖和一個寫保護寄存器,我們要做的就是將初始設置的時間、日期數據寫入這幾個寄存器,然后再不斷地讀取這幾個寄存器來獲取實時時間和日期?,F對這幾個寄存器的說明如下:
①、秒寄存器(81h、80h)的位7定義為時鐘暫停標志(CH)。當初始上電時該位置為1,時鐘振蕩器停止,DS1302處于低功耗狀態;只有將秒寄存器的該位置改寫為0時,時鐘才能開始運行,一般我們在用的時候是在設置時間完成后吧秒寄存器寫入0,這樣就啟動了芯片的計時功能。
②、小時寄存器(85h、84h)的位7定義為DS1302是運行于12小時模式還是24小時模式。當為1時,選擇12小時模式,為0時選擇24小時模式。在12小時模式時,位5是標志位 ,為0時表示AM,為1時表示PM。在24小時模式時,位5是第二個10小時位。
③、控制寄存器(8Fh、8Eh)的位7是寫保護位(WP),其它7位均置為0。在任何的時候對時鐘和RAM的寫操作之前,WP位必須為0。當WP位為1時,寫保護位防止對任一寄存器的寫操作。也就是說在電路上電的初始態WP是1,這時是不能改寫上面任何一個時間寄存器的,只有首先將WP改寫為0,才能進行其它寄存器的寫操作。
其余的寄存器沒有什么特殊的說明。對于DS1302芯片還有一個控制字,該控制字控制這芯片的讀寫操作。具體的內容如下:
如上表所示,位0就是讀寫位,當位0為1時,就是告訴DS1302,下面是進行讀出操作,而當位0為0時就是寫入操作。
位0-位5是要進行操作的DS1302寄存器地址。
位6就是告訴DS1302,是要對RAM進行操作還是對時間寄存器進行操作,0就是對時間寄存器操作,一般我們都是對時間寄存器進行操作。
位7就是固定的1。
現在就知道為什么控制字80H是寫秒寄存器,而81H是讀秒寄存器了吧。80H換成二進制就是10000000。而81H的二進制就是10000001,一個是寫操作,另一個是讀操作嘛!
現在,我們來總結下如何對DS1302操作:
1 )首先要通過8eH將寫保護去掉,這樣我們才能將日期,時間的初值寫時各個寄存器。
2 )然后就可以對80H、82H、84H、86H、88H、8AH、8CH進行初值的寫入。同時也通過秒寄存器將位7的CH值改成0,這樣DS1302就開始走時運行了。
3 )將寫保護寄存器再寫為80H,防止誤改寫寄存器的值。
4)不斷讀取80H-8CH的值,將他們轉化為十進制后顯示出來就可以啦,之前我們說過,DS1302讀出的數據是BCD碼,所以需要轉換一下。
5 、讀寫時序
上面說到的寄存器,控制字。最終都是需要單片機控制DS1302的引進寫進或讀出芯片的。那現在就說說這讀寫的時序問題。
物理上,DS1302的通訊接口由3個口線組成,即CE(有些資料寫為RST),SCLK,I/O。其中CE(RST)從低電平變成高電平啟動一次數據傳輸過程,SCLK是時鐘線,I/O是數據線。具體的讀寫時序參考下圖,但是請注意,無論是哪種同步通訊類型的串行接口,都是對時鐘信號敏感的,而且一般數據寫入有效是在上升沿,讀出有效是在下降沿(DS1302正是如此的,但是在芯片手冊里沒有明確說明),如果不是特別確定,則把程序設計成這樣:平時SCLK保持低電平,在時鐘變動前設置數據,在時鐘變動后讀取數據,即數據操作總是在SCLK保持為低電平的時候,相鄰的操作之間間隔有一個上升沿和一個下降沿。
DS1302****的數據讀寫是通過I/O串行進行的。當進行一次讀寫操作時最少得讀寫兩個字節,第一個字節是控制字節,就是一個命令,告訴DS1302是讀還是寫操作,是對RAM還是對CLOK寄存器操作,以及操作的地址。第二個字節就是要讀或寫的數據了。
我們先看單字節寫:在進行操作之前先得將CE(也可說是RST)置高電平,然后單片機將控制字的位0放到I/O上,當I/O的數據穩定后,將SCLK置高電平,DS1302檢測到SCLK的上升沿后就將I/O上的數據讀取,然后單片機將SCLK置為低電平,再將控制字的位1放到I/O上,如此反復,將一個字節控制字的8個位傳給DS1302。接下來就是傳一個字節的數據給DS1302,當傳完數據后,單片機將CE置為低電平,操作結束。
單字節讀操作的一開始寫控制字的過程和上面的單字節寫操作是一樣,但是單字節讀操作在寫控制字的最后一個位,SCLK還在高電平時,DS1302就將數據放到I/O上,單片機將SCLK置為低電平后數據鎖存,單機機就可以讀取I/O上的數據。如此反復,將一個字節的數據讀入單片機。讀與寫操作的不同就在于,寫操作是在SCLK低電平時單片機將數據放到IO上,當SCLK上升沿時,DS1302讀取。而讀操作是在SCLK高電平時DS1302放數據到IO上,將SCLK置為低電平后,單片機就可從IO上讀取數據。
在單字節讀操作時,在寫控制字的最后一個位也就是位7時,DS1302已將它的寄存器數據位0放到IO上了,要是控制字的位7是0的話,DS1302就無法將它的隨后的數據放到IO上了,所以控制字的7位為固定的1,原因在這里哦。
6 、典型運用電路
-
單片機
+關注
關注
6037文章
44561瀏覽量
635602 -
時鐘芯片
+關注
關注
2文章
249瀏覽量
39889 -
DS1302
+關注
關注
8文章
449瀏覽量
50704 -
RST
+關注
關注
0文章
31瀏覽量
7400 -
負載電容
+關注
關注
0文章
140瀏覽量
10443
發布評論請先 登錄
相關推薦
評論