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