⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.c

📁 ds1302使用例程
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
***************************************************************************************************
**
** 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 + -