/********************初始化實時時鐘*******************************************/
void RTCInit(void)
{
YEAR = 2011; // 初化年
MONTH = 12; // 初化月
DOM = 6; // 初化日
HOUR = 12;
MIN = 59;
SEC = 50;
//如果用到星期,則在這里正確初始化:DOW =(值為0~6)
CIIR = 0x01; // 設置秒值的增量產生一次中斷
CCR = 0x11; // 使用獨立振蕩器,啟動RTC. (0x01,0x10,0x13都不顯示)
}
void SendTimeRtc(void)//取星期不對
{
U32 times;
U8 bak;
times = CTIME0; // 讀取完整時鐘寄存器0
/*
bak = (times>>24)&0x07; // 取得星期的值
Send_BUF[2] = bak/10+'0';
Send_BUF[3] = bak%10+'0';
// Send_BUF[4] = ':';
DataDisp(bak/10,2,0); //顯示星期 為什么取的星期不對呢?
Delay(4);
DataDisp(bak%10,3,0);
Delay(2);*/
bak = (times>>8)&0x3F; // 取得分的值
Send_BUF[0] = bak/10+'0';
Send_BUF[1] = bak%10+'0';
Send_BUF[2] = ':';
DataDisp(bak/10,0,0); //顯示分鐘
Delay(4);
DataDisp(bak%10,1,1);
Delay(2);
bak = times&0x3F; // 取得秒的值
Send_BUF[3] = bak/10+'0';
Send_BUF[4] = bak%10+'0';
Send_BUF[5] = '\n';
DataDisp(bak/10,2,0); //顯示分鐘
Delay(4);
DataDisp(bak%10,3,0);
Delay(2);
}
操作了半天,取的星期老是不對。最后搞明白了,原來在RTCInit()中沒有初始化時鐘。
切記:如果要取星期,對星期的寄存器要初始化,然后ARM會自動計算某天的星期數據。