您当前的位置:首页 > 自动化 > 单片机

ds1302中文资料

发布时间:2009-03-16 20:39:51  来源:资料室    作者:   更新20250122 070614

DS1302 涓流充电时钟保持芯片的原理与应用
摘要本文概括介绍了DS1302 时钟芯片的特点和基本组成通过实例详细说明了有关功能的应用
软件关于 DS1302 各寄存器的详细位控功能请参考DALLAS 达拉斯公司的相应产品资料
概述
DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时?日历?1 字节静态RAM 通过简
单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的?br /> 数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 ?2 小时格式DS1302 与单片机?br /> 间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据? SCLK
串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很
低保持数据和时钟信息时功率小?mW
DS1302 是由DS1202 改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应Vcc1 为可
编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等
产品领域下面将主要的性能指标作一综合
􀁺 实时时钟具有能计?100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力
􀁺 31 8 位暂存数据存储RAM
􀁺 串行I/O 口方式使得管脚数量最?br /> 􀁺 宽范围工作电?.0 5.5V
􀁺 工作电流2.0V ?小于300nA
􀁺 ?写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式
􀁺 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配
􀁺 简? 线接?br /> 􀁺 与TTL 兼容Vcc=5V
􀁺 可选工业级温度范围-40 +85
􀁺 与DS1202 兼容
􀁺 在DS1202 基础上增加的特?br /> 对Vcc1 有可选的涓流充电能力
双电源管用于主电源和备份电源供应
备份电源管脚可由电池或大容量电容输入
附加? 字节暂存存储?br /> 1 DS1302 的基本组成和工作原理
DS1302 的引脚功能排列及描述如下图所?/p>

 

                   ds1302引脚?/p>


管脚描述
X1 X2 32.768KHz 晶振管脚
GND ?br /> RST 复位?br /> I/O 数据输入/输出引脚
SCLK 串行时钟
Vcc1,Vcc2 电源供电管脚
 

DS1302 串行时钟芯片8 脚DIP
DS1302S 串行时钟芯片8 脚SOIC 200mil
DS1302Z 串行时钟芯片8 脚SOIC 150mil


2. DS1302 内部寄存?br />  

CH: 时钟停止?nbsp;                         存器2 的第7 ?2/24 小时标志
CH=0 振荡器工作允?nbsp;              bit7=1,12 小时模式
CH=1 振荡器停?nbsp;                      bit7=0,24 小时模式
 

WP: 写保护位                              寄存? 的第5 ?AM/PM 定义
WP=0 寄存器数据能够写?nbsp;      AP=1 下午模式
WP=1 寄存器数据不能写?nbsp;      AP=0 上午模式
 

TCS: 涓流充电选择                      DS: 二极管选择?br /> TCS=1010 使能涓流充电             DS=01 选择一个二极管
TCS=其它 禁止涓流充电            DS=10 选择两个二极?br /> DS=00 ?1, 即使TCS=1010, 充电功能也被禁止

RS?/td> 电阻 典型?/td>
00 没有 没有
01 R1 2KΩ
10 R2 4KΩ
11 R3 8KΩ

时钟?/p>


 

DS1302 与微控制器的接口软件及功能应用举?br /> 下面首先给出基本的接口软件然后举例说明各种功能的应用
1 写保护寄存器操作
当写保护寄存器的最高位? 时允许数据写入寄存器写保护寄存器可以通过命令字节8E?F ?br /> 规定禁止写入/读出写保护位不能在多字节传送模式下写入
 

Write_Enable:
MOV   Command,#8Eh       ;命令字节?E
MOV    ByteCnt,#1             ;单字节传送模?br /> MOV    R0,#XmtDat            数据地址覆给R0
MOV    XmtDat,#00h          数据内容? 写入允许
ACALL Send_Byte             用写入数据子程序
RET                                     返回调用本子程序?br />  

当写保护寄存器的最高位? 时禁止数据写入寄存器
 

