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

📄 rtc.c

📁 arm芯片LPC2214下的实时时钟DS1302的源程序
💻 C
字号:
/****************************************Copyright (c)************************************************
**
**                              	  深圳托普林科技有限公司
**                                 http://www.sztopping.com
**
**----------------------------------------------------------------------------------------------------
名称:RTC.C
功能:实时时钟
作者:Albert
日期:2004-11-17
说明:
*****************************************************************************************************/ 

#include  "config.h"
#include  "RTC.h"


#define  RTC_CLK	(1<<19)	
#define  RTC_IO		(1<<18)
#define  RTC_RST	(1<<17)

#define  RTC_CLK_H	IO2SET = RTC_CLK
#define  RTC_CLK_L  IO2CLR = RTC_CLK
#define  RTC_IO_H	IO2SET = RTC_IO
#define  RTC_IO_L   IO2CLR = RTC_IO
#define  RTC_RST_H	IO2SET = RTC_RST
#define  RTC_RST_L  IO2CLR = RTC_RST


DateTimeType  gDateTime;	//日期时钟

#define DELAY  400

/****************************************************************************
* 名   称: RTC_WrByte()
* 功   能: 实时时钟写入一字节
* 入口参数: ucDa:写入的数据
* 出口参数:
****************************************************************************/
void RTC_WrByte(uint8 ucDa)
{
	uint16 j;
	uint8 i,data;
	
	data = ucDa;
	for(i=8;i>0;i--)
	{
		if(data & 0x01)
			RTC_IO_H;
		else
			RTC_IO_L;
		RTC_CLK_H;
		for(j=0;j<DELAY;j++);
		RTC_CLK_L;
		data = data >> 1;
	}
}

/****************************************************************************
* 名   称: RTC_RdByte()
* 功   能: 实时时钟读出一字节
* 入口参数: 
* 出口参数: data:返回数据
****************************************************************************/
uint8 RTC_RdByte(void)
{
	uint16 j;
	uint8 i,data = 0;
	
	IO2DIR &= ~(1<<18);		//RTC_IO 输入
	for(i=8;i>0;i--)
	{
		data = data >> 1; 		
		if(IO2PIN & RTC_IO)
			data |= (1<<7);		
		RTC_CLK_H;
		for(j=0;j<DELAY;j++);
		RTC_CLK_L;
	}
	IO2DIR |= (1<< 18);		//RTC_IO 输出
	return (data);
}

/****************************************************************************
* 名   称: RTC_WrData()
* 功   能: 实时时钟写数据到地址中
* 入口参数: ucAddr:地址,ucDa:数据
* 出口参数: 
****************************************************************************/
void RTC_WrData(uint8 ucAddr,uint8 ucDa)
{
	uint16 j;
	
	RTC_RST_L;
	for(j=0;j<DELAY;j++);
	RTC_CLK_L;
	for(j=0;j<DELAY;j++);
	RTC_RST_H;
	RTC_WrByte(ucAddr);			//地址,命令
	RTC_WrByte(ucDa);			//写入1BYTE数据
	RTC_CLK_H;
	for(j=0;j<DELAY;j++);
	RTC_CLK_L;
}


/****************************************************************************
* 名   称: RTC_RdData()
* 功   能: 实时时钟从地址中读出一字节
* 入口参数: ucAddr:地址
* 出口参数:data:返回数据 
****************************************************************************/
uint8 RTC_RdData(uint8 ucAddr)
{
	uint8 data;
	
	RTC_RST_L;
	RTC_CLK_L;
	RTC_RST_H;
	RTC_WrByte(ucAddr);			//地址,命令
	data = RTC_RdByte();		//读出1BYTE数据
	RTC_CLK_H;
	RTC_CLK_L;
	return (data);
}

/****************************************************************************
* 名   称: RTC_SetClock()
* 功   能: 设置RTC初始时钟
* 入口参数: *pClock:初始时钟数据地址 S M H D M W Y (7Byte BCD码)
* 出口参数:
****************************************************************************/
void RTC_SetClock(DateTimeType *pClock)
{
	RTC_WrData(0x8e,0x00);
	
	RTC_WrData(0x80,pClock->second);
	RTC_WrData(0x82,pClock->minute);
	RTC_WrData(0x84,pClock->hour);
	RTC_WrData(0x86,pClock->day);
	RTC_WrData(0x88,pClock->month);
	RTC_WrData(0x8A,pClock->week);
	RTC_WrData(0x8C,pClock->year);
	
	RTC_WrData(0x8e,0x80);
}


/****************************************************************************
* 名   称: RTC_GetClock()
* 功   能: 获取RTC的当前时间  S M H D M W Y (7Byte BCD码)
* 入口参数: *pCurTime:读取当前时间存储区 
* 出口参数:
****************************************************************************/
void RTC_GetClock(DateTimeType *pCurTime)
{
	pCurTime->second= RTC_RdData(0x81);
	pCurTime->minute= RTC_RdData(0x83);
	pCurTime->hour  = RTC_RdData(0x85);
	pCurTime->day   = RTC_RdData(0x87);
	pCurTime->month = RTC_RdData(0x89);
	pCurTime->week  = RTC_RdData(0x8B);
	pCurTime->year  = RTC_RdData(0x8D);	
}

/****************************************************************************
* 名   称: Init_RTC()
* 功   能: 初始化RTC
* 入口参数: 
* 出口参数:
****************************************************************************/
void Init_RTC(void)
{   
	uint16 i;
	              
	RTC_CLK_L;
	RTC_RST_L;
	for(i=0;i<DELAY*2;i++);		//延时4us
	RTC_RST_H;
	RTC_WrData(0x8e,0x00);	//打开写保护
	//RTC_WrData(0x80,0x00);	//对秒寄存器写数,启动计时
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -