|
由于做个设备 ,要添加看门狗做个保险,最后测试发现看门狗一旦开启,就无法关闭,除非断电。
以下是我设置的程序功能:
程序开始的时候 让LED3常亮3秒,然后熄灭,表明程序初始化完成,进入while循环,之后LED3不会再亮。
程序初始化时候,开始定期器1,让其每秒钟改变LED2的状态,也就是1秒钟亮一下,1秒钟灭一下,表明程序正常在跑。
然后利用按键K1来控制看门狗,K1按下1次,LED1会亮,同时初始化看门狗和把开启看门狗标志置1。再按下一次LED1灭,把看门狗标志置0。
在定时器中断里面,只要看门狗标志为1,则每秒钟都喂狗一次。
把看门狗设置为256分频,也就是大概5秒钟的喂狗周期,过了这个时间没喂狗的话,系统就会重启。
下面是我的测试方法和显现:
给单片机上电,LED3开始亮3秒,然后熄灭,
然后只有LED2开始正常闪烁。
按下按键K1,LED1亮起,表明开启看门狗。此时LED2也正常闪烁。
再次按下K1,LED1熄灭,表明看门狗标志位置0,定时器中断里面不会再喂狗。
此时LED2再闪烁几次后,由于没有喂狗,LED3常亮3秒然后熄灭,表明系统重启了,LED2再闪烁几秒,LED3由常亮3秒后熄灭,表明系统又重启,LED2再闪烁几秒,如此循环。
问题的关键是我在程序的开头,就定义了这样一句:“WDT_CONTR = 0x07; //把看门狗寄存器设置为关闭状态” ,视图把看门狗关闭,但是结果并没有什么用。最后总结出,看门狗一旦开启,就无法关闭,如果没在规定的时间内喂狗,那么就会无限重启。
以下是程序代码
以下是程序文件,在KEIL 4下面编译通过。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|