Write_Disable:
MOV         Command,#8Eh          ;命令字节?E
MOV          ByteCnt,#1                ;单字节传送模?br /> MOV           R0,#XmtDat              数据地址覆给R0
MOV          XmtDat,#80h              数据内容?0h 禁止写入
ACALL       Send_Byte                 调用写入数据子程?br /> RET                                               返回调用本子程序?br /> 以上程序调用了基本数据发?Send_Byte)模块及一些内存单元定? 其源程序清单在附录中给出下面
的程序亦使用了这个模?br /> 2 时钟停止位操?br /> 当把秒寄存器的第7 位时钟停止位设置? 时起动时钟开?br /> Osc_Enable:
MOV        Command,#80h          ; 命令字节?0
MOV        ByteCnt,#1                 ; 单字节传送模?br /> MOV        0,#XmtDat                   数据地址覆给R0
MOV        XmtDat,#00h               数据内容? 振荡器工作允?br /> ACALL     Send_Byte                  调用写入数据子程?br /> RET                                              返回调用本子程序?br /> 
当把秒寄存器的第7 位时钟停止位设置? 时时钟振荡器停止HT1380 进入低功耗方?br />  

Osc_Disable:
MOV               Command,#80h     ;命令字节?0
MOV               ByteCnt,#1            ;单字节传送模?br /> MOV               R0,#XmtDat         数据地址覆给R0
MOV               XmtDat,#80h        数据内容?0h 振荡器停?br /> ACALL            Send_Byte           调用写入数据子程?br /> RET                                              返回调用本子程序?br />  

3. 多字节传送方?br /> 当命令字节为BE 或BF 时DS1302 工作在多字节传送模? 个时?日历寄存器从寄存? 地址开
始连续读写从0 位开始的数据当命令字节为FE 或FF 时DS1302 工作在多字节RAM 传送模?1 ?br /> RAM 寄存器从0 地址开始连续读写从0 位开始的数据
例如写入00 ? ?1 日星期三13 ?9 ?9 秒程序设置如?br />  

Write_Multiplebyte:
MOV          Command,#0BEh            ;命令字节为BEh
MOV         ByteCnt,#8                      ;多字节写入模式此模块? ?br /> MOV         R0,#XmtDat                     数据地址覆给R0
MOV         XmtDat,#59h                   秒单元内容为59h

MOV         XmtDat+1,#59h              分单元内容为59h
MOV         XmtDat+2,#13h              时单元内容为13h
MOV         XmtDat+3,#21h             日期单元内容?1h
MOV         XmtDat+4,#06h             月单元内容为06h
MOV         XmtDat+5,#03h             星期单元内容?3h
MOV         XmtDat+6,#0                 年单元内容为00h
MOV         XmtDat+7,#0                 写保护单元内容为00h
ACALL    Send_Byte                       调用写入数据子程?br /> RET                                                  返回调用本子程序?br /> 
读出寄存?-7 的内容程序设置如?br /> Read_Multiplebyte:
MOV            Command,#0BFh         命令字节为BFh
MOV            ByteCnt,#8 ;                多字节读出模式此模块? ?br /> MOV            R1,#RcvDat                 数据地址覆给R1
ACALL         Receive_Byte              调用读出数据子程?br /> RET                                                  返回调用本子程序?br /> 以上程序调用了基本数据接?Receive_Byte)模块及一些内存单元定? 其源程序清单在附录中?br /> 出下面的?序亦使用了这个模?br />  

4. 单字节传送方?br /> 例如写入8 ?2 小时模式程序设置如下
Write_Singlebyte:
MOV           Command,#84h           ; 命令字节?4h
MOV           ByteCnt,#1                  ; 单字节传送模?br /> MOV           R0,#XmtDat                数据地址覆给R0
MOV           XmtDat,#88h               数据内容?8h
ACALL        Send_Byte                  调用写入数据子程?br /> RET                                                返回调用本子程序?br /> 
上面所列出的程序模块Write_Enable Write_Disable Osc_Enable Osc_Disable
与单字节写入模块Write_Singlebyte 的程序架构完全相同仅只是几个入口参数不同本文是为了强调功
能使用的不同才将其分为不同模块另?与涓流充电相关的设定也是单字节操作方?这里就不再单独列?
用户在使用中可灵活简?br /> 下面模块举例说明如何单字节读出小时单元的内容.

Read_Singlebyte:
MOV             Command,#85h             ; 命令字节?5h
MOV             ByteCnt,#1                    ; 单字节传送模?br /> MOV             R1,#RcvDat                   数据地址覆给R1
ACALL          Receive_Byte                调用读出数据子程?br /> RET                                                     返回调用本子程序?/p>


