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

📄 rtc.c

📁 基于 PLC935单片机的三相漏电检测系统
💻 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 + -