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)

{

  int hour,minute,second                             ;

  unsigned long time