您的位置 首页 编程

MSP430单片机的看门狗使用方法

以MSP430F2274为例。其中汇编实现采用的是IAR汇编,CCE汇编实现稍作修改即可。1.看门狗有三种工作模式:停止模式,计时器模式,看门狗模…

MSP430F2274为例。其间汇编完成选用的是IAR汇编,CCE汇编完成稍作修正即可。

1. 看门狗有三种作业形式:中止形式,计时器形式,看门狗形式。

2. 其间后两种形式能够挑选的时钟源有:SMCLK和ACLK。

3. 在运用后两种形式时分要注意单片机所在的状态下看门狗能否作业,如单片机处在LPM3时分只要ACLK时钟,处在LPM4下,没有时钟能够运用。

4. 看门狗形式的运用办法:当看门狗计数溢出时,程序复位。在程序中敞开看门狗,在计数溢出前清空看门狗,或重置看门狗,以使其从头计数。若程序跑飞,看门狗或许没有被清空或重置,就会溢,使程序复位。

5. 在MSP430F2274中,看门狗形式下能够计时最长为1s,若需要以更长的时刻复位,可采纳的办法,运用其他计数器,计数满后履行((void (*)())RESET_VECTOR)();或计数满后往看门狗操控寄存器写个过错值或履行一条无效指令:如((void (*)())0x170)();0x170是外围模块的一个地址,不或许是一个函数地址,所以履行此句将使程序复位。

中止形式:封闭看门狗

C言语完成:WDTCTL = WDTPW + WDTHOLD

汇编言语完成:mov.w #WDTPW+WDTHOLD,&WDTCTL

计时器形式:作为一个计时器运用,计数器满发生中止时履行看门狗中止函数。

C言语完成:

主程序中:敞开看门狗计时器,如:WDTCTL = WDT_MDLY_8;或WDTCTL = WDT_ADLY_250;等

看门狗中止函数为:

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)

{

//…………………………….

}

汇编言语完成:

敞开看门狗计时器,如:

mov.w #WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0 ,&WDTCTL

或 mov.w #WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0 ,&WDTCTL等

中止向量表中的看门狗中止向量:

ORG 0FFF4h ;msp430f2274的看门狗中止地址

DW RESET ;程序开端处以REST作为标号

看门狗中止函数:

WDT_ISR

;………………..

reti

看门狗形式:计数溢出时,履行复位中止函数。

C言语完成:

清看门狗:WDTCTL = WDTPW+WDTCNCTL;

设置看门狗:WDTCTL = WDT_MRST_0_5;

或WDTCTL = WDT_ARST_1000;等

汇编言语完成:

中止向量表中的复位向量:

ORG 0FFFEh ;msp430f2274的复位地址

DW RESET ;程序开端处以REST作为标号

清看门狗:mov.w #WDTPW+WDTCNCTL,&WDTCTL

设置看门狗:

mov.w # WDTPW+WDTCNTCL+WDTIS1 ,&WDTCTL

mov.w # WDTPW+WDTCNTCL+WDTSSEL,&WDTCTL;等

以下是我个人写的一个小程序,仅供参考:

#include
void main(void)
{
int i;
WDTCTL=WDTPW+WDTHOLD;//关狗
WDTCTL=WDT_ARST_1000;//开狗
P2DIR=0x01; //led
P2OUT=0x01;
for(;;)
{
i=2000;
while(i–);
WDTCTL = WDTPW + WDTCNTCL;//清狗
P2OUT=0;
}
}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部