📄 rtc.c
字号:
#include"reg935.h"
#include"UserDef.h"
uint idata delayCount;
uchar data recCurrentTimeBuf[7]; //暂存当前时间缓冲器[0]=世纪[1]=年[2]=月[3]=日[4]=时[5]=分[6]=秒
extern uint data delayTime;
extern uchar data recPresetData[4];
extern void ReadEEPROMByte(uchar orgAddr, uchar dataSize, uchar *bufPtr);
extern void EEPROMWriteByte(uchar orgAddr, uchar dataSize, uchar *bufPtr);
void TimeGenerator(void);
void RTC_ISR(void) interrupt 10
{
static uint secCount = 0;
EA=0;
secCount++;
RTCCON &= 0x63; //清除RTC中断标志位
TimeGenerator(); //时间产生
if(secCount==WRITE_EEPROM_INTERVAL) //到写EEPROM 时间
{
ReadEEPROMByte(EEPROM_TIME_ADDR, 7, recCurrentTimeBuf);
secCount = 0;
}
EA=1;
}
//---------------------------------------------------------------------------
//函数名称:void TimeGenerator(void)
//功能描述:产生时钟
//输入:无
//输出:无
//---------------------------------------------------------------------------
void TimeGenerator(void)
{
recCurrentTimeBuf[SEC]++;
if(recCurrentTimeBuf[SEC]>59)
{
recCurrentTimeBuf[SEC] = 0;
recCurrentTimeBuf[MIN]++;
delayCount++;
if(recCurrentTimeBuf[MIN]>59)
{
recCurrentTimeBuf[MIN] = 0;
recCurrentTimeBuf[HOUR]++;
if(recCurrentTimeBuf[HOUR]>23)
{
recCurrentTimeBuf[HOUR] = 0;
recCurrentTimeBuf[DATE]++;
switch(recCurrentTimeBuf[MON]) //查询当前月份
{
case 2: //是2 月份
if(((recCurrentTimeBuf[YEAR]!=0)&&(recCurrentTimeBuf[YEAR]%4==0))||((recCurrentTimeBuf[YEAR]==0)&&(recCurrentTimeBuf[CENT]%4==0)))
{
//是闰年2 月29 天
if(recCurrentTimeBuf[DATE]>29)
recCurrentTimeBuf[DATE] = 1;
}
else
{
//是平年2 月28 天
if(recCurrentTimeBuf[DATE]>28)
recCurrentTimeBuf[DATE] = 1;
}
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(recCurrentTimeBuf[DATE]>31)
recCurrentTimeBuf[DATE] = 1;
break;
default:
if(recCurrentTimeBuf[DATE]>30)
recCurrentTimeBuf[DATE] = 1;
break;
}
recCurrentTimeBuf[MON]++;
if(recCurrentTimeBuf[MON]>12)
{
recCurrentTimeBuf[MON] = 1;
recCurrentTimeBuf[YEAR]++;
if(recCurrentTimeBuf[YEAR]>99)
{
recCurrentTimeBuf[YEAR] = 0;
recCurrentTimeBuf[CENT]++;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -