玩转蓝牙4.0系列教程(第一季)-第八课 CC2540的看门狗应用
今天给大家带来看门狗应用,项目中应用看门狗主要是为了实现防止程序跑飞掉,开门狗重新复位的功能,已间接使程序稳定性增强。为了防止程序不跑飞,我们必须定期在有限时间内喂狗,哈哈,不喂它,乱咬人;下面我们就来看看如何实现这个功能。
首先必须配置寄存器,配置成
WDCTL = 0x00; //这是必须的,打开IDLE才能设置看门狗
WDCTL |= 0x09; //250ms,看门狗模式
实验现象,通过把喂狗函数去掉,系统不停在复位,不去掉系统运行才正常。
源代码如下:
/**************************************************
** 本程序只供学习使用,未经作者许可,不得用于其它任何用途
** 蓝牙4.0底板开发板
** 作者: shizhe
** 创始时间:2014-05-08
** 修改人:shizhe
** 修改时间:2014-05-08
** 修改人:shizhe
** 修改时间:2014-05-08
** 描述:
** 看门狗实验不喂狗时小灯1也闪烁,喂狗后小灯1常亮…
** 版权所有,盗版必究。
**需要更多资料 https://shop59411198.taobao.com/
** Copyright(C) 联控智能 2014-2020
** All rights reserved
*************************************************/
#include<ioCC2540.h>
#define uint unsigned int
#define uchar unsigned char
#define LED1 P0_5
#define LED2 P1_0
#define LED3 P1_1
/****************************
延时函数
*****************************/
void delay(unsigned int i)
{
unsigned int j;
for(j=0;j<i;j++){
}
}
/****************************
LED初始化函数
*****************************/
void InitLed(void)
{
P1SEL &= ~0x03; //P1_0,P1_1定为普通IO口
P1DIR |= 0x03; //P1_0,P1_1定义为输出
P0SEL &= ~0x20; //P0_5定为普通IO口
P0DIR |= 0x20; //P0_5定义为输出
LED1 = 0; //LED1灯熄灭
LED2 = 0; //LED2灯熄灭
LED3 = 0; //LED3灯熄灭
}
/****************************
看门狗初始化函数
*****************************/
void Init_Watchdog(void)
{
WDCTL = 0x00; //这是必须的,打开IDLE才能设置看门狗
WDCTL |= 0x09; //250ms,看门狗模式
}
/****************************
喂狗初始化函数
*****************************/
void FeetDog(void)
{
WDCTL = 0xa0;
WDCTL = 0x50;
}
void main()
{
InitLed(); //调用初始化函数
Init_Watchdog();
LED1=0;
while(1)
{
LED2=~LED2;
LED3=~LED3;
delay(30000);
LED1=1;
FeetDog();//防止程序跑飞,通过注释测试,观察LED1,系统在不停复位。
}
}