专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
RX8025T时钟芯片
2019-08-13 20:35
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
1326
6
948
不明白,这个时钟芯片怎样与实际的时钟同步,是要先写进去吗,还有它的初始化,网上大多都是8025AC的,8025T的没找到,谁用过这款芯片交流一下顺便帮忙解答一下吧,心累
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
小二郎123
1楼-- · 2019-08-14 01:08
來结个帖,还是时序的事,根据数据手册一步步的改最后改好了,网上的大都是8025AC的资料,两块芯片的操作不同所以有点蒙,还好最后解决了,附上数据手册
加载中...
jiutianshenjian
2楼-- · 2019-08-14 05:31
本帖最后由 jiutianshenjian 于 2017-8-23 10:39 编辑
差不多吧,AC的你弄会了T的不会?你难道通过互联网同步?
不然肯定得写啊。
加载中...
小二郎123
3楼-- · 2019-08-14 07:23
大神,AC的没搞过只是看了看程序,我写的程序读出来的地址0-7的数据是01 FF FF FF FF FF 00,感觉不对网上资料说8025T的读时序不同而且手册的也不对,所以有点懵
加载中...
小二郎123
4楼-- · 2019-08-14 10:58
精彩回答 2 元偷偷看……
加载中...
jackielau
5楼-- · 2019-08-14 12:51
rx8025.rar
(3.66 KB, 下载次数: 174)
2017-10-12 09:30 上传 点击文件名下载附件
[mw_shl_code=c,true]//////////////////////////////////////////////////////
////////////时间日期芯片RX8025///////////////////////
////////////////////////////////////////////////////
#include "RX8025.h"
static unsigned char RX8025_State;
unsigned char gTime[RX8025_TIME_LENGTH];
void RX8025_IIC_Init(void)
{
RX8025_SCK_HIGH();
RX8025_SDA_HIGH();
RX8025_SCK_OUT();
RX8025_SDA_OUT();
}
void RX8025_IIC_Start(void)
{
RX8025_SCK_HIGH();
RX8025_SDA_HIGH();
RX8025_SCK_OUT();
RX8025_SDA_OUT();
RX8025_SDA_LOW();
DelayUs(RX8025_SPEED);
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
}
void RX8025_IIC_Stop(void)
{
RX8025_SCK_OUT();
RX8025_SDA_OUT();
RX8025_SDA_LOW();
DelayUs(RX8025_SPEED);
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
RX8025_SDA_HIGH();
DelayUs(RX8025_SPEED);
}
void RX8025_IIC_WriteByte(unsigned char Data)
{
unsigned char i;
RX8025_SCK_OUT();
RX8025_SDA_OUT();
for(i=0;i<8;i++)
{
if( (Data&0x80)==0x00 )
{
RX8025_SDA_LOW();
}
else
{
RX8025_SDA_HIGH();
}
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
Data <<= 1;
}
RX8025_SDA_IN(); //读取数据第九位-从机确认位
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
i = RX8025_SDA_GET(); //检测是否有应答
if( i!=0x00 )
{
RX8025_State = RX8025_STATE_NOACK;
}
else
{
RX8025_State = RX8025_STATE_ACK;
}
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
}
unsigned char RX8025_IIC_ReadByte(unsigned char ACK)
{
unsigned char i,Data,temp;
RX8025_SCK_OUT();
RX8025_SDA_IN();
Data = 0x00;
for(i=0;i<8;i++)
{
Data <<= 1;
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
temp = RX8025_SDA_GET();
if( temp!=0x00 )
{
Data |= 0x01;
}
else
{
}
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
}
RX8025_SDA_OUT(); //主机读数据时,需要根据工作状况发送ACK
if(ACK) //发应答
{
RX8025_SDA_LOW();
}
else
{
RX8025_SDA_HIGH(); //不发应答
}
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
return Data;
}
/*--------------------------------------------------------------------
函数名称:RX8025读日期时间
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void RX8025_GetDateTime(unsigned char *timebuf)
{
unsigned char i;
uint8_t buf[RX8025_TIME_LENGTH];
RX8025_IIC_Start();
RX8025_IIC_WriteByte(RX8025_WR);
RX8025_IIC_WriteByte(0x00);
RX8025_IIC_Start();
RX8025_IIC_WriteByte(RX8025_RD);
for (i=0x00;i<RX8025_TIME_LENGTH;i++)
{
buf
=RX8025_IIC_ReadByte(1);//接收后,单片机回复应答
}
RX8025_IIC_ReadByte(0);//接收后,单片机不回复应答
RX8025_IIC_Stop();
//buf[RX8025_ADDR_SEC] &= ~RX8025_CH;
//buf[RX8025_ADDR_HOUR] &= ~RX8025_24H;
for (i=0x00;i<RX8025_TIME_LENGTH;i++)
{
timebuf
= buf
;
}
}
/*--------------------------------------------------------------------
函数名称:DS1302设置日期时间
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void RX8025_SetDateTime(unsigned char *timebuf)
{
unsigned char i;
RX8025_IIC_Start();
RX8025_IIC_WriteByte(RX8025_WR);
RX8025_IIC_WriteByte(0x00);
for (i=0x00;i<RX8025_TIME_LENGTH;i++)
{
RX8025_IIC_WriteByte(timebuf
);//接收后,单片机回复应答
}
RX8025_IIC_Stop();
}
/*--------------------------------------------------------------------
函数名称:RX8025初始化
函数功能:
注意事项:无
提示说明:无
输 入:无
返 回:无
--------------------------------------------------------------------*/
void RX8025_Init(void)
{
RX8025_IIC_Init();
RX8025_GetDateTime(gTime);
}
[/mw_shl_code]
[mw_shl_code=c,true]
/*********************************************************************
目 的: 建立RX8025操作库
目标系统: 基于AVR单片机
应用软件: WINGCC
版 本: Version 1.0
圆版时间: 2009-04-27
开发人员:
说 明:
*********************************************************************/
#ifndef __RX8025_H__
#define __RX8025_H__
#include <avr/io.h>
#include <avr/pgmspace.h>
#ifdef __OPTIMIZE__
#include "Mydelay.h"
#endif
/*
一、读写时序
1、S:起始位Start P:停止位STOP A:1307应答 MA:单片机应答 MNA:单片机不应答
2、写数据
| S | 11010000 | A | ADDR | A | DATA1 | A | DATA2 | ~ | A | DATA n | A | P |
3、读时序
| S | 11010001 | MA | DATA1 | MA | DATA2 | MA | DATA3 | ~ | MA | DATA n | MNA | P |
4、地址和数据高位在前
二、RX8025寄存器
-----------------------------------------------------------------------------------
ADDRESS | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 | FUNCTION | RANGE
-----------------------------------------------------------------------------------
00H | 0 | 10 Seconds | Seconds | Seconds | 00–59
-----------------------------------------------------------------------------------
01H | 0 | 10 Minutes | Minutes | Minutes | 00–59
-----------------------------------------------------------------------------------
| |20Hour| | | | 1–12
02H | 0 |------|10Hour| Hours Hours | | +AM/PM
| |PM/AM | | | | 00–23
-----------------------------------------------------------------------------------
03H | 0 | 0 0 0| | | 0 | DAY/WEEK | Day | 01–07
-----------------------------------------------------------------------------------
04H | 0 | 0 | 10 Date | Date | Date | 01–31
-----------------------------------------------------------------------------------
05H | 0 | 0 | 0 |10Month| Month | Month | 01–12
-----------------------------------------------------------------------------------
06H | 10 Year | Year | Year | 00–99
-----------------------------------------------------------------------------------
07H | 0 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | DataOffset | —
-----------------------------------------------------------------------------------
08H-0CH | | Alarm |
-----------------------------------------------------------------------------------
0DH | | Reserved |
-----------------------------------------------------------------------------------
0EH | WALE | DALE |/12,24| 0 | 0 | CT2 | CT1 | CT0 | Control1 |
-----------------------------------------------------------------------------------
0FH | VDSL | VDET | /XST | PON | 0 | CTFG | WAFG | DAFG | Control1 |
-----------------------------------------------------------------------------------
注意:
1、PON bit 是电源复位标志
刚接通电源时或电源电压下降复位后,PON bit设置为1,且除PON bit及/XST bit以外的Control1、
Control2 的各bit重设为0。注这时其他的寄存值不稳定,因而请务必执行初始设定后再使用。
此时,请不要设定日期、时间不正确的数据。因为不能保证这时的计时动作。
----------------------------------------------------------
PON | 数据 | 内 容
----------------------------------------------------------
| 0 | 将PON bit 清除为0 为下次检测做准备
Write| 1 | 禁止设定虽无任何影响但请不要进行设定
----------------------------------------------------------
| 0 | 无电源复位发生
Read | 1 | 有电源复位发生(结果保持至清除0) *Default
----------------------------------------------------------
2、WALE 时间报警生效位
Alarm W 功能(根据星期、时、分的一致性发生警报功能)的设定BIT,0报警生效,1报警有效/INTB=“L”
3、DALE 时间报警生效位
Alarm D 功能(根据时、分的一致性发生警报功能)的设定BIT,0报警生效,1报警有效/INTA=“L”
4、/12, 24 bit
对计时动作是设置为12小时制还是24 小时制作出选择。1为24小时制。
5、CT2, CT1, CT0 bit
对使用/INTA 引脚的固定周期中断功能的动作进行设定。
6、VDSL bit 低电压检测功能的标准电压值的选择设定位。
0:电源降低检测功能的标准电压值设定为2.1V
1:电源降低检测功能的标准电压值设定为1.3V
7、VDET bit 表示低电压检测功能的检测结果位。
检测出电源降低,则VDET=1。
---------------------------------------------------------------------------------------
VDET | 数据 | 内 容
---------------------------------------------------------------------------------------
| 0 | 将VDET bit 清除为0 重新开始低电压检测动作为下次检测作准备 *Default
Write | 1 | 禁止设定虽无任何影响但请不要进行设定
---------------------------------------------------------------------------------------
| 0 | 无低电压的检测 *Default
Read | 1 | 有低电压的检测(结果保持至清除0)
---------------------------------------------------------------------------------------
8、XST bit 表示震荡停止检测功能的检测结果位
预先写入1,则检测出内部振动停止时为0。
-----------------------------------------------------------------
/XST | 数据 | 内 容
-----------------------------------------------------------------
| 0 | 禁止设定虽无任何影响但请不要进行设定
Write | 1 | 将振动停止检测功能设定为可使用状态为下次检测做准备
-----------------------------------------------------------------
| 0 | 有振动停止,结果保持至清除1
Read | 1 | 无振动停止
-----------------------------------------------------------------
9、WAFG bit
只在WALE bit 为1时有效,因发生警报W,变为1。这时发生的/INTB=“L”可通过写入0设置为OFF
10、DAFG bit
只在DALE bit 为1时有效因,发生警报D,变为1。这时发生的/INTA=“L”可通过写入0 设置为OFF
11、综合
-----------------------------------------------------------------------------------------------
Address Fh | 推测状况
Control2 Register |
-----------------------------------------------------------------------------------------------
bit4 | Bit5 | Bit6 | 电源振动电路的状态 | 计时/备份的状态
PON | XST | VDET | |
-----------------------------------------------------------------------------------------------
0 | 0 | 0 |电源电压不降,低但振动停止 | 发生计时异常-->须进行初始设定
| | | | *因凝结等情况发生计时暂时停止
-----------------------------------------------------------------------------------------------
0 | 0 | 1 |电源电压降低且振动停止 |发生计时异常-->须进行初始设定
| | | |*因备用电源降低等情况发生计时停止
-----------------------------------------------------------------------------------------------
0 | 1 | 0 | 正常状态 | 正常状态
-----------------------------------------------------------------------------------------------
0 | 1 | 1 | 虽电源降低但振动仍继续 | 计时正常但电源有异常
| | | |*备用电源等降低到危险状态
-----------------------------------------------------------------------------------------------
1 | 0 | X | 电源下降到0V |不管计时状况或是否电压降低,须进行初始设定
---------------------------------------------------|
1 | 1 | x |电源瞬停的可疑性大 |*因有在PON= 1 被初始化的bit,须进行初始设定
-----------------------------------------------------------------------------------------------
*/
//速度控制
#define RX8025_IIC_100K 4 //4uS 100K@8MHz,100K@4MHz
#define RX8025_IIC_400K 1 //1uS 340K@8MHz,370K@4MHz
#define RX8025_IIC_500K 0 //0uS 500K@8MHz,180K@4MHz
#define RX8025_SPEED RX8025_IIC_400K
#define RX8025_STATE_NOACK (0)
#define RX8025_STATE_ACK (1)
#define RX8025_SCK_PORT PORTB
#define RX8025_SCK_PORT_PIN PINB
#define RX8025_SCK_PORT_DDR DDRB
#define RX8025_SDA_PORT PORTB
#define RX8025_SDA_PORT_PIN PINB
#define RX8025_SDA_PORT_DDR DDRB
#define RX8025_SCK 4 //实时时钟时钟线引脚
#define RX8025_SDA 3 //实时时钟数据线引脚
#define RX8025_SCK_OUT() RX8025_SCK_PORT_DDR |= (1<<RX8025_SCK)
#define RX8025_SCK_HIGH() RX8025_SCK_PORT |= (1<<RX8025_SCK)
#define RX8025_SCK_LOW() RX8025_SCK_PORT &= ~(1<<RX8025_SCK)
#define RX8025_SDA_OUT() RX8025_SDA_PORT_DDR |= (1<<RX8025_SDA)
#define RX8025_SDA_IN() RX8025_SDA_PORT_DDR &= ~(1<<RX8025_SDA)
#define RX8025_SDA_HIGH() RX8025_SDA_PORT |= (1<<RX8025_SDA)
#define RX8025_SDA_LOW() RX8025_SDA_PORT &= ~(1<<RX8025_SDA)
#define RX8025_SDA_GET() ( (RX8025_SDA_PORT_PIN>>RX8025_SDA)&0x01 )
#define RX8025_TIME_LENGTH 7
#define RX8025_CH (0b10000000) //时钟工作,0时钟工作
#define RX8025_24H (0b01000000) //工作模式,0为24小时制
#define RX8025_ADDR_SEC 0
#define RX8025_ADDR_MIN 1
#define RX8025_ADDR_HOUR 2
#define RX8025_ADDR_WEEK 3
#define RX8025_ADDR_DATE 4
#define RX8025_ADDR_MON 5
#define RX8025_ADDR_YEAR 6
#define RX8025_ADDR_CTRL 7
#define RX8025_ADDR_RAM 8
#define RX8025_RD (0x65)
#define RX8025_WR (0x64)
#define DELAY() asm("nop");
/********************************************************************
宏函数
********************************************************************/
extern unsigned char gTime[RX8025_TIME_LENGTH];
/********************************************************************
函数声明
********************************************************************/
/*--------------------------------------------------------------------
函数名称:RX8025读日期时间
--------------------------------------------------------------------*/
void RX8025_GetDateTime(unsigned char *timebuf);
/*--------------------------------------------------------------------
函数名称:DS1302设置日期时间
--------------------------------------------------------------------*/
void RX8025_SetDateTime(unsigned char *timebuf);
/*--------------------------------------------------------------------
函数名称:RX8025初始化
--------------------------------------------------------------------*/
void RX8025_Init(void);
#endif
[/mw_shl_code]
加载中...
jackielau
6楼-- · 2019-08-14 17:00
模拟IIC,仅供参考
加载中...
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
差不多吧,AC的你弄会了T的不会?你难道通过互联网同步?
不然肯定得写啊。
[mw_shl_code=c,true]//////////////////////////////////////////////////////
////////////时间日期芯片RX8025///////////////////////
////////////////////////////////////////////////////
#include "RX8025.h"
static unsigned char RX8025_State;
unsigned char gTime[RX8025_TIME_LENGTH];
void RX8025_IIC_Init(void)
{
RX8025_SCK_HIGH();
RX8025_SDA_HIGH();
RX8025_SCK_OUT();
RX8025_SDA_OUT();
}
void RX8025_IIC_Start(void)
{
RX8025_SCK_HIGH();
RX8025_SDA_HIGH();
RX8025_SCK_OUT();
RX8025_SDA_OUT();
RX8025_SDA_LOW();
DelayUs(RX8025_SPEED);
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
}
void RX8025_IIC_Stop(void)
{
RX8025_SCK_OUT();
RX8025_SDA_OUT();
RX8025_SDA_LOW();
DelayUs(RX8025_SPEED);
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
RX8025_SDA_HIGH();
DelayUs(RX8025_SPEED);
}
void RX8025_IIC_WriteByte(unsigned char Data)
{
unsigned char i;
RX8025_SCK_OUT();
RX8025_SDA_OUT();
for(i=0;i<8;i++)
{
if( (Data&0x80)==0x00 )
{
RX8025_SDA_LOW();
}
else
{
RX8025_SDA_HIGH();
}
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
Data <<= 1;
}
RX8025_SDA_IN(); //读取数据第九位-从机确认位
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
i = RX8025_SDA_GET(); //检测是否有应答
if( i!=0x00 )
{
RX8025_State = RX8025_STATE_NOACK;
}
else
{
RX8025_State = RX8025_STATE_ACK;
}
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
}
unsigned char RX8025_IIC_ReadByte(unsigned char ACK)
{
unsigned char i,Data,temp;
RX8025_SCK_OUT();
RX8025_SDA_IN();
Data = 0x00;
for(i=0;i<8;i++)
{
Data <<= 1;
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
temp = RX8025_SDA_GET();
if( temp!=0x00 )
{
Data |= 0x01;
}
else
{
}
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
}
RX8025_SDA_OUT(); //主机读数据时,需要根据工作状况发送ACK
if(ACK) //发应答
{
RX8025_SDA_LOW();
}
else
{
RX8025_SDA_HIGH(); //不发应答
}
RX8025_SCK_HIGH();
DelayUs(RX8025_SPEED);
RX8025_SCK_LOW();
DelayUs(RX8025_SPEED);
return Data;
}
/*--------------------------------------------------------------------
函数名称:RX8025读日期时间
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void RX8025_GetDateTime(unsigned char *timebuf)
{
unsigned char i;
uint8_t buf[RX8025_TIME_LENGTH];
RX8025_IIC_Start();
RX8025_IIC_WriteByte(RX8025_WR);
RX8025_IIC_WriteByte(0x00);
RX8025_IIC_Start();
RX8025_IIC_WriteByte(RX8025_RD);
for (i=0x00;i<RX8025_TIME_LENGTH;i++)
{
buf=RX8025_IIC_ReadByte(1);//接收后,单片机回复应答
}
RX8025_IIC_ReadByte(0);//接收后,单片机不回复应答
RX8025_IIC_Stop();
//buf[RX8025_ADDR_SEC] &= ~RX8025_CH;
//buf[RX8025_ADDR_HOUR] &= ~RX8025_24H;
for (i=0x00;i<RX8025_TIME_LENGTH;i++)
{
timebuf = buf;
}
}
/*--------------------------------------------------------------------
函数名称:DS1302设置日期时间
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void RX8025_SetDateTime(unsigned char *timebuf)
{
unsigned char i;
RX8025_IIC_Start();
RX8025_IIC_WriteByte(RX8025_WR);
RX8025_IIC_WriteByte(0x00);
for (i=0x00;i<RX8025_TIME_LENGTH;i++)
{
RX8025_IIC_WriteByte(timebuf);//接收后,单片机回复应答
}
RX8025_IIC_Stop();
}
/*--------------------------------------------------------------------
函数名称:RX8025初始化
函数功能:
注意事项:无
提示说明:无
输 入:无
返 回:无
--------------------------------------------------------------------*/
void RX8025_Init(void)
{
RX8025_IIC_Init();
RX8025_GetDateTime(gTime);
}
[/mw_shl_code]
[mw_shl_code=c,true]
/*********************************************************************
目 的: 建立RX8025操作库
目标系统: 基于AVR单片机
应用软件: WINGCC
版 本: Version 1.0
圆版时间: 2009-04-27
开发人员:
说 明:
*********************************************************************/
#ifndef __RX8025_H__
#define __RX8025_H__
#include <avr/io.h>
#include <avr/pgmspace.h>
#ifdef __OPTIMIZE__
#include "Mydelay.h"
#endif
/*
一、读写时序
1、S:起始位Start P:停止位STOP A:1307应答 MA:单片机应答 MNA:单片机不应答
2、写数据
| S | 11010000 | A | ADDR | A | DATA1 | A | DATA2 | ~ | A | DATA n | A | P |
3、读时序
| S | 11010001 | MA | DATA1 | MA | DATA2 | MA | DATA3 | ~ | MA | DATA n | MNA | P |
4、地址和数据高位在前
二、RX8025寄存器
-----------------------------------------------------------------------------------
ADDRESS | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 | FUNCTION | RANGE
-----------------------------------------------------------------------------------
00H | 0 | 10 Seconds | Seconds | Seconds | 00–59
-----------------------------------------------------------------------------------
01H | 0 | 10 Minutes | Minutes | Minutes | 00–59
-----------------------------------------------------------------------------------
| |20Hour| | | | 1–12
02H | 0 |------|10Hour| Hours Hours | | +AM/PM
| |PM/AM | | | | 00–23
-----------------------------------------------------------------------------------
03H | 0 | 0 0 0| | | 0 | DAY/WEEK | Day | 01–07
-----------------------------------------------------------------------------------
04H | 0 | 0 | 10 Date | Date | Date | 01–31
-----------------------------------------------------------------------------------
05H | 0 | 0 | 0 |10Month| Month | Month | 01–12
-----------------------------------------------------------------------------------
06H | 10 Year | Year | Year | 00–99
-----------------------------------------------------------------------------------
07H | 0 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | DataOffset | —
-----------------------------------------------------------------------------------
08H-0CH | | Alarm |
-----------------------------------------------------------------------------------
0DH | | Reserved |
-----------------------------------------------------------------------------------
0EH | WALE | DALE |/12,24| 0 | 0 | CT2 | CT1 | CT0 | Control1 |
-----------------------------------------------------------------------------------
0FH | VDSL | VDET | /XST | PON | 0 | CTFG | WAFG | DAFG | Control1 |
-----------------------------------------------------------------------------------
注意:
1、PON bit 是电源复位标志
刚接通电源时或电源电压下降复位后,PON bit设置为1,且除PON bit及/XST bit以外的Control1、
Control2 的各bit重设为0。注这时其他的寄存值不稳定,因而请务必执行初始设定后再使用。
此时,请不要设定日期、时间不正确的数据。因为不能保证这时的计时动作。
----------------------------------------------------------
PON | 数据 | 内 容
----------------------------------------------------------
| 0 | 将PON bit 清除为0 为下次检测做准备
Write| 1 | 禁止设定虽无任何影响但请不要进行设定
----------------------------------------------------------
| 0 | 无电源复位发生
Read | 1 | 有电源复位发生(结果保持至清除0) *Default
----------------------------------------------------------
2、WALE 时间报警生效位
Alarm W 功能(根据星期、时、分的一致性发生警报功能)的设定BIT,0报警生效,1报警有效/INTB=“L”
3、DALE 时间报警生效位
Alarm D 功能(根据时、分的一致性发生警报功能)的设定BIT,0报警生效,1报警有效/INTA=“L”
4、/12, 24 bit
对计时动作是设置为12小时制还是24 小时制作出选择。1为24小时制。
5、CT2, CT1, CT0 bit
对使用/INTA 引脚的固定周期中断功能的动作进行设定。
6、VDSL bit 低电压检测功能的标准电压值的选择设定位。
0:电源降低检测功能的标准电压值设定为2.1V
1:电源降低检测功能的标准电压值设定为1.3V
7、VDET bit 表示低电压检测功能的检测结果位。
检测出电源降低,则VDET=1。
---------------------------------------------------------------------------------------
VDET | 数据 | 内 容
---------------------------------------------------------------------------------------
| 0 | 将VDET bit 清除为0 重新开始低电压检测动作为下次检测作准备 *Default
Write | 1 | 禁止设定虽无任何影响但请不要进行设定
---------------------------------------------------------------------------------------
| 0 | 无低电压的检测 *Default
Read | 1 | 有低电压的检测(结果保持至清除0)
---------------------------------------------------------------------------------------
8、XST bit 表示震荡停止检测功能的检测结果位
预先写入1,则检测出内部振动停止时为0。
-----------------------------------------------------------------
/XST | 数据 | 内 容
-----------------------------------------------------------------
| 0 | 禁止设定虽无任何影响但请不要进行设定
Write | 1 | 将振动停止检测功能设定为可使用状态为下次检测做准备
-----------------------------------------------------------------
| 0 | 有振动停止,结果保持至清除1
Read | 1 | 无振动停止
-----------------------------------------------------------------
9、WAFG bit
只在WALE bit 为1时有效,因发生警报W,变为1。这时发生的/INTB=“L”可通过写入0设置为OFF
10、DAFG bit
只在DALE bit 为1时有效因,发生警报D,变为1。这时发生的/INTA=“L”可通过写入0 设置为OFF
11、综合
-----------------------------------------------------------------------------------------------
Address Fh | 推测状况
Control2 Register |
-----------------------------------------------------------------------------------------------
bit4 | Bit5 | Bit6 | 电源振动电路的状态 | 计时/备份的状态
PON | XST | VDET | |
-----------------------------------------------------------------------------------------------
0 | 0 | 0 |电源电压不降,低但振动停止 | 发生计时异常-->须进行初始设定
| | | | *因凝结等情况发生计时暂时停止
-----------------------------------------------------------------------------------------------
0 | 0 | 1 |电源电压降低且振动停止 |发生计时异常-->须进行初始设定
| | | |*因备用电源降低等情况发生计时停止
-----------------------------------------------------------------------------------------------
0 | 1 | 0 | 正常状态 | 正常状态
-----------------------------------------------------------------------------------------------
0 | 1 | 1 | 虽电源降低但振动仍继续 | 计时正常但电源有异常
| | | |*备用电源等降低到危险状态
-----------------------------------------------------------------------------------------------
1 | 0 | X | 电源下降到0V |不管计时状况或是否电压降低,须进行初始设定
---------------------------------------------------|
1 | 1 | x |电源瞬停的可疑性大 |*因有在PON= 1 被初始化的bit,须进行初始设定
-----------------------------------------------------------------------------------------------
*/
//速度控制
#define RX8025_IIC_100K 4 //4uS 100K@8MHz,100K@4MHz
#define RX8025_IIC_400K 1 //1uS 340K@8MHz,370K@4MHz
#define RX8025_IIC_500K 0 //0uS 500K@8MHz,180K@4MHz
#define RX8025_SPEED RX8025_IIC_400K
#define RX8025_STATE_NOACK (0)
#define RX8025_STATE_ACK (1)
#define RX8025_SCK_PORT PORTB
#define RX8025_SCK_PORT_PIN PINB
#define RX8025_SCK_PORT_DDR DDRB
#define RX8025_SDA_PORT PORTB
#define RX8025_SDA_PORT_PIN PINB
#define RX8025_SDA_PORT_DDR DDRB
#define RX8025_SCK 4 //实时时钟时钟线引脚
#define RX8025_SDA 3 //实时时钟数据线引脚
#define RX8025_SCK_OUT() RX8025_SCK_PORT_DDR |= (1<<RX8025_SCK)
#define RX8025_SCK_HIGH() RX8025_SCK_PORT |= (1<<RX8025_SCK)
#define RX8025_SCK_LOW() RX8025_SCK_PORT &= ~(1<<RX8025_SCK)
#define RX8025_SDA_OUT() RX8025_SDA_PORT_DDR |= (1<<RX8025_SDA)
#define RX8025_SDA_IN() RX8025_SDA_PORT_DDR &= ~(1<<RX8025_SDA)
#define RX8025_SDA_HIGH() RX8025_SDA_PORT |= (1<<RX8025_SDA)
#define RX8025_SDA_LOW() RX8025_SDA_PORT &= ~(1<<RX8025_SDA)
#define RX8025_SDA_GET() ( (RX8025_SDA_PORT_PIN>>RX8025_SDA)&0x01 )
#define RX8025_TIME_LENGTH 7
#define RX8025_CH (0b10000000) //时钟工作,0时钟工作
#define RX8025_24H (0b01000000) //工作模式,0为24小时制
#define RX8025_ADDR_SEC 0
#define RX8025_ADDR_MIN 1
#define RX8025_ADDR_HOUR 2
#define RX8025_ADDR_WEEK 3
#define RX8025_ADDR_DATE 4
#define RX8025_ADDR_MON 5
#define RX8025_ADDR_YEAR 6
#define RX8025_ADDR_CTRL 7
#define RX8025_ADDR_RAM 8
#define RX8025_RD (0x65)
#define RX8025_WR (0x64)
#define DELAY() asm("nop");
/********************************************************************
宏函数
********************************************************************/
extern unsigned char gTime[RX8025_TIME_LENGTH];
/********************************************************************
函数声明
********************************************************************/
/*--------------------------------------------------------------------
函数名称:RX8025读日期时间
--------------------------------------------------------------------*/
void RX8025_GetDateTime(unsigned char *timebuf);
/*--------------------------------------------------------------------
函数名称:DS1302设置日期时间
--------------------------------------------------------------------*/
void RX8025_SetDateTime(unsigned char *timebuf);
/*--------------------------------------------------------------------
函数名称:RX8025初始化
--------------------------------------------------------------------*/
void RX8025_Init(void);
#endif
[/mw_shl_code]
一周热门 更多>