#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只是使能位,你的理解是正确的。
一周热门 更多>