看门狗实际上就是一个定时计数器,用来防止程序发生意外而设置的一个监测装置,只要看门狗功能打开,看门狗计数器的计数值是会不停的增加,程序正常运行时,需要在看门狗计数器达到最大值之前(就是看门狗最大计数时间之内)将其清空,使其重新开始计数,这就是“喂狗”。
如果程序跑飞,或者发生什么意外状况,而使得“喂狗” *** 作不能正常进行,看门狗计数器会不断增加,直到溢出,然后单片机复位,从而避免单片机跑飞以后失控而导致死机。
开机时,如果按下了 K1,即可启动T0。T0定时中断,即可自动喂狗,程序即可正常执行while中的内容。
其中就有:
LED2=1DelayMs(100)
LED2=0DelayMs(100)
即:LED2就闪烁。
按下 K2,就关闭了 T0,停止了喂狗。
单片机系统,16ms 后,自动复位。
复位后,如果没有按下 K1,不能自动喂狗,就会频繁的自动复位。
频繁的复位,总是执行开始处的:
LED1=0 DelayMs(100)
LED1=1 DelayMs(100)
所以,就是按key2 LED1闪烁。
对于裸奔的程序,最理想的看门狗是程序只在主循环中加一个喂狗,计算主循环执行一个循环的最长时间的1.5倍作为看门狗定时器的时间,这样只要程序超出了预计的时间未回到主循环,就会自动复位。这样的程序尽量不要让中断服务函数占用太多的处理器资源,将耗费处理器资源的工作放在程序的主循环中,可以更有效的利用看门狗。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)