📄 rtc.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 + -