1532|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

你了解MSP430F149看门狗及其应用么 [复制链接]

1、概述

看门狗有两个作用:1、可以防止程序跑飞,若程序跑飞可让单片机复位;2、可作为间隔时间发生器,在中断中进行定期刷新显示、读取数据等对外设的操作。

2、设置

    不需要看门狗时可用软件关闭,设置:WDTCTL = WDTPW + WDTHOLD;

    为防止误触发操作WDTCTL需要先写入WDTPW。

    作为间隔定时器时详细操作可见MSP430F149.H文件中的宏定义。

3、相关寄存器

1、WDTCTL Watchdog Timer Register

WDTPW Bits

15-8

Watchdog timer password. Always read as 069h. Must be written as 05Ah, or

a PUC will be generated.

WDTHOLD Bit 7 Watchdog timer hold. This bit stops the watchdog timer. Setting WDTHOLD= 1 when the WDT is not in use conserves power.

    0 Watchdog timer is not stopped

    1 Watchdog timer is stopped

WDTTMSEL Bit 4 Watchdog timer mode select

    0 Watchdog mode

    1 Interval timer mode

WDTCNTCL Bit 3 Watchdog timer counter clear. Setting WDTCNTCL = 1 clears the count value

to 0000h. WDTCNTCL is automatically reset.

0 No action

1 WDTCNT = 0000h

2、IE1 Interrupt Enable Register 1

WDTIE Bit 0 Watchdog timer interrupt enable. This bit enables the WDTIFG interrupt for

interval timer mode. It is not necessary to set this bit for watchdog mode.

Because other bits in IE1 may be used for other modules, it is recommended

to set or clear this bit using BIS.B or BIC.B instructions, rather than MOV.B

or CLR.B instructions.

0 Interrupt not enabled

1 Interrupt enabled

4、设计实例

4.1 利用WDT定时模式在中断函数中定时操作外设

说明:#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL)

void main(void)

{

  WDTCTL = WDT_MDLY_32;                   // Set Watchdog Timer interval to ~30ms

  IE1 |= WDTIE;                             // Enable WDT interrupt

  P2DIR |= 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)

{

  P2OUT ^= 0x01;                            // Toggle P1.0 using exclusive-OR

}

4.2 利用WDT定时模式延时

   WDTCTL = WDT_ADLY_1000;//延时1000ms

   //延时2s

   for(i = 0; i < 3; i++)

   {

        IFG1 &= ~WDTIFG;

        while(!(IFG1 & WDTIFG));

     }

IFG1 &= ~WDTIFG;


 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表