单片机交流
直播中

杨言

12年用户 555经验值
私信 关注
[问答]

请问一下cc2530看门狗程序的编程思路是怎样的

请问一下cc2530看门狗程序的编程思路是怎样的?

回帖(1)

张红

2021-11-8 11:53:19
  看门狗程序的编程思路
  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灯就不断闪烁
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分