看门狗是在软件跑飞的情况下CPU自恢复的一个方式,当软件在选定的时间间隔内不能置位看门狗定时器(WDT),WDT就复位系统。看门狗可用于电噪声,电源故障或静电放电等恶劣工作环境或高可靠性要求的环境。如果系统不需要应用到看门狗,则WDT可配置成间隔定时器,在选定时间间隔内产生中断。 WDT的特性如下:4个可选择的时间间隔看门狗定时器模式下产生中断请求时钟独立于系统时钟,WDT包括一个15位定时/计数器,它的频率由32.768KHz的晶振决定。用户不能查看计数器的值工作于各个电源模式。让用户了解几种看门狗定时器的使用
单片机源程序如下:
- /****************************************************************************
- * 文 件 名: main.c
- * 作 者: Andy
- * 修 订: 01-09
- * 版 本: 1.0
- * 描 述: 打开看门狗后,得记得喂狗,不然系统就会不停地复位了
- ****************************************************************************/
- #include <ioCC2530.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define LED1 P1_0 // P1.0口控制LED1
- #define LED2 P1_1 // P1.1口控制LED2
- /****************************************************************************
- * 名 称: 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 |= 0x03; //P1.0、P1.1定义为输出
- LED1 = 1; //默认LED灯为熄灭状态
- LED2 = 1;
- }
- void Init_Watchdog(void)
- {
- WDCTL = 0x00; //打开IDLE才能设置看门狗
- WDCTL |= 0x08; //定时器间隔选择,间隔一秒
- }
- void FeetDog(void)
- {
- WDCTL = 0xa0; //清除定时器。当0xA跟随0x5写到这些位,定时器被清除
- WDCTL = 0x50;
- LED2 = 0; //系统不复位LED2灯长亮
- }
- /****************************************************************************
- * 程序入口函数
- ****************************************************************************/
- void main(void)
- {
- InitLed(); //调用初始化函数
- Init_Watchdog();
- while(1)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
15.看门狗.zip
(303.76 KB, 下载次数: 14)
|