独闷闷网

 找回密码
 立即注册
搜索
查看: 2589|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-6 17:37:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 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. }
复制代码






乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-4-26 14:56 , Processed in 0.167858 second(s), 20 queries .

快速回复 返回顶部 返回列表