5218|16

120

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

实时时钟程序;中断检测,LED1闪烁;LED2一直亮为什们呢?? [复制链接]


#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;
     }        
}

最新回复

在头文件中是这样定义的: #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只是使能位,你的理解是正确的。 [attach]144660[/attach]   详情 回复 发表于 2014-3-18 22:03
 
点赞 关注

回复
举报

396

帖子

5

TA的资源

纯净的硅(中级)

沙发
 
LED2连到哪个脚上的??

点评

p7.7  详情 回复 发表于 2014-3-18 15:04
 
个人签名一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
jqh_111 发表于 2014-3-18 15:03
LED2连到哪个脚上的??

p7.7
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

4
 
RTCAMINHR = 0X2200 + BIT7;            //闹钟小时和分钟设置,这个BIT7是控制什么的呢??请问前辈呀!!谢谢!!

点评

BIT7是不是使能位呀!是不是每晚22点AF会被置位??  详情 回复 发表于 2014-3-18 15:51
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

5
 
羽翼之杨勇0102 发表于 2014-3-18 15:11
RTCAMINHR = 0X2200 + BIT7;            //闹钟小时和分钟设置, ...

BIT7是不是使能位呀!是不是每晚22点AF会被置位??

点评

RTCAMINHR = 0X2200 + BIT7; 也就是BIT7置一呢,等价于 RTCAMINHR = 0X2280;  详情 回复 发表于 2014-3-18 16:28
 
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

6
 
为什么大家提问的时候,就不能把问题说清楚呢?你都没把问题描述清楚,还怎么让别人回答啊。把问题说清楚,大家才好作答的,要不大多数人都不会理你的。问题都没说明白,遇上楼上那么耐心给你作答的,你已经很幸运了。

点评

谢谢你的提醒啊!!  详情 回复 发表于 2014-3-18 16:29
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

7
 
羽翼之杨勇0102 发表于 2014-3-18 15:51
BIT7是不是使能位呀!是不是每晚22点AF会被置位??

  RTCAMINHR = 0X2200 + BIT7;        也就是BIT7置一呢,等价于   RTCAMINHR = 0X2280;

点评

是不是不对呀!还是我理解错啦! RTCAMINHR = 0X2280;RTCAHOUR=0X22;RTCMIN=OX80;RTCMIN最大为59;  详情 回复 发表于 2014-3-18 16:39
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

8
 
一个小白 发表于 2014-3-18 16:21
为什么大家提问的时候,就不能把问题说清楚呢?你都没把问题描述清楚,还怎么让别人回答啊。把问题说清楚, ...

谢谢你的提醒啊!!
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

9
 
huixianfxt 发表于 2014-3-18 16:28
RTCAMINHR = 0X2200 + BIT7;        也就是BIT7置一呢,等价于   RTCAMINHR = 0X2280;

是不是不对呀!还是我理解错啦! RTCAMINHR = 0X2280;RTCAHOUR=0X22;RTCMIN=OX80;RTCMIN最大为59;

点评

这是程序运行的结果,你可以单步调试一下观察下RTC寄存器呢,我是运行后才给你说的结果呢...........应该是这点错了呢(你的程序是什么功能呢?),80太大了呢....  详情 回复 发表于 2014-3-18 18:47
 
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

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

这是程序运行的结果,你可以单步调试一下观察下RTC寄存器呢,我是运行后才给你说的结果呢...........应该是这点错了呢(你的程序是什么功能呢?),80太大了呢....

点评

这是TI提供的一个例程,我也没看明白!!!  详情 回复 发表于 2014-3-18 21:29
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

11
 
huixianfxt 发表于 2014-3-18 18:47
这是程序运行的结果,你可以单步调试一下观察下RTC寄存器呢,我是运行后才给你说的结果呢...........应该 ...

这是TI提供的一个例程,我也没看明白!!!

点评

[attachimg]144654[/attachimg] 这是我看到的一个例程上的,参数部分和你不一样呢.....你的是不是改过啊............  详情 回复 发表于 2014-3-18 21:46
 
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

12
 
本帖最后由 huixianfxt 于 2014-3-18 21:55 编辑

把闹钟时间变短一下试试呢.....

点评

没有改参数啊!我用的是f5438系列的!只是增加了一些注释啊!便于我理解!!除此,再就没有其它的改动啦!看不懂的情况下,我是不会改的!!  详情 回复 发表于 2014-3-19 08:18
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

2781

帖子

417

TA的资源

五彩晶圆(中级)

13
 
在头文件中是这样定义的:
#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只是使能位,你的理解是正确的。

点评

这个闪烁是不是因为定时时间到了以后,定时器响应中断,又重新回到初始值状态啊!!!  详情 回复 发表于 2014-3-19 09:47
我仿真了一下,在这句指令RTCCTL01 = RTCBCD + RTCHOLD + RTCMODE+ RTCTEV_0中,要不要RTCTEV_0,对仿真结果没有什么影响,现象都是LED1先亮3次,第四次LED1、LED2一起亮,然后LED2一直亮,LED1闪烁;我想程序功能  详情 回复 发表于 2014-3-19 09:24
大哥呀!谢谢你啦!以后还得多多仰仗你呀!自己理解能力也有限啊!!BIT7是使能位, RTCADOWDAY后面没有使能位,是不是说闹钟的定时功能只有小时和分钟的使能;简单一点就是,到22点整就会有AF置位;但RTCTEV_0=0,  详情 回复 发表于 2014-3-19 09:01
 
个人签名
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

14
 
huixianfxt 发表于 2014-3-18 21:46
把闹钟时间变短一下试试呢.....

没有改参数啊!我用的是f5438系列的!只是增加了一些注释啊!便于我理解!!除此,再就没有其它的改动啦!看不懂的情况下,我是不会改的!!
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

15
 
qinkaiabc 发表于 2014-3-18 22:03
在头文件中是这样定义的:
#define RTCAMIN                RTCAMINHR_L    /* Real Time Clock Alarm Min ...

大哥呀!谢谢你啦!以后还得多多仰仗你呀!自己理解能力也有限啊!!BIT7是使能位, RTCADOWDAY后面没有使能位,是不是说闹钟的定时功能只有小时和分钟的使能;简单一点就是,到22点整就会有AF置位;但RTCTEV_0=0,分钟跳变??分钟跳变不就是每隔多少分钟中断一次吗??这怎么理解呢??
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

16
 
qinkaiabc 发表于 2014-3-18 22:03
在头文件中是这样定义的:
#define RTCAMIN                RTCAMINHR_L    /* Real Time Clock Alarm Min ...

我仿真了一下,在这句指令RTCCTL01 = RTCBCD +  RTCHOLD + RTCMODE+ RTCTEV_0中,要不要RTCTEV_0,对仿真结果没有什么影响,现象都是LED1先亮3次,第四次LED1、LED2一起亮,然后LED2一直亮,LED1闪烁;我想程序功能应该是每六秒就中断一次!!
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

17
 

读取RTC的数据

本帖最后由 羽翼之杨勇0102 于 2014-3-19 15:23 编辑
qinkaiabc 发表于 2014-3-18 22:03
在头文件中是这样定义的:
#define RTCAMIN                RTCAMINHR_L    /* Real Time Clock Alarm Min ...
LED1闪烁,实时时钟数据在更新,没闪闪烁一次,寄存器的数据就会更新;在LED1亮的时候,有完整的一秒钟去读取寄存器的值,分析的对吗??思路有点紊乱!帮忙理一下思路呗!谢谢!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表