摘要本文概括介紹了DS1302 時鐘芯片的特點和基本組成通過實例詳細說明了有關功能的應用
軟件關于 DS1302 各寄存器的詳細位控功能請參考DALLAS 達拉斯公司的相應產品資料
概述
DS1302 是DALLAS 公司推出的涓流充電時鐘芯片內含有一個實時時鐘/日歷和31 字節靜態RAM 通過簡單的串行接口與單片機進行通信實時時鐘/日歷電路提供秒分時日日期月年的信息每月的天數和閏年的天數可自動調整時鐘操作可通過AM/PM 指示決定采用24 或12 小時格式DS1302 與單片機之間能簡單地采用同步串行的方式進行通信僅需用到三個口線1 RES 復位2 I/O 數據線3 SCLK串行時鐘時鐘/RAM 的讀/寫數據以一個字節或多達31 個字節的字符組方式通信DS1302 工作時功耗很低保持數據和時鐘信息時功率小于1mW。
DS1302 是由DS1202 改進而來增加了以下的特性雙電源管腳用于主電源和備份電源供應Vcc1 為可編程涓流充電電源附加七個字節存儲器它廣泛應用于電話傳真便攜式儀器以及電池供電的儀器儀表等。
產品領域下面將主要的性能指標作一綜合
實時時鐘具有能計算2100 年之前的秒分時日日期星期月年的能力還有閏年調整的能力
31 8 位暫存數據存儲RAM
串行I/O 口方式使得管腳數量最少
寬范圍工作電壓2.0 5.5V
工作電流2.0V 時,小于300nA
讀/寫時鐘或RAM 數據時有兩種傳送方式單字節傳送和多字節傳送字符組方式
8 腳DIP 封裝或可選的8 腳SOIC 封裝根據表面裝配
簡單3 線接口
與TTL 兼容Vcc=5V
可選工業級溫度范圍-40 +85
與DS1202 兼容
在DS1202 基礎上增加的特性
對Vcc1 有可選的涓流充電能力
雙電源管用于主電源和備份電源供應
備份電源管腳可由電池或大容量電容輸入
附加的7 字節暫存存儲器
1 DS1302 的基本組成和工作原理
DS1302 的管腳排列及描述如下圖及表所示
管腳描述
X1 X2 32.768KHz 晶振管腳
GND 地
RST 復位腳
I/O 數據輸入/輸出引腳
SCLK 串行時鐘
Vcc1,Vcc2 電源供電管腳
訂單信息
部分# 描述
DS1302 串行時鐘芯片8 腳DIP
DS1302S 串行時鐘芯片8 腳SOIC 200mil
DS1302Z 串行時鐘芯片8 腳SOIC 150mil
2. DS1302 內部寄存器
CH: 時鐘停止位寄存器2 的第7 位12/24 小時標志
CH=0 振蕩器工作允許bit7=1,12 小時模式
CH=1 振蕩器停止bit7=0,24 小時模式
WP: 寫保護位寄存器2 的第5 位:AM/PM 定義
WP=0 寄存器數據能夠寫入 AP=1 下午模式
WP=1 寄存器數據不能寫入 AP=0 上午模式
TCS: 涓流充電選擇 DS: 二極管選擇位
TCS=1010 使能涓流充電 DS=01 選擇一個二極管
TCS=其它 禁止涓流充電 DS=10 選擇兩個二極管
DS=00 或11, 即使TCS=1010, 充電功能也被禁止
RS 位電阻典型位
00 沒有沒有
01 R1 2K
10 R2 4K
11 R3 8K
管腳配置
DS1302 與微控制器的接口軟件及功能應用舉例
下面首先給出基本的接口軟件然后舉例說明各種功能的應用
1 寫保護寄存器操作
當寫保護寄存器的最高位為0 時允許數據寫入寄存器寫保護寄存器可以通過命令字節8E 8F 來
規定禁止寫入/讀出寫保護位不能在多字節傳送模式下寫入
Write_Enable:
MOV Command,#8Eh ;命令字節為8E
MOV ByteCnt,#1 ;單字節傳送模式
MOV R0,#XmtDat 數據地址覆給R0
MOV XmtDat,#00h 數據內容為0 寫入允許
ACALL Send_Byte 調用寫入數據子程序
RET 返回調用本子程序處
當寫保護寄存器的最高位為1 時禁止數據寫入寄存器
Write_Disable:
MOV Command,#8Eh ;命令字節為8E
MOV ByteCnt,#1 ;單字節傳送模式
MOV R0,#XmtDat 數據地址覆給R0
MOV XmtDat,#80h 數據內容為80h 禁止寫入
ACALL Send_Byte 調用寫入數據子程序
RET 返回調用本子程序處
以上程序調用了基本數據發送(Send_Byte)模塊及一些內存單元定義, 其源程序清單在附錄中給出下面
的程序亦使用了這個模塊
2 時鐘停止位操作
當把秒寄存器的第7 位時鐘停止位設置為0 時起動時鐘開始
Osc_Enable:
MOV Command,#80h ; 命令字節為80
MOV ByteCnt,#1 ; 單字節傳送模式
MOV R0,#XmtDat 數據地址覆給R0
MOV XmtDat,#00h 數據內容為0 振蕩器工作允許
ACALL Send_Byte 調用寫入數據子程序
RET 返回調用本子程序處
當把秒寄存器的第7 位時鐘停止位設置為1 時時鐘振蕩器停止HT1380 進入低功耗方式
Osc_Disable:
MOV Command,#80h ;命令字節為80
MOV ByteCnt,#1 ;單字節傳送模式
MOV R0,#XmtDat 數據地址覆給R0
MOV XmtDat,#80h 數據內容為80h 振蕩器停止
ACALL Send_Byte 調用寫入數據子程序
RET 返回調用本子程序處
3. 多字節傳送方式
當命令字節為BE 或BF 時DS1302 工作在多字節傳送模式8 個時鐘/日歷寄存器從寄存器0 地址開始連續讀寫從0 位開始的數據當命令字節為FE 或FF 時DS1302 工作在多字節RAM 傳送模式31 個RAM 寄存器從0 地址開始連續讀寫從0 位開始的數據
例如寫入00 年6 月21 日星期三13 時59 分59 秒程序設置如下
Write_Multiplebyte:
MOV Command,#0BEh ;命令字節為BEh
MOV ByteCnt,#8 ;多字節寫入模式此模塊為8 個
MOV R0,#XmtDat 數據地址覆給R0
MOV XmtDat,#59h 秒單元內容為59h
5
MOV XmtDat+1,#59h 分單元內容為59h
MOV XmtDat+2,#13h 時單元內容為13h
MOV XmtDat+3,#21h 日期單元內容為21h
MOV XmtDat+4,#06h 月單元內容為06h
MOV XmtDat+5,#03h 星期單元內容為03h
MOV XmtDat+6,#0 年單元內容為00h
MOV XmtDat+7,#0 寫保護單元內容為00h
ACALL Send_Byte 調用寫入數據子程序
RET 返回調用本子程序處
讀出寄存器0-7 的內容程序設置如下
Read_Multiplebyte:
MOV Command,#0BFh ;命令字節為BFh
MOV ByteCnt,#8 ;多字節讀出模式此模塊為8 個
MOV R1,#RcvDat 數據地址覆給R1
ACALL Receive_Byte 調用讀出數據子程序
RET 返回調用本子程序處
以上程序調用了基本數據接收(Receive_Byte)模塊及一些內存單元定義, 其源程序清單在附錄中給
出下面的程 序亦使用了這個模塊
4. 單字節傳送方式
例如寫入8 時12 小時模式程序設置如下
Write_Singlebyte:
MOV Command,#84h ; 命令字節為84h
MOV ByteCnt,#1 ; 單字節傳送模式
MOV R0,#XmtDat 數據地址覆給R0
MOV XmtDat,#88h 數據內容為88h
ACALL Send_Byte 調用寫入數據子程序
RET 返回調用本子程序處
上面所列出的程序模塊Write_Enable Write_Disable Osc_Enable Osc_Disable
與單字節寫入模塊Write_Singlebyte 的程序架構完全相同僅只是幾個入口參數不同本文是為了強調功
能使用的不同才將其分為不同模塊另外,與涓流充電相關的設定也是單字節操作方式,這里就不再單獨列出,
用戶在使用中可靈活簡略
下面模塊舉例說明如何單字節讀出小時單元的內容.
Read_Singlebyte:
MOV Command,#85h ; 命令字節為85h
MOV ByteCnt,#1 ; 單字節傳送模式
MOV R1,#RcvDat 數據地址覆給R1
ACALL Receive_Byte 調用讀出數據子程序
RET 返回調用本子程序處
6
DS1302 應用電路原理圖P87LPC764 單片機選取內部振蕩及內部復位電路
附錄數據發送與接收模塊源程序清單
; CPU 工作頻率最大不超過20MHz
;********************************************************************************************
; P87LPC762/4 主控器發送接受數據程序
; 說明本程序是利用Philips 公司的P87LPC764 單片機任何具有51 內核或其它合適的單片機都可在此
作為主控器的普通I/O 口(如P1.2/P1.3/P1.4)實現總線的功能對總線 上的器件本程序采用DS1302
進行讀寫操作命令字節在Command 傳送字節數在ByteCnt 中所發送的數據在XmtDat 中所接收
的數據在RcvDat 中
;********************************************************************************************
;P87LPC762/4 主控器總線發送接受數據程序頭文件
;內存數據定義
BitCnt data 30h ; 數據位計數器
ByteCnt data 31h ; 數據字節計數器
Command data 32h ; 命令字節地址
RcvDat DATA 40H ; 接收數據緩沖區
XmtDat DATA 50H ; 發送數據緩沖區
;端口位定義
IO_DATA bit P1.3 ; 數據傳送總線
SCLK bit P1.4 ; 時鐘控制總線
RST bit P1.2 ; 復位總線
;********************************************************************************************
;發送數據程序
;名稱:Send_Byte
;描述:發送ByteCnt 個字節給被控器DS1302
;命令字節地址在Command 中
;所發送數據的字節數在ByteCnt 中發送的數據在XmtDat 緩沖區中
;********************************************************************************************
Send_Byte:
CLR RST ;復位引腳為低電平所有數據傳送終止
NOP
CLR SCLK 清時鐘總線
NOP
7
SETB RST ;復位引腳為高電平邏輯控制有效
NOP
MOV A,Command 準備發送命令字節
MOV BitCnt,#08h 傳送位數為8
S_Byte0:
RRC A 將最低位傳送給進位位C
MOV IO_DATA,C 位傳送至數據總線
NOP
SETB SCLK 時鐘上升沿發送數據有效
NOP
CLR SCLK 清時鐘總線
DJNZ BitCnt,S_Byte0 位傳送未完畢則繼續
NOP
S_Byte1: 準備發送數據
MOV A,@R0 傳送數據過程與傳送命令相同
MOV BitCnt,#08h
S_Byte2:
RRC A
MOV IO_DATA,C
NOP
SETB SCLK
NOP
CLR SCLK
DJNZ BitCnt,S_Byte2
INC R0 發送數據的內存地址加1
DJNZ ByteCnt,S_Byte1 字節傳送未完畢則繼續
NOP
CLR RST 邏輯操作完畢清RST
RET
;***************************************************************************************
;接收數據程序;
;名稱:Receive_Byte
;描述:從被控器DS1302 接收ByteCnt 個字節數據
;命令字節地址在Command 中
;所接收數據的字節數在ByteCnt 中接收的數據在RcvDat 緩沖區中
;***********************************************************************************
Receive_Byte:
CLR RST ;復位引腳為低電平所有數據傳送終止
NOP
CLR SCLK 清時鐘總線
NOP
SETB RST ;復位引腳為高電平邏輯控制有效
MOV A,Command 準備發送命令字節
8
MOV BitCnt,#08h 傳送位數為8
R_Byte0:
RRC A 將最低位傳送給進位位C
MOV IO_DATA,C 位傳送至數據總線
NOP
SETB SCLK 時鐘上升沿發送數據有效
NOP
CLR SCLK 清時鐘總線
DJNZ BitCnt,R_Byte0 位傳送未完畢則繼續
NOP
R_Byte1: 準備接收數據
CLR A 清類加器
CLR C 清進位位C
MOV BitCnt,#08h 接收位數為8
R_Byte2:
NOP
MOV C,IO_DATA 數據總線上的數據傳送給C
RRC A 從最低位接收數據
SETB SCLK 時鐘總線置高
NOP
CLR SCLK 時鐘下降沿接收數據有效
DJNZ BitCnt,R_Byte2 位接收未完畢則繼續
MOV @R1,A 接收到的完整數據字節放入接收內存緩沖區
INC R1 接收數據的內存地址加1
DJNZ ByteCnt,R_Byte1 字節接收未完畢則繼續
NOP
CLR RST 邏輯操作完畢清RST
RET
;==========================================================
END