看门狗设置
一、 看门狗初始化
1. 清除定时器,模式选择IDLE(空闲或停止状态,即不启用看门狗),定时器间隔选择为1秒(也就是1秒不喂狗就重启系统):WDCTL = 0x00;
2. 将模式修改为看门狗模式,即启动看门狗:WDCTL |= 0x08;
二、 喂狗
1. 先写入0xA,再写入0x5,就可以清除定时器:
WDCTL = 0xA0;
WDCTL = 0x50;
三、 示例程序
#include <ioCC2530.h>/*
** ==========================
** 精确延时函数(传入毫秒)
** 要求系统时钟为32MHz
** ==========================
*/
void delay_ms(unsigned int ms)
{T1CC0L = 0xE8; // 设置低8位计数值:0xE8 = 232T1CC0H = 0x03; // 设置高8位计数值:0x03 = 3,组合为0x03E8 (1000)T1CTL = 0x0A; // 配置定时器为32分频模式,模模式while (ms) {// 等待计数器达到目标值while (!((T1CNTL >= 0xE8) && (T1CNTH >= 0x03)));ms--; // 每次循环减少1ms}T1CTL = 0x00; // 关闭定时器
}void main()
{//初始化系统时钟CLKCONCMD &= ~0x40; //设置系统时钟源为32MHz晶振while(CLKCONSTA & 0x40); //等待晶振稳定为32MCLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHz //初始化LED灯P1SEL &= ~0x03;P1DIR |= 0x03;P1_1=1; //熄灭D6P1_0=1; //熄灭D7//初始化看门狗WDCTL = 0x00;WDCTL |= 0x08;//等待500毫秒delay_ms(500);//点亮D7P1_0=0;while(1){//喂狗:注释后就会每秒重置一次系统,D7灯闪烁WDCTL = 0xA0;WDCTL = 0x50;//等待500毫秒delay_ms(500);}
}