• 单片机C语言实例:13、看门狗


    一、看门狗溢出测试

    程序实例1:

    1. #include
    2. sfr WDTRST = 0xA6;
    3. sbit key = P3^1;
    4. /*------------------------------------------------
    5. 喂狗
    6. ------------------------------------------------*/
    7. void Rst_Watchdog( void )
    8. {
    9. WDTRST = 0x1E; //先赋值1E 然后赋值E1
    10. WDTRST = 0xE1;
    11. }
    12. /*------------------------------------------------
    13. 主函数
    14. ------------------------------------------------*/
    15. void main( void )
    16. {
    17. int i;
    18. // 设置看门狗时间为1个时钟循环后
    19. Rst_Watchdog();
    20. //关看门狗一个时钟循环
    21. for( i = 0; i < 500; i++)
    22. {
    23. Rst_Watchdog();
    24. }
    25. P1=0x00;
    26. while(!key) //按下按键不松开,表示程序一直在按键处循环,并用LED显示0x55
    27. {
    28. P1=0x55; //模拟出错 正常情况应该一直显示LED,
    29. //但是加看门狗之后不间断复位,倒是LED闪烁
    30. }
    31. }

    二、按键喂狗

    程序实例2:

    1. #include
    2. sfr WDTRST = 0xA6;
    3. sbit K1 = P3^0;
    4. sbit K2 = P3^1;
    5. sbit LED1=P1^1;
    6. sbit LED2=P1^2;
    7. void DelayUs2x(unsigned char t);//us级延时函数声明
    8. void DelayMs(unsigned char t); //ms级延时
    9. /*------------------------------------------------
    10. 主函数
    11. ------------------------------------------------*/
    12. main()
    13. {
    14. LED1=0;
    15. DelayMs(100);
    16. LED1=1;
    17. DelayMs(100);
    18. TMOD=0x01;
    19. TH0=0xc6; //定时16ms
    20. TL0=0x66;
    21. EA=1;
    22. ET0=1;
    23. WDTRST=0x1e; //在程序初始化中激活看门狗。
    24. WDTRST=0xe1; //先送1E,后送E1
    25. if(K1==0)
    26. {
    27. TR0=1;
    28. }
    29. while(1)
    30. {
    31. if(K2==0)
    32. {
    33. TR0=0;
    34. }
    35. LED2=1;
    36. LED1=1;
    37. DelayMs(100);
    38. LED2=0;
    39. DelayMs(100);
    40. }
    41. }
    42. /*------------------------------------------------
    43. 定时器中断函数
    44. ------------------------------------------------*/
    45. void Time0(void) interrupt 1
    46. {
    47. TH0=0xc6; //定时16ms
    48. TL0=0x66;
    49. WDTRST=0x1e; //喂狗指令
    50. WDTRST=0xe1;
    51. }
    52. /*------------------------------------------------
    53. uS延时函数,含有输入参数 unsigned char t,无返回值
    54. unsigned char 是定义无符号字符变量,其值的范围是
    55. 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
    56. 长度如下 T=tx2+5 uS
    57. ------------------------------------------------*/
    58. void DelayUs2x(unsigned char t)
    59. {
    60. while(--t);
    61. }
    62. /*------------------------------------------------
    63. mS延时函数,含有输入参数 unsigned char t,无返回值
    64. unsigned char 是定义无符号字符变量,其值的范围是
    65. 0~255 这里使用晶振12M,精确延时请使用汇编
    66. ------------------------------------------------*/
    67. void DelayMs(unsigned char t)
    68. {
    69. while(t--)
    70. {
    71. //大致延时1mS
    72. DelayUs2x(245);
    73. DelayUs2x(245);
    74. }
    75. }

  • 相关阅读:
    vim编译器工具
    牛客刷题——剑指offer(第6期)
    【软件测试】--功能测试4-html介绍
    Map获取其键和值
    C++程序文件的目录结构
    JavaWeb 学习笔记 2:Tomcat
    与Cartesi 技术社区经理Shaheen 的 AMA 回顾
    JSON.stringify()和JSON.parse()的使用
    Python 程序员过中秋Python+pygame 制作拼图小游戏(附源码:5源码)
    java计算机毕业设计快滴预约平台源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://blog.csdn.net/m0_49968063/article/details/132794220