首先要知道看门狗是为了防止程序跑飞的。你可以把看门狗理解为一个定时器,使用看门狗功能时这个定时器的值会一直增加,溢出后会产生中断,这个中断是个特殊的中断,一旦产生就会使程序复位,我们为了保证程序的正常运行就不能让这个中断产生,也就是不能让定时器溢出,所以你在正常运行的程序中需要在溢出前把定时器寄存器的值清零,你需要一遍一遍的清零,听起来比较麻烦,其实就是在程序运行期间调用一个喂狗指令,这个指令执行就是把看门狗定时器清零了。当程序跑飞的时候,也就是单片机不按照你写的指令执行了,当然也就不会执行喂狗指令,看门狗定时器就会溢出,然后单片机就复位了。就好像一个看门狗把跑飞的程序叼回起点,很形象的反映了他的功能。
AVR里面的看门狗可以说是有两个作用的,一个呢就是防止单片机受到干扰致使程序跑飞,当程序跑飞了直到看门狗溢出还没有跑回来就会置位一个中断标志,AVR里面的看门狗可以通过设置让看门狗溢出的时候是产生一个中断,或复位,或者先产生一个中断完成中断服务程序后再复位。这样的好处是当程序跑飞时我们可以做一个处理,保护现场的那些有用变量。当单片机复位后还可以通过访问内部寄存器查询单片机上一次是因为什么原因复位的,因而又可以作不同的处理。另外一个就是大家所说的计时作用的,其实AVR单片机看门狗定时的话不太好用,因为只有固定溢出时间,虽然有几个选值但还是不太好用的。
防止程序跑飞,或者是睡眠唤起(节能)。等等,,,