ZigBee3-2 练习 看门狗

ZigBee3-2 练习 看门狗


理论学习: 无线传感网络 --ZigBee3-2 看门狗

3-3看门狗

要求:
(3)在《3-3看门狗》实验中体验了没有启用看门狗和启用看门狗对于应用程序的影响,要求修改代码,将看门狗的溢出周期修改为0.25秒,并且修改延时,检验看门狗对于应用程序的影响。

原代码

/****************************************************************************
* 文 件 名: main.c
* 作    者: Andy
* 修    订: 2013-01-09
* 版    本: 1.0
* 描    述: 打开看门狗后,得记得喂狗,不然系统就会不停地复位了
****************************************************************************/
#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

#define LED1 P1_0       // P1.0口控制LED1


/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{ 
    uint i,j;
    
    for (i=0; i<msec; i++)
        for (j=0; j<535; j++);
}

/****************************************************************************
* 名    称: InitLed()
* 功    能: 设置LED灯相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{
    P1DIR |= 0x01;      //P1.0定义为输出
    LED1 = 0;           //默认LED灯为熄灭状态
}


void Init_Watchdog(void) 
{ 
    WDCTL = 0x00;       //打开IDLE才能设置看门狗
    WDCTL |= 0x08;      //定时器间隔选择,间隔一秒
}

void FeetDog(void) 
{ 
    WDCTL = 0xa0;       //清除定时器。当0xA跟随0x5写到这些位,定时器被清除
    WDCTL = 0x50; 
}

/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)
{
    InitLed();		//调用初始化函数
    Init_Watchdog();

    while(1)
    {         
        DelayMS(300);
        LED1=1; 
               
        //FeetDog();     //喂狗系统将不再主动复位,LED1灯不闪烁一直亮,
                       //注释FeetDog函数时系统不断复位,LED1灯闪烁
    }
}

分析

将 WDCTL 改为 0x09,即将时间间隔改为 0.25s,由于原来 delay 的 300ms,大于 250ms,当 led 闪烁时,led 就已经被重置了,延时时间要小于溢出时间即小于等于 0.25s,所以将延迟
改为 200ms,完成亮灭各 200ms 的操作。
修改看门狗时长:

void Init_Watchdog(void) 
{ 
    WDCTL = 0x00;       //打开IDLE才能设置看门狗
    WDCTL |= 0x09;      //定时器间隔选择,间隔一秒
}

修改后代码

/****************************************************************************
* 文 件 名: main.c
* 作    者: Andy
* 修    订: 2013-01-09
* 版    本: 1.0
* 描    述: 打开看门狗后,得记得喂狗,不然系统就会不停地复位了
****************************************************************************/
#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

#define LED1 P1_0       // P1.0口控制LED1


/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{ 
    uint i,j;
    
    for (i=0; i<msec; i++)
        for (j=0; j<535; j++);
}

/****************************************************************************
* 名    称: InitLed()
* 功    能: 设置LED灯相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{
    P1DIR |= 0x01;      //P1.0定义为输出
    LED1 = 0;           //默认LED灯为熄灭状态
}


void Init_Watchdog(void) 
{ 
    WDCTL = 0x00;       //打开IDLE才能设置看门狗
    WDCTL |= 0x09;      //定时器间隔选择,间隔一秒
}

void FeetDog(void) 
{ 
    WDCTL = 0xa0;       //清除定时器。当0xA跟随0x5写到这些位,定时器被清除
    WDCTL = 0x50; 
}

/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)
{
     InitLed();		//调用初始化函数
    Init_Watchdog();

    while(1)
    {         
        DelayMS(200);
        LED1=1; 
               
        //FeetDog();     //喂狗系统将不再主动复位,LED1灯不闪烁一直亮,
                       //注释FeetDog函数时系统不断复位,LED1灯闪烁
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值