嵌入式成长轨迹58 【Zigbee项目】【CC2430基础实验】【看门狗模式】

程序在主程序中没有连续改变小灯的状态,而在开始运行时将系统复位,点亮再复位。实验现象是一只小灯不断闪烁,这是因为程序中启动了看门狗,看门狗时间长度为1 秒,如果 1 秒内没有复位看门狗的话,系统将复位。系统复位后再次开启看门狗,1  秒后复位。

WDCTL(看门狗定时器控制寄存器) 
7:4 CLR[3:0]  看门狗复位(喂狗),先写0xa 再写0x5 复位看门狗,两次写入不超过0.5个看门狗周期,读出为0000
3 EN   看门狗定时器使能位,在定时器模式下写0 停止计数,在看门狗模式下写0 无效
 0  停止计数
 1  启动看门狗/ 开始计数
2 MODE  看门狗定时器模式
 0  看门狗模式 
 1  定时器模式
1:0 INT[1:0]  看门狗时间间隔选择
 00  1 秒
 01  0.25 秒
 10  15.625 毫秒
 11  1.9毫秒
(以32.768K 时钟计算)


void Init_IO(void);
函数原型:

1 void Init_IO(void) 
2 { 
3   P1DIR = 0x03; 
4  led1 = 1; 
5  led2 = 1; 
6 } 


函数功能:将P10,P11 设置为输出控制LED 。
 

void Init_Watchdog(void);
函数原型:

1 void Init_Watchdog(void) 
2 { 
3   WDCTL = 0x00; 
4  //时间间隔一秒,看门狗模式 
5   WDCTL |= 0x08; 
6  //启动看门狗 
7 } 

函数功能:以看门狗模式启动看门狗定时器,看门狗复位时隔1 秒。
 

void Init_Clock(void);
函数原型:

1 void Init_Clock(void) 
2 { 
3   CLKCON = 0X00; 
4 } 

函数功能:将系统时钟设为晶振,低速时钟设为晶振,程序对时钟要求不高,不用等待晶振稳定。

 1 //main.c
 2 
 3 # include <ioCC2430.h>
 4 
 5 #define uint unsigned int
 6 
 7 #define led1  P1_0
 8 #define led2  P1_1
 9 
10 void Init_IO(void)
11 {
12     P1DIR = 0x03;
13     led1 = 1;
14     led2 = 1;
15 }
16 
17 void Init_Watchdog(void)
18 {
19     WDCTL = 0x00;
20     //时间间隔一秒,看门狗模式
21     WDCTL |= 0x08;
22     //启动看门狗
23 }
24 
25 void Init_Clock(void)
26 {
27     CLKCON = 0X00;
28 }
29 
30 void Delay(void)
31 {
32     uint n;
33     for(n=50000;n>0;n--);
34     for(n=50000;n>0;n--);
35     for(n=50000;n>0;n--);
36     for(n=50000;n>0;n--);
37     for(n=50000;n>0;n--);
38     for(n=50000;n>0;n--);
39     for(n=50000;n>0;n--);
40 }
41 
42 void main(void)
43 {
44     Init_Clock();
45     Init_IO();
46     Init_Watchdog();
47 
48     led1=0;
49     Delay();
50     led2=0;
51     while(1)
52     {
53 
54     }    //喂狗指令(加入后系统不复位,小灯不闪烁)
55 }
原文地址:https://www.cnblogs.com/zeedmood/p/2666953.html