我的配置和时间设置程序如下,但测试时发现RTC的时钟不会从0-23循环,而是往24加,天数月数也不会变动,网上也没太多这方面资料,请做过的朋友指点下
:
/*
*通过I2C配置8025 采用多次发送提高发送成功率
*/
void RX8025T_Init(void)
{
uint8_t i;
for (i=0; i<3; i++)
{
if (TRUE == I2C_WriteByte(0x00,0x0d,I2C_RTC_write_ADDRESS))//扩展寄存器初始化
{
break;
}
}
for (i=0; i<3; i++)
{
if (TRUE == I2C_WriteByte(0x00,0x0e,I2C_RTC_write_ADDRESS))// 标志寄存器初始化
{
break;
}
}
for (i=0; i<3; i++)
{
if (TRUE == I2C_WriteByte(0x40,0x0f,I2C_RTC_write_ADDRESS))// 控制寄存器初始化
{
break;
}
}
}//end RX8025T_Init(void)
//判断是否掉过电,掉电则初始化
void RTC_Init(void)
{
uint8_t i, data_read;
for (i=0; i<3; i++)
{
if (TRUE == I2C_ReadByte(&data_read, 1, 0x0e,I2C_RTC_write_ADDRESS))
{
break;
}
}
if (0x02 == (data_read & 0x02)) //判断是否掉过电,掉电则初始化
{
RX8025T_Init();
}
}
void RTC_Write_Time(void)
{
uint8_t i;
RTC_TimeData[6] = HEX_To_BCD(RTC_TimeData[6]<100?RTC_TimeData[6]:0);//年 设置数字不能大于理论值
RTC_TimeData[5] = HEX_To_BCD(RTC_TimeData[5]<13?RTC_TimeData[5]:0); //月
RTC_TimeData[4] = HEX_To_BCD(RTC_TimeData[4]<32?RTC_TimeData[4]:0); //日
RTC_TimeData[3] = 0x01;//星期 设为 sunday 不做要求
RTC_TimeData[2] = HEX_To_BCD(RTC_TimeData[2]<24?RTC_TimeData[2]:0); //时
RTC_TimeData[1] = HEX_To_BCD(RTC_TimeData[1]<60?RTC_TimeData[1]:0); //分
RTC_TimeData[0] = HEX_To_BCD(RTC_TimeData[0]<60?RTC_TimeData[0]:0); //秒
RTC_Init();
//写入时间设置
for (i=0; i<3; i++)
{
if (TRUE == I2C_BufferWrite(RTC_TimeData, 16, 0x00, I2C_RTC_write_ADDRESS))
{
break;
}
}
}