独闷闷网

标题: stc15系列单片机的喂狗指令是什么,也就是用哪条指令让它的重新计数?已解答。 [打印本页]

作者: jianhong_wu    时间: 2015-1-6 17:37
标题: stc15系列单片机的喂狗指令是什么,也就是用哪条指令让它的重新计数?已解答。
本帖最后由 jianhong_wu 于 2015-1-6 17:39 编辑

问:
stc15系列单片机的喂狗指令是什么,也就是用哪条指令让它的重新计数?

鸿哥-深圳:
我们能直接在stc-isp这个烧录软件里找到看门狗的溢出复位程序,比如:

  1. #include "reg51.h"
  2. #include "intrins.h"

  3. sfr WDT_CONTR   = 0xc1;     //看门狗控制寄存器
  4. sbit P32        = P3^2;     //测试口

  5. void delay(unsigned int i)
  6. {
  7.     while (i--)
  8.     {
  9.         _nop_();
  10.         _nop_();
  11.         _nop_();
  12.         _nop_();
  13.         _nop_();
  14.     }
  15. }

  16. void main()
  17. {
  18.     P32 = 0;
  19.     delay(10000);           //复位闪灯延时
  20.     P32 = 1;
  21.     WDT_CONTR = 0x04;       //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
  22.                             //设置看门狗定时器分频数为32,溢出时间如下:
  23.                             //11.0592M : 1.14s
  24.                             //18.432M  : 0.68s
  25.                             //20M      : 0.63s
  26.     WDT_CONTR |= 0x20;      //启动看门狗
  27.     while (1);
  28. }
复制代码
但是要让它不溢出复位的喂狗指令是什么?我仔细看了芯片资料后,发现喂狗指令是:WDT_CONTR |= 0x10;这是根据以下数据手册:

如果在把WDT_CONTR |= 0x10;添加到以上那段代码的while(1)里就不会溢出复位的,起到及时喂狗的效果。比如:

  1. #include "reg51.h"
  2. #include "intrins.h"

  3. sfr WDT_CONTR   = 0xc1;     //看门狗控制寄存器
  4. sbit P32        = P3^2;     //测试口

  5. void delay(unsigned int i)
  6. {
  7.     while (i--)
  8.     {
  9.         _nop_();
  10.         _nop_();
  11.         _nop_();
  12.         _nop_();
  13.         _nop_();
  14.     }
  15. }

  16. void main()
  17. {
  18.     P32 = 0;
  19.     delay(10000);           //复位闪灯延时
  20.     P32 = 1;
  21.     WDT_CONTR = 0x04;       //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
  22.                             //设置看门狗定时器分频数为32,溢出时间如下:
  23.                             //11.0592M : 1.14s
  24.                             //18.432M  : 0.68s
  25.                             //20M      : 0.63s
  26.     WDT_CONTR |= 0x20;      //启动看门狗
  27.     while (1)
  28.     {
  29.        WDT_CONTR |= 0x10; //喂狗指令
  30.     }
  31. }
复制代码











欢迎光临 独闷闷网 (http://www.dumenmen.com/) Powered by Discuz! X3.2