RX8025T时钟芯片

2019-08-13 20:35发布

不明白,这个时钟芯片怎样与实际的时钟同步,是要先写进去吗,还有它的初始化,网上大多都是8025AC的,8025T的没找到,谁用过这款芯片交流一下顺便帮忙解答一下吧,心累
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
jackielau
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]

一周热门 更多>