查看: 1101|回复: 0

[经验] STC单片机中的WatchDog使用心得

[复制链接]
  • TA的每日心情
    无聊
    2018-11-16 10:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2019-11-26 09:08:36 | 显示全部楼层 |阅读模式
    分享到:
    WatchDog看门狗程序是一个我们经常会用到的程序。这里基于自己的理解和查阅相关的资料来对其进行一下说明。

    1、为什么要使用看门狗?

    由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果。

    2、看门狗的大体原理(自己理解的)
    经过使用看门狗后,我说一下我对对看门狗的理解。
    看门狗其实就类似一个计数器,启动看门狗后,它就开始自己计数,如果计数到了一个值或时间(这个可以自己设定)它就会溢出,溢出同时它就会给系统一个复位信号,这时系统程序就会从头开始运行。
    为了不让看门狗的值溢出,我们需要在程序运行中喂狗(也就是手动把看门狗的计数值清零)确保它不会溢出。
    如果你的程序中用了延时函数那请注意一下延时时间的设置不要和看门狗的溢出时间冲突了,这个我就不细说了需要大家动手练习才更容易理解。
    最后在补充一句。
    其实溢出的同时看门狗的溢出标志位也会置一,如果你设置了看门狗相关的中断,它就会进入中断程序。(进入中断程序后别忘了手动清除看门狗的溢出标志位)
    3、看门狗的使用(基于STC15W204S单片机、Keil 5环境、C语言)

    在这里只给出整个程序的一部分,为了讲解使用。
    void main(void){UART1_Init(); //这时串口1的初始化函数EA = 1; //开启总中断SendString("Ready! rn"); //通过串口1向计算机发送一个字符串WDT_CONTR = 0x36; //这一句里包含了启动看门狗、清零看门狗、设置其为128分频while(1){/*------------喂狗,也就是清零看门狗计数器------------*/WDT_CONTR = 0x36; //这一句里包含了启动看门狗、清零看门狗、设置其为128分频}}
    11.jpg
    上图为STC官方手册截图


    通过STC-ISP程序烧写代码,这里要注意红框部分,选择自己的分频数(这里为128)

    下面开始说明上面代码,很简单。

    如果while(1)中没有喂狗程序,上电后串口会一直间隔接受到“Ready!”,这里就是看门狗溢出导致系统复位所产生的效果,系统会每隔一会就从头跑。

    如果在while(1)中加上喂狗程序,上电后串口只接受到一条“Ready!”,这就是喂狗程序起作用了,不停的给看门狗清零,确保看门狗不会溢出,系统也就不会复位。

    以上内容仅供参考!

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-13 03:20 , Processed in 0.119175 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.