实时时钟程序;中断检测,LED1闪烁;LED2一直亮为什们呢??

2019-03-24 11:47发布


#include "msp430x54x.h"

void Init_Rtc(void);
void Init_Clk(void);
void Init_System(void);

void main(void)
{
      WDTCTL = WDTPW + WDTHOLD;                    // 关看门狗         
      Init_System();                               // 系统初始化
      __bis_SR_register(LPM3_bits + GIE);          // 进入低功耗3
}


/************************ RTC中断*****************************/
#pragma vector=RTC_VECTOR
__interrupt void basic_timer(void)
{   
  switch(RTCIV)              //中断检测
  {
       //case 2 : P1OUT ^= BIT0;break;            
       //RTCRDYIFG实时时钟闹铃标志;RTC准备好;
       case 4 : break;         
       case 6 : P7OUT ^= BIT7;break;            
       //RTCAIFG实时时钟闹铃标志位;RTC用户闹铃;
       case 8 : break;
       case 10 : break;         
  }

}

/*************************************************
  函数(模块)名称:void Init_System(void)
  功能:  该程序系统初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/
void Init_System(void)
{
   Init_Clk();                                 //调用时钟函数
   Init_Rtc();                                 //RTC 初始化
   P1DIR |= BIT0;                              //P1.0为输出
   P1OUT &= ~BIT0;
   P7DIR |= BIT7;                              //P7.7为输出
   P7OUT &= ~BIT7;
}

/*************************************************
  函数(模块)名称:void Init_Rtc(void)
  功能:  RTC初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/

void Init_Rtc(void)
{                                                                                                        

       RTCCTL01 = RTCBCD +  RTCHOLD + RTCMODE + RTCTEV_0 ; // BCD码日历格式输出
       //RTCBCD=1,BCD码形式;RTCHOLD=1,日历停止;RTCMODE=1,日历模式;RTCTEV_0=0,分钟跳变

       RTCPS0CTL =   RT0PSHOLD ;             //配置两个计数器分频  
       //RTCPS0CTL实时时钟预分频定时器0控制寄存器
       //RT0PSHOLD=1,RT0PS是停止;
       RTCPS1CTL  =  RT1PSHOLD ;
       //RTCPS1CTL实时时钟预分频定时器1控制寄存器
       //RT1PSHOLD=1,RT1PS是停止;      
       RTCSEC =  0x54;                       //初始化秒  
       //RTCSEC=RTCTIM0_L,实时时钟秒寄存器;
       RTCMIN =  0X59 ;                      //初始化分钟
       //RTCMIN=RTCTIM0_H,实时时钟分寄存器;
       RTCHOUR =0X21;                        //初始化小时
       //RTCHOUR=RTCTIM1_L,实时时钟小时寄存器;
       RTCDOW = 0X02 ;
       //RTCDOW=RTCTIM1_H,实时时钟星期寄存器;
       //RTCTIM1 = 0X0221;   
       RTCDAY =  0x24;                       //日期初始化
       //RTCDAY= RTCDATE_L,实时时钟天寄存器;
       RTCMON =  0X11 ;                      //初始化月份
       // RTCMON=RTCDATE_H,实时时钟月寄存器;
       RTCYEAR = 0x2005;                     //初始化年份
       //RTCYEAR实时时钟年寄存器
       RTCAMINHR = 0X2200 + BIT7;            //闹钟小时和分钟设置
       //RTCAMINHR高字节为RTCAHOUR,低字节为RTCAMIN;
       RTCADOWDAY = 0X2402;                  //闹钟星期和日期设置
       //RTCADOWDAY高字节为RTCADAY,低字节为RTCADOW;
       RTCCTL01 &= ~RTCHOLD;                 //打开RTC模块

       RTCPS0CTL &= ~RT0PSHOLD;              //打开RTCPS0CTL

       RTCPS1CTL &= ~RT1PSHOLD;              //打开RTCPS1CTL

       RTCCTL0 |= RTCAIE + RTCRDYIE;         //打开安全访问使能 ,闹钟使能


}
/*************************************************
  函数(模块)名称:void Init_Clk(void)
  功能: 时钟初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:          void                         
  输出参数:           void
函数返回值说明 :void               
  使用的资源                   
  其它说明:                      
*************************************************/
void Init_Clk(void)
{
     P7SEL |= 0x03;                         //启动XT1                                
     UCSCTL1 = DCORSEL_2;                   //DCO 范围配置            
     UCSCTL4 = SELM_3 + SELA_0 + SELS_4;    //设置时钟源           
     while (SFRIFG1 & OFIFG)                //等待时钟系统正常工作            
     {
          UCSCTL7 &= ~(  XT1LFOFFG + DCOFFG);
          SFRIFG1 &= ~OFIFG;
     }        
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
羽翼之杨勇0102
1楼-- · 2019-03-25 16:53
 精彩回答 2  元偷偷看……
羽翼之杨勇0102
2楼-- · 2019-03-25 17:26
huixianfxt 发表于 2014-3-18 16:28
RTCAMINHR = 0X2200 + BIT7;        也就是BIT7置一呢,等价于   RTCAMINHR = 0X2280;

是不是不对呀!还是我理解错啦! RTCAMINHR = 0X2280;RTCAHOUR=0X22;RTCMIN=OX80;RTCMIN最大为59;
huixianfxt
3楼-- · 2019-03-25 20:07
羽翼之杨勇0102 发表于 2014-3-18 16:39
是不是不对呀!还是我理解错啦! RTCAMINHR = 0X2280;RTCAHOUR=0X22;RTCMIN=OX80;RTCMIN最大为59;

这是程序运行的结果,你可以单步调试一下观察下RTC寄存器呢,我是运行后才给你说的结果呢...........应该是这点错了呢(你的程序是什么功能呢?),80太大了呢....
羽翼之杨勇0102
4楼-- · 2019-03-25 23:56
 精彩回答 2  元偷偷看……
huixianfxt
5楼-- · 2019-03-26 00:09
本帖最后由 huixianfxt 于 2014-3-18 21:55 编辑

把闹钟时间变短一下试试呢.....
qinkaiabc
6楼-- · 2019-03-26 03:08
在头文件中是这样定义的:
#define RTCAMIN                RTCAMINHR_L    /* Real Time Clock Alarm Min */
#define RTCAHOUR               RTCAMINHR_H    /* Real Time Clock Alarm Hour */
把上面两个寄存器合并为下面一个寄存器
SFR_16BIT(RTCAMINHR);                         /* Real Time Clock Alarm Min/Hour */

BIT7只是使能位,你的理解是正确的。
捕获.PNG

一周热门 更多>

相关问题

    相关文章