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

📄 rtc.c

📁 RTC的运用及其编程 功能指导
💻 C
字号:
/*-----------------------------------------------------------------------------  

Author:

    QIAO

Date:

    2006/4/11 13:41
    
Descritptor:

//---------------------------------------------------------------------------*/  
#pragma large
#pragma ot( 9, size )

#include "A099.H"
#include "TFT_Draw.h"
#include "Linklayer.H"

#ifdef __RTC_FUNCTION__

#include "RTC.H"
 /*=============================================================================
Description:

        
=============================================================================*/

//add qiao 060419
volatile UCHAR xdata RTCR_Control1_0xf880          _at_      0xF880;
// Control ring_data Enable
volatile UCHAR xdata RTCR_Control2_0xf881          _at_      0xF881;
// Control q Enable 
volatile UCHAR xdata RTCR_Data                     _at_      0xF882;
//  RTC start count value or Interrupt ring_data control
volatile UCHAR xdata RTCR_IntControl_0xf883        _at_      0xF883;

ULONG  Ring_value;
ULONG  RTCInitvalue;

extern UCHAR  xdata SysStatus2;
extern UCHAR RTCAlarmStatus;
extern UCHAR C_HOUR_Value;
extern UCHAR C_MIN_Value;

 /*=============================================================================
Description:
        
=============================================================================*/

void RTCDelay100Cycle(UCHAR VALUE)
{
	UCHAR i;
 	for(i=0;i<VALUE;i++);
}

 /*=============================================================================
Description:
        
=============================================================================*/

void RTCInitilize()
{
	#if 1 //hna 080310
	
	RTCInitvalue=RTC_ReadQValue(0);
	
	#else
	ULONG SaveTime;	
	SaveTime=RTC_ReadQValue(0);
	Ring_value=SaveTime+SecPeryear; 
	RTC_SetQValue(SaveTime); 
	#endif
}
 
/*=============================================================================
Description:
        
=============================================================================*/

void RTCInitilize_2() //hna 080310
{
	ULONG SaveTime;	
	
	SaveTime=RTC_ReadQValue(0);
	
	if(SaveTime==RTCInitvalue)
	{
		RTCInitvalue=0;
		
		Ring_value=SaveTime+SecPeryear; 
		RTC_SetQValue(SaveTime); 
	}
}
 
/*=============================================================================
Description:
        
=============================================================================*/

ULONG RTC_ReadQValue(UCHAR N)
{
	
	ULONG TEMP;

	RTCR_Control2_0xf881 = 0x80 ;
	BYTE3(TEMP)= RTCR_Data;	      
	RTCR_Control2_0xf881 = 0x40 ;
	BYTE2(TEMP)= RTCR_Data;	
	RTCR_Control2_0xf881 = 0x20 ;
	BYTE1(TEMP)= RTCR_Data;
	RTCR_Control2_0xf881 = 0x10 ;
	BYTE0(TEMP)= RTCR_Data;                     
	RTCR_Control2_0xf881 = 0x00 ;  //add qiao 060419
	
	if(N)  //modify qiao 060815
		return TEMP;
	else
		return 	(TEMP>>5);	   
	
}

/*=============================================================================
Description:
        
=============================================================================*/

void RTC_SetQValue(ULONG QVALUE)
{
	
	WriteRTCRegster(QVALUE,Ring_value);
}

/*=============================================================================
Description:
        
=============================================================================*/

void WriteRTCRegster(ULONG Q,ULONG R)
{
	UCHAR TEMP1;
	ULONG TEMP;

	TEMP=Q<<5;
	RTCR_IntControl_0xf883=0x00;      //0xF883; //modify qiao 060425

	for(TEMP1=0;TEMP1<50; TEMP1 ++)
	{
		RTCDelay100Cycle(200);            
	} 

	RTCR_IntControl_0xf883 =0x80;	 //0xF883;

	//--------------------------------------------------------------------------
	RTCR_Control1_0xf880 = 0x08 ; 		  //0xF880; 	
	RTCR_Data =BYTE3(TEMP);
	RTCR_Control1_0xf880 = 0x04 ;  	
	RTCR_Data =BYTE2(TEMP);
	RTCR_Control1_0xf880 = 0x02 ; 	
	RTCR_Data =BYTE1(TEMP);
	RTCR_Control1_0xf880 = 0x01 ;
	RTCR_Data =BYTE0(TEMP);
	RTCR_Control1_0xf880 = 0x00 ;
	//--------------------------------------------------------------------------
	TEMP=R<<5;
	RTCR_Control1_0xf880 = 0x80 ;	
	RTCR_Data =BYTE3(TEMP);
	RTCR_Control1_0xf880 = 0x40 ;    	
	RTCR_Data =BYTE2(TEMP);
	RTCR_Control1_0xf880 = 0x20 ;  	
	RTCR_Data =BYTE1(TEMP);
	RTCR_Control1_0xf880 = 0x10 ;	          
	RTCR_Data =BYTE0(TEMP);
	RTCR_Control1_0xf880 = 0x00 ;

	RTCR_IntControl_0xf883 &= ~0x20;	 //0xF883; 

	for(TEMP1=0;TEMP1<50; TEMP1 ++)
	{
		RTCDelay100Cycle(200);            
	}

	RTCR_IntControl_0xf883 |= 0x20;		//0xa0

}
 
/*=============================================================================
Description:
        
=============================================================================*/

UCHAR RuningALARM()
{
	ULONG Temp1;

	if(RTCAlarmStatus)
	{
		Temp1 =  RTC_ReadQValue(1);	
		Temp1>>=5;

		if(bRTCFristFlg)
			goto __RTC_First__;

		SEC_Value=(UCHAR)((Temp1%SecPerminute));

		if(!SEC_Value)      
		{
		
__RTC_First__:

			HOUR_Value=(UCHAR)((Temp1%SecPerday)/SecPerhour);  

			if(C_HOUR_Value==HOUR_Value)
			{
				MIN_Value=(UCHAR)((Temp1%SecPerhour)/SecPerminute); 

				if(C_MIN_Value==MIN_Value)
				{
					bRTCAlarmFlg=1;
					return TRUE;
				}
			}
		}   
	}

	return FALSE;	
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -