📄 rtc.c
字号:
/***********************************************************************/
/* */
/* FILE :rtc.c */
/* DESCRIPTION :RTC */
/* CPU TYPE :H8/38104F */
/* */
/* This file is generated by Renesas Project Generator (Ver.3.1). */
/* */
/***********************************************************************/
/* 宁波三星科技有限公司 */
/* 文件名:rtc.C */
/* 作者: 叶孟军 */
/* 开始日期:2005年7月22日 */
/* 模块功能: 该程序是完成时钟模块的输出 */
/* 模块性能: 该程序需完成星期、闰年判断 */
/* 模块输入项:秒信号:flg_1s */
/* 模块输出项:日期 RDtWk_Dtr, 时间RTm_Dtr[3];
/************************************************************************/
#include <machine.h>
#include "extern.h"
/************************************************************************/
const unsigned char Month_Day[12]={0x31,0x28,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x31,0x30,0x31};
unsigned int HEX2BCD(unsigned char hex_data) //十六进制到十进制的转变
{
unsigned int bcd_data;
unsigned char temp;
temp=hex_data%100;
bcd_data=((unsigned int)hex_data)/100<<8;
bcd_data=bcd_data|temp/10<<4;
bcd_data=bcd_data|temp%10;
return bcd_data;
}
unsigned char Judge_BCD1(unsigned char data)
{
if(((data & 0xf0) > 0x90) || ((data & 0x0f) > 0x09))
{
return 1;
}
else
{
return 0;
}
}
unsigned char Data_BcdAdd(unsigned char data)
{
++data;
if((data & 0x0f) > 9)
{
data = data + 0x06;
}
if((data & 0xf0) > 0x90)
{
data = 0x00;
}
return data;
}
void Rtc_Add(void)
{
unsigned char i;
RTm_Dtr[0] = Data_BcdAdd(RTm_Dtr[0]) ; //秒寄存器
if(RTm_Dtr[0] == 0x60)
{
RTm_Dtr[1] = Data_BcdAdd(RTm_Dtr[1]); //分钟寄存器
RTm_Dtr[0] = 0x00;
if(RTm_Dtr[1] == 0x60) //分钟寄存器数据为60min
{
RTm_Dtr[2] = Data_BcdAdd(RTm_Dtr[2]); //小时寄存器
RTm_Dtr[1] = 0x00; //分钟寄存器数据清零
if(RTm_Dtr[2] == 0x24)
{
RTm_Dtr[2] = 0x00; //小时寄存器数据清零
RDtWk_Dtr[0]++; //星期寄存器数据加1
if(RDtWk_Dtr[0] >= 0x07)
{
RDtWk_Dtr[0] = 0x00;
}
RDtWk_Dtr[1] = Data_BcdAdd(RDtWk_Dtr[1]);
if(((RDtWk_Dtr[3] % 4) == 0x00) && (RDtWk_Dtr[2] == 0x02)) //为闰年闰月
{
if(RDtWk_Dtr[1] > 0x29)
{
RDtWk_Dtr[1] = 0x01;
RDtWk_Dtr[2] = Data_BcdAdd(RDtWk_Dtr[2] ); //月寄存器数据加1
if(RDtWk_Dtr[2] > 0x12) //大于12月
{
RDtWk_Dtr[2] = 0x01;
RDtWk_Dtr[3] = Data_BcdAdd(RDtWk_Dtr[3]);
}
}
}
else
{
if(RDtWk_Dtr[1] > Month_Day[Bcd_hex(RDtWk_Dtr[2]) -1]) //当日期寄存器数据大于表格中数据
{
RDtWk_Dtr[1] = 0x01;
RDtWk_Dtr[2] = Data_BcdAdd(RDtWk_Dtr[2] ); //月寄存器数据加1
if(RDtWk_Dtr[2] > 0x12) //大于12月
{
RDtWk_Dtr[2] = 0x01;
RDtWk_Dtr[3] = Data_BcdAdd(RDtWk_Dtr[3]);
}
}
}
}
}
}
}
void Rtc_Judge(void)
{
unsigned char i;
unsigned char Min_Flg = 0x00;
if(Power_Flg.BYTE != 0x01) //电源正常模式
{
if((RTm_Dtr[0] > 0x60) || (RTm_Dtr[1] >0x60) || (RTm_Dtr[2] > 0x24) ||(RDtWk_Dtr[1] > 0x31) || (RDtWk_Dtr[2] > 0x12) || (RDtWk_Dtr[3] > 0x99)
|| (Judge_BCD1(RTm_Dtr[0])) || (Judge_BCD1(RTm_Dtr[1])) || (Judge_BCD1(RTm_Dtr[1])) || (Judge_BCD1(RDtWk_Dtr[1])) || (Judge_BCD1(RDtWk_Dtr[2])) || (Judge_BCD1(RDtWk_Dtr[3])))
{
F_BlckRead_Eeprm(Rtc_Time,RTm_Dtr,0x03); //从E2P中读取时间
F_BlckRead_Eeprm(Rtc_Time,RDtWk_Dtr,0x04); //从E2P中读取日期
}
}
if((RTm_Dtr[0] == 0x00) && (RTm_Dtr[1] == 0x00) && (RTm_Dtr[2] == 0x00) && (Min_Flg != 0x68 )) //当时间为零点零分零秒时,当前时钟保存到E2P中
{
Min_Flg = 0x68;
F_BlckWrt_Eeprm(Rtc_Time,RTm_Dtr,0x03); //时间写到E2P中
F_BlckWrt_Eeprm(Rtc_Time+3,RDtWk_Dtr,0x04); //日期写到E2P中
}
if(RTm_Dtr[0] != 0x00) //当当前时钟已过1秒
{
Min_Flg = 0x00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -