WDT其实就是一个定时器,只是这个定时器的中断向量是指到复位地址,产生中断后芯片就复位了,但也有些单片机看门狗溢出后有专门的中断向量。既然它的中断向量指向复位地址,那么芯片要正常运行,我们肯定要避免它溢出,即喂狗。有些单片机的WDT定时器可以读,所以有人拿WDT来做定时器用的。
单片机一般要有个死循环,不断地执行各个子程序,如果把清WDT定时器(喂狗)的指令放到这个死循环里,那么就会循环一次清(喂狗)一次,WDT不会溢出。但是当程序出错,跑飞时,不会再这样循环,喂狗指令不会再被执行,那么WDT必然会溢出,芯片复位,即相当于重新上电运行。
清狗指令不能放定时器中断里,因此不管程序飞跑到哪里,执行哪里,中断产生后都会执行中断函数,所以在定时器里的清狗指令会使WDT起不到作用(失效)。
看门狗的作用是当程序跑飞了,就给程序复位。
看门狗就像个闹钟,当时间到了你就知道该干什么了。
在程序中,你给闹钟定好时间,当定时时间到单片机就自动复位单片机。为了不让闹钟响,所以我们在程序中一有空就把时间调到零。也就是说,在你的程序开始处启动看门狗,并设定看门狗时间。并确定在看门狗时间内就喂下狗。但是一旦程序跑飞,就不可能时时的喂狗了。那当时间到,看门狗就复位单片机
防止程序跑飞