📄 rtc.c
字号:
#include "../inc/44b0x.h"
#include "../inc/console.h"
#include "../inc/rtc.h"
/*********************************************************/
#define RTC_YEAR0 (0x03) //年
#define RTC_MONTH0 (0x02) //月
#define RTC_DAY0 (0x0e) //日
#define RTC_DATE0 (0x06) //星期SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
#define RTC_HOUR0 (0x08) //小时
#define RTC_MIN0 (0x08) //分
#define RTC_SEC0 (0x08) //秒
#define RTC_YEAR1 (0x03) //年
#define RTC_MONTH1 (0x03) //月
#define RTC_DAY1 (0x0e) //日
#define RTC_DATE1 (0x06) //星期-SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
#define RTC_HOUR1 (0x08) //小时
#define RTC_MIN1 (0x08) //分
#define RTC_SEC1 (0x08) //秒
#define RTC_RW_EN() rRTCCON = 1 //|= 1
#define RTC_RW_DS() rRTCCON &= 0xfe
void rtcSetDate (PTIME pTime)
{
RTC_RW_EN (); //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
rBCDYEAR = pTime->wYear;; //年
rBCDMON = pTime->byMonth; //月
rBCDDAY = pTime->byDay; //日
RTC_RW_DS ();
}
void rtcSetWeek (PTIME pTime)
{
RTC_RW_EN();
rBCDDATE = pTime->byWeekday;
RTC_RW_DS();
}
void rtcSetTime (PTIME pTime)
{
RTC_RW_EN(); //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
rBCDHOUR = pTime->byHour; //小时
rBCDMIN = pTime->byMin; //分
rBCDSEC = pTime->bySec; //秒
RTC_RW_DS();
}
void rtcInit (PTIME pTime)
{
RTC_RW_EN(); //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
#if 0
rBCDYEAR = pTime->wYear - 2000; //年
rBCDMON = ((pTime->byMonth / 10)<<4) | (pTime->byMonth % 10); //月
rBCDDAY = pTime->byDay; //日
rBCDDATE = pTime->byWeekday; //星期
rBCDHOUR = pTime->byHour; //小时
rBCDMIN = pTime->byMin; //分
rBCDSEC = pTime->bySec; //秒
#endif
rBCDYEAR = pTime->wYear - 2000; //年
rBCDMON = ((pTime->byMonth / 10)<<4) | (pTime->byMonth % 10); //月
rBCDDAY = ((pTime->byDay / 10) << 4) | (pTime->byDay % 10); //日
rBCDDATE = ((pTime->byWeekday / 10) << 4) | (pTime->byWeekday % 10); //星期
rBCDHOUR = ((pTime->byHour / 10) << 4) | (pTime->byHour % 10); //小时
rBCDMIN = ((pTime->byMin / 10 ) << 4) |(pTime->byMin % 10); //分
rBCDSEC = ((pTime->bySec / 10) << 4) | (pTime->bySec % 10); //秒
rTICNT = 0x80+127; //enable tick timer interrupt, set tick timer interrupt time = (127+1)/128 second
RTC_RW_DS();
}
void rtcAlarm (PTIME pTime)
{
rALMYEAR = pTime->wYear; //年
rALMMON = pTime->byMonth; //月
rALMDAY = pTime->byDay; //日
rALMHOUR = pTime->byHour; //小时
rALMMIN = pTime->byMin; //分
rALMSEC = pTime->bySec; //秒
rRTCALM = 0x7f; //全局警报使能控制,年、月、日、星期、时分秒警报使能控制
}
void rtcGetTime (PTIME pTime)
{
U8 byVal;
RTC_RW_EN(); //RTC读写使能
pTime->wYear = 2000 + rBCDYEAR;
pTime->byWeekday = rBCDDATE;
byVal = rBCDMON;
pTime->byMonth = (byVal>>4)*10 + (byVal&0xf); //BCD码转十进制
byVal = rBCDDAY;
pTime->byDay = (byVal>>4)*10 + (byVal&0xf);
byVal = rBCDHOUR;
pTime->byHour = (byVal>>4)*10 + (byVal&0xf);
byVal = rBCDMIN;
pTime->byMin = (byVal>>4)*10 + (byVal&0xf);
byVal = rBCDSEC;
pTime->bySec = (byVal>>4)*10 + (byVal&0xf);
RTC_RW_DS (); //RTC读写禁止(降低功率消耗),选择BCD时钟、计数器,无复位,1/32768
}
void rtcReset ()
{
RTC_RW_EN(); //RTC读写使能
RTC_RW_DS (); //RTC读写禁止(降低功率消耗),选择BCD时钟、计数器,无复位,1/32768
}
void rtcShowTime ()
{
TIME time;
rtcGetTime (&time);
printf ("The current time is :\t%04d-%02d-%02d, %02d:%02d:%02d.\n",
time.wYear, time.byMonth, time.byDay, time.byHour, time.byMin, time.bySec);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -