?? 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時鐘、計數(shù)器,無復位,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時鐘、計數(shù)器,無復位,1/32768
rBCDHOUR = pTime->byHour; //小時
rBCDMIN = pTime->byMin; //分
rBCDSEC = pTime->bySec; //秒
RTC_RW_DS();
}
void rtcInit (PTIME pTime)
{
RTC_RW_EN(); //RTC讀寫使能,選擇BCD時鐘、計數(shù)器,無復位,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時鐘、計數(shù)器,無復位,1/32768
}
void rtcReset ()
{
RTC_RW_EN(); //RTC讀寫使能
RTC_RW_DS (); //RTC讀寫禁止(降低功率消耗),選擇BCD時鐘、計數(shù)器,無復位,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 + -