看门狗程序的编程思路
1.设置好系统时钟源
2.初始化看门狗,选择看门狗模式,1秒的间隔
3.循环使用喂狗程序
/***********************************************
* @project : 看门狗实验
* @时间 :2014年1月20日
* @姓名 :林少游
***********************************************/
#include 《ioCC2530.h》
#define uint unsigned int
#define uchar unsigned char
#define YLED P1_0
#define BLED P1_1
/***********************************************
* @fn :SET_MAIN_CLOCK
* @brief : 设置系统主时钟
* @param :source - 0:选择32MHz的XOSC
1:选择16MHz的RCOSC
* @return :none
***********************************************/
void SET_MAIN_CLOCK(uint source)
{
if(source)
{
CLKCONCMD |= 0X40; //RCOSC
while(!(CLKCONSTA & 0X40)); //等待晶振稳定
}
else
{
CLKCONCMD &= ~0X47; //XOSC
while(CLKCONSTA & 0X40); //等待晶振稳定
}
}
/***********************************************
* @fn :Init_IO
* @brief : 初始化LED灯
* @param :none
* @return :none
***********************************************/
void Init_IO()
{
P1DIR |= 0X03; //P1.0,P1.1 设置为输出
YLED = 0;
BLED = 0; //灯全灭
}
/***********************************************
* @fn :Init_WatchDog
* @brief : 初始化看门狗
* @param :none
* @return :none
***********************************************/
void Init_WatchDog()
{
WDCTL = 0X00;
WDCTL |= 0X08; //选择看门狗模式,1秒的间隔
}
/***********************************************
* @fn :Delay
* @brief : 延时
* @param :n - 延时长度
* @return :none
***********************************************/
void Delay(uint n)
{
uint i;
for(i=0;i《n;i++);
for(i=0;i《n;i++);
for(i=0;i《n;i++);
for(i=0;i《n;i++);
for(i=0;i《n;i++);
}
/***********************************************
* @fn :FeedDog
* @brief : 喂狗
* @param :none
* @return :none
***********************************************/
void FeedDog()
{
WDCTL = 0XA0;
WDCTL = 0X50; //看门狗模式下,定时器计数清零
}
/***********************************************
* @brief : 主函数
***********************************************/
main()
{
SET_MAIN_CLOCK(0); //系统时钟设置为32MHz
Init_IO(); //初始化LED灯
Init_WatchDog(); //初始化看门狗
Delay(10000); //延时
YLED = 1;
BLED = 1; //灯全亮
while(1)
{
FeedDog(); //喂狗,若注释该语句,则系统不断重启,LED灯就不断闪烁
}
}
看门狗程序的编程思路
1.设置好系统时钟源
2.初始化看门狗,选择看门狗模式,1秒的间隔
3.循环使用喂狗程序
/***********************************************
* @project : 看门狗实验
* @时间 :2014年1月20日
* @姓名 :林少游
***********************************************/
#include 《ioCC2530.h》
#define uint unsigned int
#define uchar unsigned char
#define YLED P1_0
#define BLED P1_1
/***********************************************
* @fn :SET_MAIN_CLOCK
* @brief : 设置系统主时钟
* @param :source - 0:选择32MHz的XOSC
1:选择16MHz的RCOSC
* @return :none
***********************************************/
void SET_MAIN_CLOCK(uint source)
{
if(source)
{
CLKCONCMD |= 0X40; //RCOSC
while(!(CLKCONSTA & 0X40)); //等待晶振稳定
}
else
{
CLKCONCMD &= ~0X47; //XOSC
while(CLKCONSTA & 0X40); //等待晶振稳定
}
}
/***********************************************
* @fn :Init_IO
* @brief : 初始化LED灯
* @param :none
* @return :none
***********************************************/
void Init_IO()
{
P1DIR |= 0X03; //P1.0,P1.1 设置为输出
YLED = 0;
BLED = 0; //灯全灭
}
/***********************************************
* @fn :Init_WatchDog
* @brief : 初始化看门狗
* @param :none
* @return :none
***********************************************/
void Init_WatchDog()
{
WDCTL = 0X00;
WDCTL |= 0X08; //选择看门狗模式,1秒的间隔
}
/***********************************************
* @fn :Delay
* @brief : 延时
* @param :n - 延时长度
* @return :none
***********************************************/
void Delay(uint n)
{
uint i;
for(i=0;i《n;i++);
for(i=0;i《n;i++);
for(i=0;i《n;i++);
for(i=0;i《n;i++);
for(i=0;i《n;i++);
}
/***********************************************
* @fn :FeedDog
* @brief : 喂狗
* @param :none
* @return :none
***********************************************/
void FeedDog()
{
WDCTL = 0XA0;
WDCTL = 0X50; //看门狗模式下,定时器计数清零
}
/***********************************************
* @brief : 主函数
***********************************************/
main()
{
SET_MAIN_CLOCK(0); //系统时钟设置为32MHz
Init_IO(); //初始化LED灯
Init_WatchDog(); //初始化看门狗
Delay(10000); //延时
YLED = 1;
BLED = 1; //灯全亮
while(1)
{
FeedDog(); //喂狗,若注释该语句,则系统不断重启,LED灯就不断闪烁
}
}
举报