您的位置 首页 元件

怎么使用单片机看门狗守时器使led闪耀

如何利用单片机看门狗定时器使led闪烁-看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用

示例代码:用看门狗定时器使一个led闪烁

#include

void main( void )

{

// Stop watchdog timer to prevent TIme out reset

WDTCTL = WDT_MDLY_32;//宏定义

IE1 |=WDTIE; //允许看门狗定时器中断

P2DIR |= BIT7;

_BIS_SR(LPM0_bits+GIE);//在这里的话将cpu进入低功耗模式

看门狗是为了避免程序跑飞而设定的,可是由于看门狗是一个相似于守时器,因而能够把他当作守时器来运用

示例代码:用看门狗守时器使一个led闪耀

#include

void main( void )

{

// Stop watchdog TImer to prevent TIme out reset

WDTCTL = WDT_MDLY_32;//宏界说

IE1 |=WDTIE; //答应看门狗守时器中止

P2DIR |= BIT7;

_BIS_SR(LPM0_bits+GIE);//在这儿的话将cpu进入低功耗形式

}

#pragma vector = WDT_VECTOR

__interrupt void watchdag_TImer(void)

{

P2OUT ^=BIT7;//异或操作基本上是取反操作

}

怎么使用单片机看门狗守时器使led闪耀

留意这儿有一个比较好的宏界说:WDTCTL = WDT_MDLY_32;进入该宏界说会发现相似的宏界说有许多

/* WDT-interval TImes [1ms] coded with Bits 0-2 */

/* WDT is clocked by fSMCLK (assumed 1MHz) */

#define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */

#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms “ */

#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms ” */

#define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms “ */

/* WDT is clocked by fACLK (assumed 32KHz) */

#define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms ” */

#define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms “ */

#define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms ” */

#define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms “ */

/* Watchdog mode -》 reset after expired time */

/* WDT is clocked by fSMCLK (assumed 1MHz) */

#define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */

#define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) /* 8ms ” */

#define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) /* 0.5ms “ */

#define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms ” */

/* WDT is clocked by fACLK (assumed 32KHz) */

#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms “ */

#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms ” */

#define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms “ */

#define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms ” */

这儿咱们能够依据一般的需求,挑选适宜的守时时刻

提到守时时刻,这儿又不得不讲一下中止函数,在IAR这个编译环境中,一般中止函数的写法是

#pragma vector = 中止向量

__interrupt void 中止函数名(void)

{

用户程序;

}

留意,中止向量能够在430的头文件中查找,中止函数的声明有必要是void 中止函数名(void),这是由于中止函数没有返回值,也没有中止的形式参数

可是自己又在网站上看到别的一种用switch来写的,便是一个中止源对应几个中止向量,这种写法现在我还没有见过源码,所以欠好总结

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/346067.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部