📄 rtc.c
字号:
Void RTC_Init(void)
{
rRTCCON = 0x01;
rBCDYEAR = TESTYEAR;
rBCDMON = TESTMONTH;
rBCDDAY = TESTDAY;
rBCDDATE = TESTDATE;
rBCDHOUR = TESTHOUR;
rBCDMIN = TESTMIN;
rBCDSEC = TESTSEC;
rRTCCON = 0x0;
}
void Test_Tick_RTC(void) // RTC时间片控制程序
{
pISR_TICK = (unsigned int)Rtc_Tick;
rRTCCON = 0x01;
sec_tick = 1;
rINTMSK = ~(BIT_GLOBAL | BIT_TICK);
rRTCCON = 0x0; //关闭R/W功能
rTICINT = 127 + (1<<7); //启动时间片中断功能
}
void Tick_RTC(void) //RTC工作检测程序
{
rI_ISPC = BIT_TICK; //清除时间片中断标志
RTC_OK = 1; //RTC检测标志置位
}
void check_RTC(void)
{
int i = 0;
RTC_OK = 0; //检测标志位清除
rRTCCON = 0x01; //R/W使能
Test_Tick_RTC(); //测试初始化函数
for(I = 0; i<0xffff; i++); //等待时间中断
for(I = 0; i<0xffff; i++); //等待时间中断
rINTMSK |= BIT_TICK; //禁止时间中断
rRTCCON = 0x0; //检测结束
rINTCON = 0x3;
}
void Display_RTC(void) // RTC显示控制程序
{
int year, month, weekday, hour, min, sec;
rRTCCON = 0x01; //R/W使能;
while(1)
{
if(rBCDYEAR == 0x99)
{
year = 0x1999;
}
else
{
year = 0x2000 + rBCDYEAR;
}
month = rBCDMON;
day = rBCDDAY;
weekday = rBCDDATE;
hour = rBCDHOUR;
min = rBCDMIN;
sec = rBCDSEC;
if(sec != 0) //如果秒为0值,则要求重新读取RTC一次
break;
}
UART_Printf(“%4x, %2x, %2x, %s”, year, month, day, date[weekday]);
UART_Printf(“%2x, %2x, %2x”, hour, min, sec);
}
void main(void)
{
char aa;
int i;
Uart_Init(0,115200); //UART初始化
Uart_Select(0); //Select UART0//
Uart_Printf("\n*UART Config--COM:115.2kbps,8Bit,NP,UART0*");
Uart_Printf("\n*--------------Begin to Start RTC test,OK? (Y/N)-------------*");
RTC_Init(); //RTC初始化
aa= Uart_Getch();
if((aa=='Y')||(aa=='y'))
{
Display_RTC();
}
Else
{
UART_Printf(“\n you have input a wrong key !\n”);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -