?? rtc.c
字號:
/*******************************************************************************
*File: main.c
*功能: 運行RTC進行計時,并將所計時間值不斷地通過串口向上位機發送
*******************************************************************************/
#include "CFG.h"
/*
#define Bln_RTCReadYEAR
#define Bln_RTCReadMONTH
#define Bln_RTCReadDOY
#define Bln_RTCReadDOW
#define Bln_RTCReadDOM
#define Bln_RTCReadHOUR
#define Bln_RTCReadMIN
#define Bln_RTCReadSEC
*/
#ifdef Bln_RTCReadYEAR
uint16 RTC_ReadYEAR; //讀年值
#endif
#ifdef Bln_RTCReadMONTH
uint8 RTC_ReadMONTH; //讀月值
#endif
#ifdef Bln_RTCReadDOY
uint16 RTC_ReadDOY; //讀天值
#endif
#ifdef Bln_RTCReadDOW
uint8 RTC_ReadDOW; //讀星期值
#endif
#ifdef Bln_RTCReadDOM
uint8 RTC_ReadDOM; //讀日值
#endif
#ifdef Bln_RTCReadHOUR
uint8 RTC_ReadHOUR; //讀小時值
#endif
#ifdef Bln_RTCReadMIN
uint8 RTC_ReadMIN; //讀分值
#endif
#ifdef Bln_RTCReadSEC
uint8 RTC_ReadSEC; //讀秒值
#endif
void RTCInit(uint16 RTC_YEAR,uint8 RTC_MONTH,uint16 RTC_DOY,uint8 RTC_DOW,uint8 RTC_DOM,uint8 RTC_HOUR,uint8 RTC_MIN,uint8 RTC_SEC,uint16 RTC_CIIR);
void Func_RTCReadTime(void);
void Func_RTCRest(void);
void Func_RTCAMR(uint8 RTCAMR_YEAR,uint8 RTCAMR_MONTH,uint8 RTCAMR_DOY,uint8 RTCAMR_DOW,uint8 RTCAMR_DOM,uint8 RTCAMR_HOUR,uint8 RTCAMR_MIN,uint8 RTCAMR_SEC);
void Func_RTCAL(uint16 RTCAL_YEAR,uint8 RTCAL_MONTH,uint16 RTCAL_DOY,uint8 RTCAL_DOW,uint8 RTCAL_DOM,uint8 RTCAL_HOUR,uint8 RTCAL_MIN,uint8 RTCAL_SEC);
/****************************************************************************
* 名 稱:void Func_RTCReadTime(void)
* 功 能:讀出各個時間的值。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void Func_RTCReadTime(void)
{ uint32 RTCTimer;
//讀星期、小時、分、秒
RTCTimer=CTIME0;
#ifdef Bln_RTCReadDOW
RTC_ReadDOW=(RTCTimer>>24) & 0X07;
#endif
#ifdef Bln_RTCReadHOUR
RTC_ReadHOUR=(RTCTimer>>16) & 0X1F;
#endif
#ifdef Bln_RTCReadMIN
RTC_ReadMIN=(RTCTimer>>8) & 0X3F;
#endif
#ifdef Bln_RTCReadSEC
RTC_ReadSEC=(RTCTimer>>0) & 0X3F;
#endif
//讀年、月、日
RTCTimer=CTIME1;
#ifdef Bln_RTCReadYEAR
RTC_ReadYEAR=(RTCTimer>>16) & 0X0FFF;
#endif
#ifdef Bln_RTCReadMONTH
RTC_ReadMONTH=(RTCTimer>>8) & 0X0F;
#endif
#ifdef Bln_RTCReadDOM
RTC_ReadDOM=(RTCTimer>>0) & 0X1F;
#endif
//讀天數
RTCTimer=CTIME2;
#ifdef Bln_RTCReadDOY
RTC_ReadDOY=(RTCTimer>>0) & 0X1FF;
#endif
}
/****************************************************************************
* 名 稱:RTCInit()
* 功 能:初始化實時時鐘。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void RTCInit(uint16 RTC_YEAR,uint8 RTC_MONTH,uint16 RTC_DOY,uint8 RTC_DOW,uint8 RTC_DOM,uint8 RTC_HOUR,uint8 RTC_MIN,uint8 RTC_SEC,uint16 RTC_CIIR)
{ //RTC_DOY,一年當中的第幾天,RTC_DOW 星期,RTC_DOM幾號[例(1月1日)中的1日]
PREINT = Fpclk / 32768 - 1; // 設置基準時鐘分頻器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
if (RTC_YEAR)
{ YEAR = RTC_YEAR; // 設置年
}
if (RTC_MONTH)
{ MONTH = RTC_MONTH; // 設置月
}
if (RTC_DOY)
{ DOY=RTC_DOY; // 設置第幾天
}
if (RTC_DOW)
{ DOW = RTC_DOW; // 設置星期
}
if (RTC_DOM)
{ DOM=RTC_DOM; // 設置日
}
if (RTC_HOUR)
{ HOUR = RTC_HOUR; // 設置小時
}
if (RTC_MIN )
{ MIN = RTC_MIN; // 設置分鐘
}
if (RTC_SEC)
{ SEC = RTC_SEC; // 設置秒
}
CIIR =(CIIR& 0X0000) |(0X01<< RTC_CIIR); // 設置秒值的增量產生一次中斷
CCR = 0x01; // 啟動RTC
}
/****************************************************************************
* 名 稱:void Func_RTCRest(void)
* 功 能:復位實時時鐘。復位后,只有預分頻寄存器PREINT,PREFRAC的值被硬件初始化,其余的寄存器不變
* 入口參數:無
* 出口參數:無
****************************************************************************/
void Func_RTCRest(void)
{ CCR |= 0x02; // 復位RTC
}
/****************************************************************************
* 名 稱:void Func_RTCAMR(uint8 RTCAMR_YEAR,uint8 RTCAMR_MONTH,uint8 RTCAMR_DOY,
uint8 RTCAMR_DOW,uint8 RTCAMR_DOM,uint8 RTCAMR_HOUR,uint8 RTCAMR_MIN,uint8 RTCAMR_SEC)
* 功 能:報警屏蔽。
* 入口參數:RTCAMR_YEAR、RTCAMR_MONTH、RTCAMR_DOY...
* 出口參數:無
****************************************************************************/
void Func_RTCAMR(uint8 RTCAMR_YEAR,uint8 RTCAMR_MONTH,uint8 RTCAMR_DOY,uint8 RTCAMR_DOW,uint8 RTCAMR_DOM,uint8 RTCAMR_HOUR,uint8 RTCAMR_MIN,uint8 RTCAMR_SEC)
{ AMR=RTCAMR_SEC <<0 | //SEC報警屏蔽,1:屏蔽;0:禁止
RTCAMR_MIN <<1 | //MIN報警屏蔽,1:屏蔽;0:禁止
RTCAMR_HOUR <<2 | //HOUR報警屏蔽,1:屏蔽;0:禁止
RTCAMR_DOM <<3 | //DOM報警屏蔽,1:屏蔽;0:禁止
RTCAMR_DOW <<4 | //DOW報警屏蔽,1:屏蔽;0:禁止
RTCAMR_DOY <<5 | //DOY報警屏蔽,1:屏蔽;0:禁止
RTCAMR_MONTH<<6 | //MONTH報警屏蔽,1:屏蔽;0:禁止
RTCAMR_YEAR <<7 ; //YEAR報警屏蔽,1:屏蔽;0:禁止
}
/****************************************************************************
* 名 稱:void Func_RTCAMR(uint16 RTCAL_YEAR,uint8 RTCAL_MONTH,uint16 RTCAL_DOY,uint8 RTCAL_DOW,
uint8 RTCAL_DOM,uint8 RTCAL_HOUR,uint8 RTCAL_MIN,uint8 RTCAL_SEC)
* 功 能:報警比較值。
* 入口參數:RTCAL_YEAR、RTCAL_MONTH、RTCAL_DOY...
* 出口參數:無
****************************************************************************/
void Func_RTCAL(uint16 RTCAL_YEAR,uint8 RTCAL_MONTH,uint16 RTCAL_DOY,uint8 RTCAL_DOW,uint8 RTCAL_DOM,uint8 RTCAL_HOUR,uint8 RTCAL_MIN,uint8 RTCAL_SEC)
{ ALYEAR =RTCAL_YEAR;
ALMON =RTCAL_MONTH;
ALDOY =RTCAL_DOY;
ALDOW =RTCAL_DOW;
ALDOM =RTCAL_DOM;
ALHOUR =RTCAL_HOUR;
ALMIN =RTCAL_MIN;
ALSEC =RTCAL_SEC;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -