标题: 51单片机定时喂狗代码该怎么写? [打印本页]

作者: sr861126    时间: 2023-5-9 17:49
标题: 51单片机定时喂狗代码该怎么写?
     大侠丢几行代码,学一下

作者: Hephaestus    时间: 2023-5-9 19:12
标准的51单片就没有狗,扩展型的有,具体型号写法并不一样,你这话题没人能接。
作者: 快乐眼泪    时间: 2023-5-9 19:39
自己的单片机,根据型号查看一下数据手册,一般都有例程
作者: sr861126    时间: 2023-5-10 08:01
Hephaestus 发表于 2023-5-9 19:12
标准的51单片就没有狗,扩展型的有,具体型号写法并不一样,你这话题没人能接。

STC89C52RC 的没有喂狗吗?

作者: man1234567    时间: 2023-5-10 08:34
标准的51单片没有狗,扩展型或外挂的有,具体型号写法并不一样。
这个问题和问你出门要上厕所怎么走一样 。
作者: yzwzfyz    时间: 2023-5-10 08:40
一行命令而矣,手册上有。懒得也不看书?
关键是将这一句放在何处?
先画程序流程图,就知道放何处理合适了。
一般放在大循环的必由之路上。
作者: coody_sz    时间: 2023-5-10 10:59
STC的MCU,喂狗就是一要指令,WDT_CONTR = 某个值;
作者: angmall    时间: 2023-5-10 13:48
sr861126 发表于 2023-5-10 08:01
STC89C52RC 的没有喂狗吗?

STC89C52RC 有喂狗的
我给你来个程序试试

  1. /*-----------------------------------------------
  2.   名称:看门狗溢出实验 按键不停喂狗
  3.   日期:2009.5
  4.   修改:无
  5.   内容:通过按键喂狗防止溢出复位 看门狗演示程序  
  6.         在16383个机器周期内必须至少喂狗一次
  7.         标准AT89s52单片机试验通过。
  8. ------------------------------------------------*/
  9. #include <reg52.h>

  10. sfr WDTRST = 0xA6;

  11. sbit  K1 = P3^0;
  12. sbit  K2 = P3^1;
  13. sbit  LED1=P1^1;
  14. sbit  LED2=P1^2;

  15. void DelayUs2x(unsigned char t);//us级延时函数声明
  16. void DelayMs(unsigned char t); //ms级延时
  17. /*------------------------------------------------
  18.                     主函数
  19. ------------------------------------------------*/
  20. main()
  21. {
  22.    LED1=0;
  23.    DelayMs(100);
  24.    LED1=1;
  25.    DelayMs(100);

  26.    TMOD=0x01;
  27.    TH0=0xc6;      //定时16ms
  28.    TL0=0x66;
  29.    EA=1;
  30.    ET0=1;

  31.    WDTRST=0x1e;   //在程序初始化中激活看门狗。
  32.    WDTRST=0xe1;   //先送1E,后送E1

  33.    if(K1==0)
  34.    {
  35.      TR0=1;
  36.    }

  37.    while(1)
  38.    {   
  39.      if(K2==0)
  40.      {
  41.        TR0=0;
  42.      }
  43.          LED2=1;
  44.          LED1=1;
  45.          DelayMs(100);
  46.          LED2=0;
  47.          DelayMs(100);
  48.    }
  49. }
  50. /*------------------------------------------------
  51.               定时器中断函数
  52. ------------------------------------------------*/
  53. void Time0(void) interrupt 1
  54. {
  55.    TH0=0xc6;      //定时16ms
  56.    TL0=0x66;

  57.    WDTRST=0x1e;   //喂狗指令
  58.    WDTRST=0xe1;
  59. }

  60. /*------------------------------------------------
  61. uS延时函数,含有输入参数 unsigned char t,无返回值
  62. unsigned char 是定义无符号字符变量,其值的范围是
  63. 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  64. 长度如下 T=tx2+5 uS
  65. ------------------------------------------------*/
  66. void DelayUs2x(unsigned char t)
  67. {   
  68. while(--t);
  69. }
  70. /*------------------------------------------------
  71. mS延时函数,含有输入参数 unsigned char t,无返回值
  72. unsigned char 是定义无符号字符变量,其值的范围是
  73. 0~255 这里使用晶振12M,精确延时请使用汇编
  74. ------------------------------------------------*/
  75. void DelayMs(unsigned char t)
  76. {
  77.      
  78. while(t--)
  79. {
  80.      //大致延时1mS
  81.      DelayUs2x(245);
  82.          DelayUs2x(245);
  83. }
  84. }
复制代码



作者: rayin    时间: 2023-5-14 22:51
用定时器喂狗不合适吧,主程序跑飞了,但定时器仍旧喂狗,不能复位系统. 应该在主程序loop里面加喂狗指令, 程序跑飞,超时不能喂狗重启系统.
作者: chscn    时间: 2023-5-15 05:21
angmall 发表于 2023-5-10 13:48
STC89C52RC 有喂狗的
我给你来个程序试试

学习了 谢谢分享
作者: Longan.Wang    时间: 2023-5-15 11:14
一般都是清除WDG的计数寄存器,使其不溢出。查看Datasheet,找到对应的寄存器,按照其操作方法就OK了!
作者: coody_sz    时间: 2023-5-15 16:26
不要在定时器中断中喂狗,那将是一条宠物狗!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1