時鍾IC DS1302的基礎知識
本文來源:21IC中國電子網
在網上看了很久,發現初學者最有興(xing) 趣的就是DS1302時鍾電路,也很自然,它是個(ge) 做出來就讓你覺得最實用的電路了,但實際上製做上並不簡單,首先你要讓你的顯示部分(不管是數碼管還是LCD)調試通過。然後把DS1302接好,調試正確了才能在成功顯示時間和日期。下麵我們(men) 就來說說DS1302的用法。
DS1302的圖如下:
DS1302是一種高性能、低功耗的實時時鍾芯片,附加31字節靜態RAM,采用SPI三線接口與(yu) CPU進行同步通信,並可采用突發方式一次傳(chuan) 送多個(ge) 字節的時鍾信號和RAM數據。實時時鍾可提供秒、分、時、日、星期、月和年,一個(ge) 月小與(yu) 31天時可以自動調整,且具有閏年補償(chang) 功能。工作電壓寬達2.5~5.5V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對後背電源進行涓細電流充電的能力。
下麵是標準的接線電路圖:
各引腳功能如下:
DS1302有關(guan) 日曆、時間的寄存器共有12個(ge) ,其中有7個(ge) 寄存器(讀時81h~8Dh,寫(xie) 時80h~8Ch)是存放秒、分,小時、日、月、年、周數據的,存放的數據格式為(wei) BCD碼形式
它的內(nei) 部時間寄存器如下:
這張表是DS1302內(nei) 部的7個(ge) 與(yu) 時間、日期有關(guan) 的寄存器圖和一個(ge) 寫(xie) 保護寄存器,我們(men) 要做的就是將初始設置的時間、日期數據寫(xie) 入這幾個(ge) 寄存器,然後再不斷地讀取這幾個(ge) 寄存器來獲取實時時間和日期。這幾個(ge) 寄存器的說明如下:
1、秒寄存器(81h、80h)的位7定義(yi) 為(wei) 時鍾暫停標誌(CH)。當初始上電時該位置為(wei) 1,時鍾振蕩器停止,DS1302處於(yu) 低功耗狀態;隻有將秒寄存器的該位置改寫(xie) 為(wei) 0時,時鍾才能開始運行。
2、小時寄存器(85h、84h)的位7用於(yu) 定義(yi) DS1302是運行於(yu) 12小時模式還是24小時模式。當為(wei) 高時,選擇12小時模式。在12小時模式時,位5是 ,當為(wei) 1時,表示PM。在24小時模式時,位5是第二個(ge) 10小時位
3、控製寄存器(8Fh、8Eh)的位7是寫(xie) 保護位(WP),其它7位均置為(wei) 0。在任何的對時鍾和RAM的寫(xie) 操作之前,WP位必須為(wei) 0。當WP位為(wei) 1時,寫(xie) 保護位防止對任一寄存器的寫(xie) 操作。也就是說在電路上電的初始態WP是1,這時是不能改寫(xie) 上麵任何一個(ge) 時間寄存器的,隻有首先將WP改寫(xie) 為(wei) 0,才能進行其它寄存器的寫(xie) 操作。
下麵來說說如果對DS1302進行讀寫(xie) :
上麵的電路圖可以看出,除了電源和接地,DS1302隻有三根線和單片機連接,SCLK、I/O和RST(有的也寫(xie) 成CE),先看時序圖:
DS1302的數據讀寫(xie) 是通過I/O串行進行的。當進行一次讀寫(xie) 操作時最少得讀寫(xie) 兩(liang) 個(ge) 字節,第一個(ge) 字節是控製字節,就是一個(ge) 命令,告訴DS1302是讀還是寫(xie) 操作,是對RAM還是對CLOK寄存器操作,以及操作的地址。第二個(ge) 字節就是要讀或寫(xie) 的數據了。
我們(men) 先看單字節寫(xie) :在進行操作之前先得將CE(也可說是RST)置高電平,然後單片機將控製字的位0放到I/O上,當I/O的數據穩定後,將SCLK置高電平,DS1302檢測到SCLK的上升沿後就將I/O上的數據讀取,然後單片機將SCLK置為(wei) 低電平,再將控製字的位1放到I/O上,如此反複,將一個(ge) 字節控製字的8個(ge) 位傳(chuan) 給DS1302。接下來就是傳(chuan) 一個(ge) 字節的數據給DS1302,當傳(chuan) 完數據後,單片機將CE置為(wei) 低電平,操作結束。
單字節讀操作的一開始寫(xie) 控製字的過程和上麵的單字節寫(xie) 操作是一樣,但是單字節讀操作在寫(xie) 控製字的最後一個(ge) 位,SCLK還在高電平時,DS1302就將數據放到I/O上,單片機將SCLK置為(wei) 低電平後數據鎖存,單機機就可以讀取I/O上的數據。如此反複,將一個(ge) 字節的數據讀入單片機。讀與(yu) 寫(xie) 操作的不同就在於(yu) ,寫(xie) 操作是在SCLK低電平時單片機將數據放到IO上,當SCLK上升沿時,DS1302讀取。而讀操作是在SCLK高電平時DS1302放數據到IO上,將SCLK置為(wei) 低電平後,單片機就可從(cong) IO上讀取數據。
現在我們(men) 來看看控製字的內(nei) 容:
位0就是讀寫(xie) 位,當位0為(wei) 1時,就是告訴DS1302,下麵是進行讀出操作,而當位0為(wei) 0時就是寫(xie) 入操作。
位0-位5是要進行操作的DS1302寄存器地址。
位6就是告訴DS1302,是要對RAM進行操作還是對CLK寄存器進行操作,0就是對時間寄存器操作,一般我們(men) 都是對時間寄存器進行操作。
位7就是固定的1。為(wei) 什麽(me) 是1呢。還記得上麵說的單字節讀操作嗎?在寫(xie) 控製字的最後一個(ge) 位也就是位7時,DS1302已將它的寄存器數據位0放到IO上了,要是控製字的位7是0的話,DS1302就無法將它的隨後的數據放到IO上了。
這樣你現在就知道為(wei) 什麽(me) 控製字80H是寫(xie) 秒寄存器,而80H是讀秒寄存器了吧!80H換成二進製就是10000000。而81H的二進製就是10000001,一個(ge) 是寫(xie) 操作,另一個(ge) 是讀操作嘛!
好!我們(men) 現在來總結一下,如何對DS1302進行操作。
① 首先要通過8eH將寫(xie) 保護去掉,這樣我們(men) 才能將日期,時間的初值寫(xie) 時各個(ge) 寄存器。
② 然後就可以對80H、82H、84H、86H、88H、8AH、8CH進行初值的寫(xie) 入。同時也通過秒寄存器將位7的CH值改成0,這樣DS1302就開始走時運行了。
③ 將寫(xie) 保護寄存器再寫(xie) 為(wei) 80H,防止誤改寫(xie) 寄存器的值。
④ 不斷讀取80H-8CH的值,將它們(men) 格式化後顯示到LCD或數碼管上。
聲明:本網站原創內(nei) 容,如需轉載,請注明出處;本網站轉載的內(nei) 容(文章、圖片、視頻)等資料版權歸原網站所有。如我們(men) 采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯係我們(men) ,以便迅速采取適當處理措施;郵箱:limeijun@transql.com