DS1302 应用电路原理图P87LPC764 单片机选取内部振荡及内部复位电?br /> 附录数据发送与接收模块源程序清?br /> ; CPU 工作频率最大不超过20MHz
;
; P87LPC762/4 主控器发送接受数据程?br /> ; 说明本程序是利用Philips 公司的P87LPC764 单片机任何具?1 内核或其它合适的单片机都可在?br /> 作为主控器的普通I/O ?如P1.2/P1.3/P1.4)实现总线的功能对总线 上的器件本程序采用DS1302
进行读写操作命令字节在Command 传送字节数在ByteCnt 中所发送的数据在XmtDat 中所接收
的数据在RcvDat ?br /> ;
;P87LPC762/4 主控器总线发送接受数据程序头文件
;内存数据定义
BitCnt           data      30h         ; 数据位计数器
ByteCnt        data      31h         ; 数据字节计数?br /> Command     data      32h         ; 命令字节地址
RcvDat         DATA  40H        ; 接收数据缓冲?br /> XmtDat         DATA 50H         ; 发送数据缓冲区
;端口位定?br /> IO_DATA    bit          P1.3       ; 数据传送总线
SCLK           bit         P1.4       ; 时钟控制总线
RST              bit         P1.2        ; 复位总线
;
;发送数据程?br /> ;名称:Send_Byte
;描述:发送ByteCnt 个字节给被控器DS1302
;命令字节地址在Command ?br /> ;所发送数据的字节数在ByteCnt 中发送的数据在XmtDat 缓冲区中
;
Send_Byte:
CLR       RST       ;复位引脚为低电平所有数据传送终?br /> NOP
CLR       SCLK     清时钟总线
NOP


SETB           RST                     ;复位引脚为高电平逻辑控制有效
NOP
MOV           A,Command         准备发送命令字?br /> MOV            BitCnt,#08h         传送位数为8
S_Byte0:
RRC            A                          将最低位传送给进位位C
MOV          IO_DATA,C         位传送至数据总线
NOP
SETB           SCLK                 时钟上升沿发送数据有?br /> NOP
CLR            SCLK                   清时钟总线
DJNZ             BitCnt,S_Byte0              位传送未完毕则继?br /> NOP
S_Byte1:                                            准备发送数?br /> MOV              A,@R0                        传送数据过程与传送命令相?br /> MOV             BitCnt,#08h
S_Byte2:
RRC A
MOV              IO_DATA,C
NOP
SETB             SCLK
NOP
CLR               SCLK
DJNZ             BitCnt,S_Byte2
INC                R0                              发送数据的内存地址?
DJNZ             ByteCnt,S_Byte1        字节传送未完毕则继?br /> NOP     
CLR               RST                            逻辑操作完毕清RST
RET

;接收数据程序;
;名称:Receive_Byte
;描述:从被控器DS1302 接收ByteCnt 个字节数?br /> ;命令字节地址在Command ?br /> ;所接收数据的字节数在ByteCnt 中接收的数据在RcvDat 缓冲区中

Receive_Byte:
CLR             RST                            ;复位引脚为低电平所有数据传送终?br /> NOP
CLR             SCLK                        清时钟总线
NOP
SETB           RST                           ;复位引脚为高电平逻辑控制有效
MOV           A,Command              准备发送命令字?/p>


MOV            BitCnt,#08h              传送位数为8
 

R_Byte0:
RRC              A                             将最低位传送给进位位C
MOV            IO_DATA,C           位传送至数据总线
NOP
SETB            SCLK                    时钟上升沿发送数据有?br /> NOP
CLR              SCLK                    清时钟总线
DJNZ            BitCnt,R_Byte0      位传送未完毕则继?br /> NOP           

R_Byte1:                                    准备接收数据
CLR             A                            清类加器
CLR              C                           清进位位C
MOV            BitCnt,#08h            接收位数?
R_Byte2:
NOP
MOV            C,IO_DATA         数据总线上的数据传送给C
RRC             A                           从最低位接收数据
SETB            SCLK                   时钟总线置高
NOP
CLR             SCLK                   时钟下降沿接收数据有?br /> DJNZ           BitCnt,R_Byte2     位接收未完毕则继?br /> MOV          @R1,A                  接收到的完整数据字节放入接收内存缓冲?br /> INC            R1                          接收数据的内存地址?
DJNZ         ByteCnt,R_Byte1    字节接收未完毕则继续
NOP
CLR           RST                        逻辑操作完毕清RST
RET

END

 直流参数表:

 
 
 

主要电参数表?/p>

交流参数表:

电容配置表:

 


来顶一下
近回首页
返回首页
分享到:
  • 有没有c语言写的? 匿名 于2012-03-31 09:15:26发布
  • 发表评论

     共有人参与,请您也说几句看法

     
       验证码: 看不清楚,点击刷新 看不清楚,点击刷新