找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 830|回复: 11
收起左侧

51单片机定时喂狗代码该怎么写?

[复制链接]
ID:302293 发表于 2023-5-9 17:49 | 显示全部楼层 |阅读模式
     大侠丢几行代码,学一下
回复

使用道具 举报

ID:883242 发表于 2023-5-9 19:12 | 显示全部楼层
标准的51单片就没有狗,扩展型的有,具体型号写法并不一样,你这话题没人能接。
回复

使用道具 举报

ID:399179 发表于 2023-5-9 19:39 来自手机 | 显示全部楼层
自己的单片机,根据型号查看一下数据手册,一般都有例程
回复

使用道具 举报

ID:302293 发表于 2023-5-10 08:01 | 显示全部楼层
Hephaestus 发表于 2023-5-9 19:12
标准的51单片就没有狗,扩展型的有,具体型号写法并不一样,你这话题没人能接。

STC89C52RC 的没有喂狗吗?
回复

使用道具 举报

ID:584814 发表于 2023-5-10 08:34 | 显示全部楼层
标准的51单片没有狗,扩展型或外挂的有,具体型号写法并不一样。
这个问题和问你出门要上厕所怎么走一样 。
回复

使用道具 举报

ID:123289 发表于 2023-5-10 08:40 | 显示全部楼层
一行命令而矣,手册上有。懒得也不看书?
关键是将这一句放在何处?
先画程序流程图,就知道放何处理合适了。
一般放在大循环的必由之路上。
回复

使用道具 举报

ID:1034262 发表于 2023-5-10 10:59 | 显示全部楼层
STC的MCU,喂狗就是一要指令,WDT_CONTR = 某个值;
回复

使用道具 举报

ID:155507 发表于 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. }
复制代码


回复

使用道具 举报

ID:517951 发表于 2023-5-14 22:51 | 显示全部楼层
用定时器喂狗不合适吧,主程序跑飞了,但定时器仍旧喂狗,不能复位系统. 应该在主程序loop里面加喂狗指令, 程序跑飞,超时不能喂狗重启系统.
回复

使用道具 举报

ID:435636 发表于 2023-5-15 05:21 | 显示全部楼层
angmall 发表于 2023-5-10 13:48
STC89C52RC 有喂狗的
我给你来个程序试试

学习了 谢谢分享
回复

使用道具 举报

ID:77589 发表于 2023-5-15 11:14 | 显示全部楼层
一般都是清除WDG的计数寄存器,使其不溢出。查看Datasheet,找到对应的寄存器,按照其操作方法就OK了!
回复

使用道具 举报

ID:1034262 发表于 2023-5-15 16:26 | 显示全部楼层
不要在定时器中断中喂狗,那将是一条宠物狗!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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