玩转MSP-ESP430G2(基础篇)----(十一)看门狗

玩转MSP-ESP430G2(基础篇)

(十一) 看门狗

开看门狗(默认开):WDTCTL=WDTPW;
清看门狗:WDTCTL=WDTPW+WDTCNTCL;
关看门狗:WDTCTL=WDTPW+WDTHOLD;

注意:在编程时为了防止看门狗使单片机复位则一般关掉看门狗。

看门狗做间隔定时器
#define WDT_NDLY_32 (WDTEV+WDTTMSEL+WDTCNTCL)

#define WDT_JDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTISO)

#define WDT_JDLY_O_5 (WDTEV+WDTTMSEL+WDTCNTCL+WDTIS1)

#define WDT_JDLY_O_064 (WDTEW+WDTTMSEL+WD TCNTCL+WDTIS1+WDTISO)

#define WDT_ADLY_1000 (WDTPV+WDTTMSEL+WDTCNTCL+WDTSSEL)

#define WDT_ADLY_250(WDTFVHWDTTMSEL+WDTCNTCL+WDTSSEL+WDTISO)

#define WDT_ADLY_16 (WDTPV-WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1)

#define WDT_ADLY_19 (WDTEV+WDTTMSEL +WD TCNTCI+WDTSSEL+WDTTS1+WDTISO)

#define WDT_JRST_32 (WDTEW+WDTCNTCL)

#define WDT_JRST_B (WDTFW+WDTCNTCL+WDTISO)

#define WDT_JRST O_5 (WDTPV+WDTCNTCL+WDTIS1)

#define WDT_JRST_O_064 (WDTFW+WDTCNTCL+WDTIS1+WDTISO)

#define WDT_ARST_1000 (WDTFVHWDTCNTCL+WDTSSEL)

#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTISO)

#define WDT_ARST_16 (WDTFW+WDTCNTCL+WDTSSEL+WDTIS1)

#define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSET+WDTTS1+WDTISO)
#include<msp430g2553.h>
void main(void)
{
WDTCTL=WDT_MDLY_32; 		// Set Watchdog Timer
interval to ~30ms SMCLK计时
IE1 |= WDTIE; 		// Enable WDT interrupt 间隔定时器模
式中断使能
P1DIR |=0x01; 		// Set P1.0 to output direction
_BIS_SR(LPM0_bits+ GIE);	 // Enter LPM0 w/ interrupt
}
// Watchdog Timer interrupt service routine

#pragma vector=WDT_VECTOR
_interrupt void watchdog_timer(void)	 //WDTIFG中断标志自动清除
{
P1OUT A=0x01;			 // Toggle P1.0 using exclusive-OR
}

看门狗控制寄存器还控制着RST/NMI管脚的功能,可以选择它为复位管脚,也可以选择它产生不可屏蔽中断,

  • 例子如下:
    第16脚是RST/NMI/SBWTDIO 在本程序中,如果按下RESER键,会进入非可屏蔽中断,使P10led闪烁
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD + WDTNMI +WDTNMIES;	 // WDT off NMI hi/lo
//WDTHOLD停止看门狗定时器 WDTNMI选择RST/NMI pin为NMI功能 WDTNMIES选择下降沿
触发NMI

P1DIR |=0x01;			 // Set P1.0 to output
direction
P1OUT &=~0x01; 		// Clear P1.0 LED off
IE1 |=NMIIE;		 // Enable NMI 不可屏蔽中断使能
_BIS_SR(LPM0_bits);	 // Enter LPM0 因为是非可屏蔽中断,所以不用打开总中断
}
#pragma vector=NMI_VECTOR
_interrupt void nmi_(void)
{
volatile unsigned int i;
P1OUT|=0x01; 			// Set P1.0 LED on
for (i=20000;i>0; i--); 		// Delay
P1OUT &=~0x01; 			// Clear P1.0 LED off
IFG1 &=~NMIIFG;			 // Reclear NMI flag
				//in case bounce
				//NMI中断标志位必须要软件清除
IE1 |=NMIIE; 				// Enable NMI
//当非可屏蔽中断被相应,所有的NMI使能位都会自动地被复位,
所以NMI相应之后,用户必须软件重新使能需要的NMI
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值