ds1302 是dallas 公司推出的涓流充電時(shí)鐘芯片,內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31 字節(jié)靜態(tài)ram,通過簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路.提供秒分時(shí)日日期.月年的信息,每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整時(shí)鐘操作可通過am/pm 指示決定采用24 或12 小時(shí)格式.ds1302 與單片機(jī)之間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信,僅需用到三個(gè)口線:1 res 復(fù)位,2 i/o 數(shù)據(jù)線,3 sclk串行時(shí)鐘.時(shí)鐘/ram 的讀/寫數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31 個(gè)字節(jié)的字符組方式通信.ds1302 工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mw.ds1302 是由ds1202 改進(jìn)而來,增加了以下的特性.雙電源管腳用于主電源和備份電源供應(yīng)vcc1,為可編程涓流充電電源附加七個(gè)字節(jié)存儲(chǔ)器.它廣泛應(yīng)用于電話傳真便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域.
下面將主要的性能指標(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ū)懭?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 禁止寫入
acallsend_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
movbytecnt,#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:
movcommand,#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
movxmtdat,#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
movxmtdat+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
movbytecnt,#8 ; 多字節(jié)讀出模式此模塊為8 個(gè)
movr1,#rcvdat 數(shù)據(jù)地址覆給r1
acallreceive_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
movbytecnt,#1 ; 單字節(jié)傳送模式
mov r1,#rcvdat 數(shù)據(jù)地址覆給r1
acallreceive_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 data31h ; 數(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
clrsclk 清時(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
setbsclk
nop
clr sclk
djnzbitcnt,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
movio_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
movc,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ù)表:
電容配置表: