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