📄 ds1302.c
字号:
/*
***************************************************************************************************
**
** Module : <DS1302.c>
** Description : <ds1302 控制>
** Originator : <yxy>
** Creation Date : 2008.10.19
** Identity : XXXXX.XXXX.XXX
**
** Modification History :
** XX/XX/XXX : <by who> : <why>
** 2008.10.27 cpp 读写好用
**
** (c) 2006 BEIJING MILLENNIA ELECTRONIC TECHNOLOGY CO.,Ltd
**
***************************************************************************************************
*/
/*
**-------------------------------------------------------------------------------------------------
** INCLUDE FILES
**-------------------------------------------------------------------------------------------------
*/
#include "config.h"
#include "MlInclude.h" // 通用头文件
#include "ds1302.h"
//#include "MlHardwareDrv.h"
#include "time.h"
#include "stdio.h"
/*
**-------------------------------------------------------------------------------------------------
** PREPROCESSOR CONSTANTS
**-------------------------------------------------------------------------------------------------
*/
/*
**-------------------------------------------------------------------------------------------------
** PREPROCESSOR MACROS
**-------------------------------------------------------------------------------------------------
*/
/*
**-------------------------------------------------------------------------------------------------
** GLOBAL VARIABLES
**-------------------------------------------------------------------------------------------------
*/
/*
**-------------------------------------------------------------------------------------------------
** PRIVATE TYPES
**-------------------------------------------------------------------------------------------------
*/
/*
**-------------------------------------------------------------------------------------------------
** PRIVATE DATA
**-------------------------------------------------------------------------------------------------
*/
/*
**-------------------------------------------------------------------------------------------------
** PRIVATE FUNCTION PROTOTYPE
**-------------------------------------------------------------------------------------------------
**
*/
/*
**-------------------------------------------------------------------------------------------------
**函数名:DS1302Init()
**功能描述:DS1302初始化
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
void DS1302Init(void)
{
// DS1302上电初始化
DS1302_CTL();
DS1302_DIR_OUT();
DS1302_PORT_LOW();
// DS1302上电自检
g_DS1302State = upPowerDS1302Chk();
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:Ds1302Delay(INT32U n)
**功能描述:时钟延时
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
void Ds1302Delay(INT32U n)
{
INT32U i;
for (i = 0; i < n; i++)
{
;
}
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:ds1302_sendbits( int val)
**功能描述:发送一字节(byte)
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
void ds1302_sendbits(INT16 val)
{
INT8U i;
for (i = 8; i > 0 ; i-- )
{
DS1302_SDA_OUT(val); // DS1302_out = (DS1302_out & ~RTC_IODATA) | ((val & 0x1) ? RTC_IODATA : 0);
//Ds1302Delay(1); // TCDH >= 280ns
DS1302_SCL_HIG(); // DS1302_out |= RTC_SCLK;
//Ds1302Delay(1);
DS1302_SCL_LOW(); // DS1302_out &= ~ RTC_SCLK;
//Ds1302Delay(1); // TDC >= 200ns
val >>= 1;
}
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:ds1302_recvbits(void)
**功能描述:接收一字节(byte)
**输入:
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
INT16 ds1302_recvbits(void)
{
INT8U i;
INT16 val = 0;
for (i = 0 ;i < 8; i++)
{
DS1302_SCL_LOW(); // DS1302_out &= ~RTC_SCLK;
//Ds1302Delay(1); // TCDD <= 800ns
val |= DS1302_SDA_IN(i); // val |= (((DS1302_in & RTC_IODATA) ? 1 : 0) << i);
DS1302_SCL_HIG(); // DS1302_out |= RTC_SCLK;
//Ds1302Delay(1); // TCCZ <= 280ns
// DS1302_out &= ~RTC_SCLK;
}
return (val);
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:ds1302_readbyte( int addr)
**功能描述:读取一完整的字节命令
**输入参数1:addr:寄存器地址
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
INT16 ds1302_readbyte(INT16 addr)
{
INT16 val;
DS1302_DIR_OUT(); // DS1302_dirp |= RTC_RESET | RTC_IODATA | RTC_SCLK;
DS1302_PORT_LOW(); // DS1302_out &= ~(RTC_RESET | RTC_IODATA | RTC_SCLK);
// Ds1302Delay(100);
DS1302_RESET_HIG(); // DS1302_out |= RTC_RESET;
if(addr >= 0x0c0)
{
ds1302_sendbits(addr);
}
else
{
ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_READ);
}
DS1302_SDA_DIR_IN(); // DS1302_dirp &= ~RTC_IODATA;
val = ds1302_recvbits();
DS1302_RESET_LOW(); // DS1302_out &= ~RTC_RESET;
return(val);
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:ds1302_writebyte( int addr, int val)
**功能描述:写一完整的字节命令
**输入参数1:addr:寄存器地址
**输入参数2:val:数据
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
void ds1302_writebyte(INT16 addr,INT16 val)
{
DS1302_DIR_OUT(); // DS1302_dirp |= RTC_RESET | RTC_IODATA | RTC_SCLK;
DS1302_PORT_LOW(); // DS1302_out &= ~(RTC_RESET | RTC_IODATA | RTC_SCLK);
//Ds1302Delay(100);
DS1302_RESET_HIG(); // DS1302_out |= RTC_RESET;
//写入到RAM区
if(addr>=0x0c0)
{
ds1302_sendbits(addr);
}
else
{
ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_WRITE);
}
ds1302_sendbits(val);
DS1302_RESET_LOW(); // DS1302_out &= ~RTC_RESET;
}
/*
**-------------------------------------------------------------------------------------------------
**函数名:SysTimeWrite(tm CurrentTime)
**功能描述:写时间
**输入参数1:CurrentTime:时间参数
**输出:
**建立时间:2008.10.19
**-------------------------------------------------------------------------------------------------
**
*/
void SysTimeWrite(tm CurrentTime)
{
/*
printf("ds1302_init=%d \n ",ds1302_readbyte(0x0cd));
Hardware dependant reset/init
if(ds1302_readbyte(0x0cd)!=0x01) // 暂时无用
DS1302_dirp |= RTC_RESET | RTC_IODATA | RTC_SCLK;
DS1302_out &= ~(RTC_RESET | RTC_IODATA | RTC_SCLK);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -