Ejemplo n.º 1
0
void GetDate(void)
{
//	date	= read_ds(0x07);
	timer.w_date	= read_ds(0x07);
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
//	month	= read_ds(0x08);
	timer.w_month	= read_ds(0x08);
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	//year	= read_ds(0x09);
	timer.w_year	= read_ds(0x09);
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	__nop();	__nop();	__nop();	__nop();
	timer.week=RTC_Get_Week(2000+timer.w_year,timer.w_month,timer.w_date);
}  
Ejemplo n.º 2
0
Archivo: rtc.c Proyecto: nvero/fmhobby
//得到当前的时间
//返回值:0,成功;其他:错误代码.
u8 RTC_Get(void)
{
	static u16 daycnt=0;
	u32 timecount=0; 
	u32 temp=0;
	u16 temp1=0;	  
	   
	timecount=RTC->CNTH;//得到计数器中的值(秒钟数)
	timecount<<=16;
	timecount+=RTC->CNTL;			 

	temp=timecount/86400;   //得到天数(秒钟数对应的)
	if(daycnt!=temp)//超过一天了
	{	  
		daycnt=temp;
		temp1=1970;	//从1970年开始
		while(temp>=365)
		{				 
			if(Is_Leap_Year(temp1))//是闰年
			{
				if(temp>=366)temp-=366;//闰年的秒钟数
				else break;  
			}
			else temp-=365;	  //平年 
			temp1++;  
		}   
		timer.w_year=temp1;//得到年份
		temp1=0;
		while(temp>=28)//超过了一个月
		{
			if(Is_Leap_Year(timer.w_year)&&temp1==1)//当年是不是闰年/2月份
			{
				if(temp>=29)temp-=29;//闰年的秒钟数
				else break; 
			}
			else 
			{
				if(temp>=mon_table[temp1])temp-=mon_table[temp1];//平年
				else break;
			}
			temp1++;  
		}
		timer.w_month=temp1+1;//得到月份
		timer.w_date=temp+1;  //得到日期 
	}
	temp=timecount%86400;     //得到秒钟数   	   
	timer.hour=temp/3600;     //小时
	timer.min=(temp%3600)/60; //分钟	
	timer.sec=(temp%3600)%60; //秒钟
	timer.week=RTC_Get_Week(timer.w_year,timer.w_month,timer.w_date);//获取星期   
	return 0;
}	 
Ejemplo n.º 3
0
unsigned char RTC_Get_Time(tim *timer)
{
    static unsigned short daycnt=0;
	unsigned int timecount=0;
	unsigned int temp=0;
	unsigned short temp1=0;
	RTC_WaitForLastTask();
	timecount=RTC->CNTH;//得到计数器中的值(秒钟数)
	timecount<<=16;
	timecount+=RTC->CNTL;
	temp=timecount/86400; //得到天数(秒钟数对应的)
	if(daycnt!=temp)//超过一天了
	{
		daycnt=temp;
		temp1=1970; //从1970年开始
		while(temp>=365)
		{
			if(Is_Leap_Year(temp1))//是闰年
			{
				if(temp>=366)temp-=366;//闰年的秒钟数
				else {temp1++;break;}
			}
			else temp-=365; //平年
			temp1++;
		}
		timer->year=temp1;//得到年份
		temp1=0;
		while(temp>=28)//超过了一个月
		{
			if(Is_Leap_Year(timer->year)&&temp1==1)//当年是不是闰年/2月份
			{
				if(temp>=29)temp-=29;//闰年的秒钟数
				else break;
			}
			else
			{
				if(temp>=mon_table[temp1])temp-=mon_table[temp1];//平年
				else break;
			}
			temp1++;
		}
		timer->month=temp1+1;//得到月份
		timer->date=temp+1; //得到日期
	}
	temp=timecount%86400; //得到秒钟数
	timer->hour=temp/3600; //小时
	timer->min=(temp%3600)/60; //分钟
	timer->sec=(temp%3600)%60; //秒钟
	//timer->sec = 0; //秒钟
	timer->week=RTC_Get_Week(timer->year,timer->month,timer->date);//获取星期
	return 0;
}
Ejemplo n.º 4
0
//得到当前的时间
//返回值:0,成功;其他:错误代码.
u8 Time_Get(void)
{
	static u16 daycnt = 0;
	u32 timecount = 0;
	u32 temp = 0;
	u16 temp1 = 0;
	xSemaphoreTake(RTCStructMutex, portMAX_DELAY);

	timecount = RTC_GetCounter();  //获得 RTC 计数器值(秒钟数)											 
	temp = timecount / 86400;   //得到天数(秒钟数对应的)
	if (daycnt != temp)//超过一天了
	{
		daycnt = temp;
		temp1 = 1970;	//从1970年开始
		while (temp >= 365)
		{
			if (Is_Leap_Year(temp1))//是闰年
			{
				if (temp >= 366)temp -= 366;//闰年的秒钟数
				else { temp1++; break; }
			}
			else temp -= 365;	  //平年 
			temp1++;
		}
		RTCTime.w_year = temp1;//得到年份
		temp1 = 0;
		while (temp >= 28)//超过了一个月
		{
			if (Is_Leap_Year(RTCTime.w_year) && temp1 == 1)//当年是不是闰年/2月份
			{
				if (temp >= 29)temp -= 29;//闰年的秒钟数
				else break;
			}
			else
			{
				if (temp >= mon_table[temp1])temp -= mon_table[temp1];//平年
				else break;
			}
			temp1++;
		}
		RTCTime.w_month = temp1 + 1;//得到月份
		RTCTime.w_date = temp + 1;  //得到日期 
	}
	temp = timecount % 86400;     //得到秒钟数   	   
	RTCTime.hour = temp / 3600;     //小时
	RTCTime.min = (temp % 3600) / 60; //分钟	
	RTCTime.sec = (temp % 3600) % 60; //秒钟
	RTCTime.week = RTC_Get_Week(RTCTime.w_year, RTCTime.w_month, RTCTime.w_date);//获取星期   
	xSemaphoreGive(RTCStructMutex);
	return 0;
}