jianhong_wu 发表于 2015-1-6 17:37:27

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

本帖最后由 jianhong_wu 于 2015-1-6 17:39 编辑

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

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

#include "reg51.h"
#include "intrins.h"

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

void delay(unsigned int i)
{
    while (i--)
    {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
    }
}

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

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

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

void delay(unsigned int i)
{
    while (i--)
    {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
    }
}

void main()
{
    P32 = 0;
    delay(10000);         //复位闪灯延时
    P32 = 1;
    WDT_CONTR = 0x04;       //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
                            //设置看门狗定时器分频数为32,溢出时间如下:
                            //11.0592M : 1.14s
                            //18.432M: 0.68s
                            //20M      : 0.63s
    WDT_CONTR |= 0x20;      //启动看门狗
    while (1)
    {
       WDT_CONTR |= 0x10; //喂狗指令
    }
}






页: [1]
查看完整版本: stc15系列单片机的喂狗指令是什么,也就是用哪条指令让它的重新计数?已解答。