看门狗定时器(WDT,WatchDogTImer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
工作原理
使用时,WDT将递增,直到溢出,或称“超时”。除非处于休眠或空闲模式,WDT超时会强制器件复位。为避免WDT超时复位,用户必须定期用PWRSAV或CLRWDT指令将看门狗定时器清零。如果WDT在休眠或空闲模式下超时,器件将唤醒并从PWRSAV指令执行处继续执行代码。在上述两种情况下,WDTO位(RCON《4》)都会置1,表示该器件复位或唤醒事件是由于WDT超时引起的。如果WDT将CPU从休眠或空闲模式唤醒,“休眠”状态位(RCON《3》)或“空闲”状态位(RCON《2》)也会置1,表示器件之前处于省电模式。
在正常操作期间,一次WDT超时溢出将产生一次器件复位。当器件处于休眠状态时,一次WDT超时溢出将唤醒器件,使其继续正常操作(即称作WDT唤醒)。对WDTE设置位清零可以永久性地关闭WDT。
后分频器分配完全是由软件控制,即它可在程序执行期间随时更改。
为避免发生不可预测的器件复位,当从TImer0预分频器的分配改为WDT后分频器的分配时,必须执行下列指令序列。即使WDT被禁止,也要执行这个指令序列。
PIC系列不同型号的单片机其,看门狗设置不同,下面是以PIC16F688单片机为例。
1.如果配置字中的WDTE=1那么后面的看门狗开关(WDT)不起作用,所以当我们程序中有休眠模式的时候我们的看门狗会一直溢出,但是溢出后是否复位,这要看单片机的具体类型了,PIC16F688在休眠唤醒后继续执行程序,不复位,但是其他的单片机看手册。如果我们程序中休眠的时候不需要看门狗,那么我们必须把看门狗关了,在唤醒的时候千万不要忘记打开看门狗。
2.单片机的一级分频是和TIME0互用的,同一时刻只能一方使用。
如果我们选用内部4M时钟且我们预分频给了定时器TIME0,那么我们的看门狗最长时间是0.262144s 那么我们采用定时器0喂狗,我们定时器0 中断的时间必须小于0.262144
否则我们就会复位