独闷闷网
标题:
stc15系列单片机的喂狗指令是什么,也就是用哪条指令让它的重新计数?已解答。
[打印本页]
作者:
jianhong_wu
时间:
2015-1-6 17:37
标题:
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;这是根据以下数据手册:
4.png
(104.25 KB, 下载次数: 191)
下载附件
保存到相册
2015-1-6 17:33 上传
如果在把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; //喂狗指令
}
}
复制代码
欢迎光临 独闷闷网 (http://dumenmen.com/)
Powered by Discuz! X3.2