本應(yīng)用筆記提供了如何將DS1307實(shí)時時鐘(RTC)連接至微控制器的信息,并提供了一些訪問該器件的示例代碼。
介紹
DS1307串行實(shí)時時鐘集成了2線串行接口,可使用兼容8051的微控制器進(jìn)行控制。本例中的DS1307直接連接到DS5000微控制器上的兩個I/O端口,2線握手由低電平驅(qū)動器處理,本應(yīng)用筆記對此進(jìn)行了討論。
DS1307 說明
DS1307串行實(shí)時時鐘為低功耗、全BCD時鐘/日歷外加56字節(jié)非易失性SRAM。地址和數(shù)據(jù)通過2線雙向總線串行傳輸。時鐘/日歷提供秒、分鐘、小時、星期、日期、月份和年份信息。對于少于 31 天的月份,月末日期會自動調(diào)整,包括對閏年的更正。時鐘以 24 小時制或 12 小時制運(yùn)行,帶 AM/PM 指示器。DS1307內(nèi)置電源檢測電路,可檢測電源故障并自動切換到電池供電。
DS1307 工作原理
DS1307作為串行總線上的從器件工作。通過實(shí)現(xiàn) START 條件并提供設(shè)備標(biāo)識碼后跟寄存器地址來獲取訪問權(quán)限。后續(xù)寄存器可以按順序訪問,直到執(zhí)行 STOP 條件。啟動和停止條件是使用隨附的DS5000代碼中的低電平驅(qū)動器、SEND_START和SEND_STOP生成的。此外,子程序SEND_BYTE和READ_BYTE提供在DS2之間寫入和讀取8位字所需的1307線握手。
硬件配置
系統(tǒng)配置如圖 1 所示。DS1307的2線總線連接到DS5000的兩個I/O端口引腳:SCL - P1.0、SDA - P1.1。五世DD電壓為5V,RP= 5KΩ,DS5000采用12 MHz晶體。另一個外圍設(shè)備可以是識別2線協(xié)議的任何其他設(shè)備,例如DS1621數(shù)字溫度計(jì)和恒溫器。與D5000的接口是使用DS5000T套件硬件和軟件完成的。該開發(fā)套件允許將PC用作啞終端,使用DS5000的串行端口與鍵盤和顯示器進(jìn)行通信。
圖1.典型的2線總線配置。
定義了以下總線協(xié)議(參見圖 2)。
在數(shù)據(jù)傳輸過程中,只要時鐘線為高電平,數(shù)據(jù)線必須保持穩(wěn)定。時鐘線為高電平時數(shù)據(jù)線的變化將被解釋為控制信號。
因此,定義了以下總線條件:
開始數(shù)據(jù)傳輸:當(dāng)時鐘線為高電平時,數(shù)據(jù)線的狀態(tài)從高電平到低電平的變化定義了START條件。
停止數(shù)據(jù)傳輸:當(dāng)時鐘線為高電平時,數(shù)據(jù)線的狀態(tài)從低到高的變化定義了 STOP 條件。
數(shù)據(jù)有效:當(dāng)在START條件之后,數(shù)據(jù)線在時鐘信號的高周期內(nèi)保持穩(wěn)定時,數(shù)據(jù)線的狀態(tài)表示有效數(shù)據(jù)。線路上的數(shù)據(jù)必須在時鐘信號的低電平期間更改。每個數(shù)據(jù)位有一個時鐘脈沖。
每個數(shù)據(jù)傳輸都以 START 條件啟動,并以 STOP 條件終止。在 START 和 STOP 條件之間傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)不受限制,由主設(shè)備決定。信息按字節(jié)傳輸,每個接收器用第九位確認(rèn)。
確認(rèn):每個接收設(shè)備在尋址時,都必須在接收每個字節(jié)后生成確認(rèn)。主設(shè)備必須生成與此應(yīng)答位關(guān)聯(lián)的額外時鐘脈沖。
確認(rèn)的器件必須在確認(rèn)時鐘脈沖期間拉下SDA線,以使SDA線在確認(rèn)相關(guān)時鐘脈沖的高電平期間穩(wěn)定為低電平。當(dāng)然,必須考慮設(shè)置和保持時間。主站必須通過不從站輸出的最后一個字節(jié)上生成應(yīng)答位來向從站發(fā)出數(shù)據(jù)結(jié)束信號。在這種情況下,從機(jī)必須將數(shù)據(jù)線保持高電平,以使主站能夠產(chǎn)生STOP條件。
圖2詳細(xì)介紹了如何在2線總線上完成數(shù)據(jù)傳輸。根據(jù) R/W位的狀態(tài),可以進(jìn)行兩種類型的數(shù)據(jù)傳輸:
從主發(fā)射器到從接收器的數(shù)據(jù)傳輸。主站傳輸?shù)牡谝粋€字節(jié)是從地址。接下來是一些數(shù)據(jù)字節(jié)。從站在每個接收到的字節(jié)后返回一個應(yīng)答位。首先使用最高有效位 (MSB) 傳輸數(shù)據(jù)。
從從發(fā)射器到主接收器的數(shù)據(jù)傳輸。第一個字節(jié)(從地址)為 由主人傳輸。然后,從站返回一個應(yīng)答位。接下來是從站傳輸多個數(shù)據(jù)字節(jié)。主站在所有接收到的字節(jié)(最后一個字節(jié)除外)之后返回一個應(yīng)答位。在最后一個接收的字節(jié)的末尾,返回不確認(rèn)。
圖2.2線串行總線上的數(shù)據(jù)傳輸。
主器件生成所有串行時鐘脈沖以及啟動和停止條件。傳輸以“停止”條件或重復(fù)的“開始”條件結(jié)束。由于重復(fù)的 START 條件也是下一次串行傳輸?shù)拈_始,因此不會釋放總線。首先使用最高有效位 (MSB) 傳輸數(shù)據(jù)。
DS1307可以工作在以下兩種模式:
從接收模式(DS1307寫入模式):串行數(shù)據(jù)和時鐘通過SDA和SCL接收。接收到每個字節(jié)后,將發(fā)送一個應(yīng)答位。啟動和停止條件被識別為串行傳輸?shù)拈_始和結(jié)束。地址識別由硬件在接收到從地址和方向位后執(zhí)行(參見圖3)。地址字節(jié)是主站生成啟動條件后收到的第一個字節(jié)。地址字節(jié)包含7位DS1307地址,即1101000,后跟方向位(R//W),對于寫入,方向位為0。接收并解碼地址字節(jié)后,DS1307在SDA線路上輸出應(yīng)答。DS1307確認(rèn)從地址+寫位后,主機(jī)向DS1307發(fā)送寄存器地址。這將設(shè)置DS1307上的寄存器指針。然后,主機(jī)開始發(fā)送每個字節(jié)的數(shù)據(jù),DS1307確認(rèn)接收到的每個字節(jié)。主站將生成停止條件以終止數(shù)據(jù)寫入。
從發(fā)送器模式(DS1307讀取模式):第一個字節(jié)的接收和處理方式與從機(jī)接收機(jī)模式相同。但是,在此模式下,方向位將指示傳遞方向相反。串行數(shù)據(jù)由DS1307在SDA上傳輸,而串行時鐘由SCL輸入。START 和 STOP 條件被識別為串行傳輸?shù)拈_始和結(jié)束(請參閱圖 4)。地址字節(jié)是主站生成啟動條件后收到的第一個字節(jié)。地址字節(jié)包含7位DS1307地址,即1101000,后跟方向位(R/W),讀取時為1。接收并解碼地址字節(jié)后,DS1307在SDA線路上輸入確認(rèn)。然后,DS1307從寄存器指針指向的寄存器地址開始發(fā)送數(shù)據(jù)。如果在啟動讀取模式之前未寫入寄存器指針,則讀取的第一個地址是寄存器指針中存儲的最后一個地址。DS1307必須由主機(jī)發(fā)送一個非應(yīng)答位以終止讀操作。
圖4.數(shù)據(jù)讀取—從發(fā)送器模式。
軟件操作
DS5000 接口
附錄1中的軟件用于通過5000線接口將DS1307與DS2連接。DS5000使用達(dá)拉斯半導(dǎo)體公司的DS5000T評估板進(jìn)行編程,該評估板允許將PC用作啞終端。DS5T評估套件隨附的KIT5000K軟件環(huán)境提供了一個高級接口,用于將應(yīng)用軟件加載到DS5000或通過程序命令設(shè)置其配置參數(shù)。KIT5K軟件包括一個啞終端仿真器,允許用戶在DS5000中運(yùn)行應(yīng)用軟件,通過PC COM端口與用戶通信。
DS1307 源代碼
附錄中代碼的第一部分用于配置DS5000與PC進(jìn)行串行通信。代碼的開頭還有用于控制演示軟件的MASTER_CONTROLLER子例程。
緊跟在MASTER_CONTROLLER子程序之后的子程序是用于控制2線接口的低級驅(qū)動器。它們不是DS1307特有的,但可以與任何2線兼容的從器件配合使用。這些子例程是:
SEND_START
此子例程用于在 2 線總線上生成啟動條件。
SEND_STOP
此子例程用于在 2 線總線上生成 Stop 條件。
SEND_BYTE
此子例程通過 8 線總線發(fā)送一個 2 位字 MSB,優(yōu)先級為 9千確認(rèn)脈沖的時鐘脈沖。
READ_BYTE
此子例程通過 8 線總線讀取 2 位字。它檢查要清除的 LASTREAD 標(biāo)志,指示何時從從設(shè)備進(jìn)行最后一次讀取。如果不是最后一次讀取,DS5000在9千時鐘,如果這是從設(shè)備最后一次讀取,DS5000發(fā)送“未確認(rèn)”。
SCL_HIGH
此子例程將 SCL 線路從低到高轉(zhuǎn)換,并確保 SCL 線路在繼續(xù)之前處于高電平。
延遲和DELAY_4
包括這兩個子程序是為了確保保持2線總線時序。
附錄中的其余代碼專門用于演示DS1307的功能。演示的功能包括:
設(shè)置時間
時間從鍵盤讀入并存儲在DS5000暫存器存儲器中。然后通過2線接口傳輸?shù)紻S1307。
設(shè)置內(nèi)存
從鍵盤讀入單個十六進(jìn)制字節(jié),并寫入DS1307的整個用戶RAM。
讀取日期/時間
日期和時間通過2線總線讀取,并存儲在DS5000暫存器存儲器中。然后將其寫入屏幕。這一直持續(xù)到按下鍵盤上的鍵為止。
讀取內(nèi)存
DS1307的整個用戶RAM被讀入DS5000暫存器存儲器,然后寫入PC監(jiān)視器。
OSC 開/關(guān)
DS1307時鐘振蕩器可以打開或關(guān)閉。
SQW/OUT On/ SQW/OUT Off
可以打開或關(guān)閉 SQW/OUT。它將以 1 Hz 切換。
結(jié)論
已經(jīng)表明,將DS1307或任何其他2線從器件連接到8051兼容微控制器非常簡單。唯一需要注意的是,微控制器上的低電平驅(qū)動器不會違反2線定時規(guī)范。為此,已將延遲子例程插入到代碼中。表1中的值是在用于開發(fā)本應(yīng)用筆記的硬件設(shè)置中觀察到的實(shí)際時序參數(shù)。
參數(shù) | 象征 | 實(shí)際 | 單位 |
標(biāo)準(zhǔn)及校正實(shí)驗(yàn)所時鐘頻率 | fSCL | 59 | 千 赫 |
停止和啟動條件之間的巴士空閑時間 | tBUF | 5.7 | 微秒 |
保持時間(重復(fù))啟動條件 | tHD:STA | 6.2 | 微秒 |
標(biāo)準(zhǔn)及校正實(shí)驗(yàn)所時鐘的低周期 | tLOW | 10.5 | 微秒 |
標(biāo)準(zhǔn)及校正實(shí)驗(yàn)表時鐘的高周期 | tHIGH | 6.5米 | 微秒 |
重復(fù)啟動條件的設(shè)置時間 | tSU:STA | 5.3 | 微秒 |
數(shù)據(jù)保持時間 | tHD:DAT | 5.5 | 微秒 |
數(shù)據(jù)設(shè)置時間 | tSU:DAT | 3.1 | 微秒 |
停止條件的設(shè)置時間 |
tSU:STO |
5.4 | 微秒 |
圖3.數(shù)據(jù)寫入—從接收機(jī)模式。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7895瀏覽量
153574 -
驅(qū)動器
+關(guān)注
關(guān)注
54文章
8575瀏覽量
148834 -
存儲器
+關(guān)注
關(guān)注
38文章
7623瀏覽量
166205
發(fā)布評論請先 登錄
DS1307 PIC16f690
怎么將ds1307與stm8s105c6接口
請問如何使定時器與DS1307的定時同步?
帶有ATtiny85/DS1307的時鐘開發(fā)板
DS1307應(yīng)用電路

DS1307接口的與8051兼容微控制器-Interfaci

DS1302 RTC與8051微控制器的接口

DS3231與8051微控制器的接口

DS1305 RTC與8051微控制器的接口

DS1307與8051兼容的微控制器接口

DS1307 時鐘/定時 - 實(shí)時時鐘

Arduino DS1307 RTC時鐘

評論