📄 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 + -