2012.1.11
讀取實時時鐘:
1、 RTCRDY 為0時,不能取讀取實時時鐘
RT0PS源于ACLK,為了實時時鐘月曆的正确的運作,ACLK必須是32768Hz。(易出錯)
定時:
一、每小時鬧一次:每一小時的15分鐘鬧一次:
1、将RTCAMIN設定成15;2、設定RTCAMIN的AE位和清除鬧鐘寄存器的其它所有AE位
3、AF會在:00:14:59到00:15:00、01:14:59到01:15:00、02:14:59到02:15:00等等時刻被置位。
二、在每天04:00:00時刻鬧:
1、RTCAHOUR位置位成4;2、設定RTCHOUR的AE位和複位鬧鐘寄存器的所有其它AE位
3、AF就會在03:59:59到04:00:00時刻被置位。
三、在每天06:30:00時刻鬧:
1、 将RTCAHOUR設定成6,将RTCAMIN 設定成30。
2、設定RTCAHOUR和RTCAMIN的AE位,即可使能鬧鐘
3、 AF位将會在每一個06:29:59到06:30:00的過渡時刻被置位
四、在每周二 06:30:00時刻鬧:
1、 RTCADOW位設定成2,RTCAHOUR設定成6,RTCAMIN将要被設定成30。
2、 設定RTCADOW、RTCAHOUR和RTCAMIN的AE位,鬧鐘即被使能。
3、 AF位将會在RTCDOW位從1 到2的過渡後和06:29:59到06:30:00的過渡時刻被置位。
五、在每月第五天的06:30:00時刻鬧:
1、 RTCADAY位将要設定成5,RTCAHOUR位将要被設定成6,RTCAMIN位将要被設定成30。
2、 設定RTCADAY位、RTCAHOUR位和RTCAMIN位的AE位,鬧鐘即被使能。
3、 AF位将要在06:29:59到06:30:00的過渡時刻和RTCADAY等于5的時刻被置位。
實時時鐘模式下的間隔時間中斷:
RTCCTL01 = RTCBCD+RTCMODE+RTCTEVIE+RTCAIE;
RTCMODE: 0:Counter 1: Calendar
置位RTCAIE 位就使能了時鐘中斷功能
置位RTCTEVIE 位就使能時間間隔中斷功能,置位RTCTEVIFG
RTCTEV:00 分鐘跳變
01 小時跳變
10 每天淩晨(00:00)
11 每天正午(12:00)
以上均在RTCMODE=1模式下。
//天中斷。置位RTCRDYIE 位會使能中斷,RTCRDY 位觸發實時時鐘中斷RTCRDYIFG
計數器模式中的實時時鐘中斷
時間間隔中斷:
實時時鐘中斷(RTCTEVIFG)
配置成8位、16位、24位或者32位中的一種溢出時引發一個觸發事件。觸發事件可由RTCTEV位進行選擇
置位RTCTEVIE位使能中斷
在計數器模式中,三個中斷源是可用的,其分别是RT0PSIFG、RT1PSIFG和RTCTEVIFG。RTCAIFG位和RTCRDYIFG位被清除。RTCRDYIE和RTCAIE位可以忽略。
1通過設定RT0IP位,可以選擇使RT0PSIFG位用來生成間歇中斷。
2在計數器模式,RT0PS位時鐘源,源自于ACLK或者SMCLK,也可以是基于ACLK或者SMCLK時鐘源的2分頻、4分頻、8分頻、16分頻、32分頻、64分頻、128分頻和256分頻作為時鐘源。
3設定RT0PSIE位可以使能中斷。
1通過設定RT1IP位,可以選擇地讓RT1PSIFG位用來生成間歇中斷。
2在計數器模式下,RT1PS位時鐘源,源于ACLK、SMCLK或者是RT0PS位的輸出,也可以是以上時鐘源的2分頻、4分頻、8分頻、16分頻、32 分頻、64分頻、128分頻和256分頻後産生新的時鐘源作為時鐘。
3設定RT1PSIE位可以使能中斷。
一個簡單而安全讀取實時時鐘寄存器的方法是利用RTCRDYIFG中斷标志位。置位RTCRDYIE位使能
RTCRDYIFG中斷。一旦中斷使能,在RTCRDY位上升沿的時候将會産生中斷,緻使RTCRDYIFG被置位。在這
一點上,這一應用幾乎有完整的一秒鐘安全地去讀取任一個實時時鐘寄存器。這一同步的處理方式防止在時間
跳變的過程中讀取時間值。當中斷得到響應的時候,RTCRDYIFG會自動複位,也可以軟體複位。
在計數器模式下,RTCRDY位保持複位。可以不關心RTCRDYIE位,并且RTCRDYIFG維持複位。
資料:
http://www.jdzj.com/pic/Class347/Class410/20080804043437.html
設定RTC時間:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer
RTCCTL01 = RTCBCD+RTCHOLD+RTCMODE+RTCTEVIE+RTCAIE;
// RTC enable, BCD mode,
// alarm every Minute,
// enable RTC interrupt
// Init time
RTCSEC = 0x00; // Set Seconds
RTCMIN = 0x32; // Set Minutes
RTCHOUR = 0x10; // Set Hours
// Init date
RTCDOW = 0x03; // Set DOW
RTCDAY = 0x30; // Set Day
RTCMON = 0x04; // Set Month
RTCYEAR = 0x2008; // Set Year
RTCCTL01 &= ~RTCHOLD; // Enable RTC
P1DIR |= 0x01; // Set P1.0 to output direction
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
}
讀取RTC時間:
//
// //
// 讀取RTC時鐘 //
//
unsigned long GetTime(void)