当AT89S51单片机运行出错或程序陷入死循环时,如何摆脱困境?

新农商网 全部 1021

当AT89S51单片机运行出错或程序陷入死循环时,如何摆脱困境?

回复

共2条回复 我来回复
  • 易学单片机
    易学单片机
    这个人很懒,什么都没有留下~
    评论

    如果是程序正在运行中,最直接的当然是按下复位键重新运行了。

    如果是为了在编写程序时防止单片机运行出错,那就要采用看门狗了

    看门狗是什么狗?

    简单的说就是为了防止单片机收到外界电磁干扰致使程序跑飞,程序陷入死循环,不能正常运行。我们在写程序时激活一个叫做看门狗的定时器,然后这个定时间就自动计时了,我们需要在看门狗计时的周期内定时喂狗,也就是复位定时器。一旦我们程序出错就不能及时喂狗,那么看门狗就会因为计数溢出,然后就单片机认为程序出错了,产生复位信号,使程序重新运行。

    AT89S51看门狗如何使用

    AT89S系列单片机的看门狗在使用之前要先声明一下,以为它没有包含在reg51.h头文件中。声明和激活看门狗程序如下:

    sfr WDTRST=0XA6; 声明

    void main()

    {

    WDTRST=0X1E;

    WDTRST=0XE1;//初始化激活看门狗

    while(1)

    {

    WDTRST=0X1E;

    WDTRST=0XE1;//喂狗 如果程序陷入死循环就不会喂狗了,程序就重新运行了

    其他子程序

    }

    }

    特别说明

    AT89S51只有14位计数器。在16383个机器周期内必须至少喂狗一次。而且这个时间是固定的,无法更改。当晶振为12M时每16个毫秒需喂狗一次。所以在实际应用中,对于大程序,要在不同位置喂狗,两次喂狗时间间隔小于溢出时间。使用看门狗要特别注意溢出时间的问题,养狗是为了看家,但养不好了程序一直复位就使自己受伤了。哈哈!

    2018-03-22 11:09:44 0条评论
  • 老马识途单片机
    老马识途单片机
    这个人很懒,什么都没有留下~
    评论

    单片机运行出错,或者陷入死循环,有可能是硬件电路原因,也有可能是程序原因。

    一、排除电路故障

    当单片机运行出错,直观的表现就是电路中某一部分不能正常工作,这个时候就需要我们运用电子知识,借助测量工具,检查电路中的故障点,看看是不是电路存在断路、短路等问题,元器件是否正常工作。电压电流是否正常。

    程序陷入死循环不一定全是软件原因,例如对于有的单片机,需要时钟配置的,而时钟配置如果不成功的话,程序不运行,如果晶振电路有问题那么程序就会一直停留在时钟配置这段程序中。造成了所谓的死循环。

    另外如果电路不稳定,造成程序运行过程中单片机受到干扰,程序就会跑飞。

    二、排除程序故障

    如果排除的电路的问题,那么就要检查程序了,对于简单的故障,根据经验可能很快就能定位道程序出错的位置和出错原因,那就直接去检查那一段程序,然后修改。

    如果故障现象比较复杂,这个时候最好借助仿真器,让程序在仿真环境下运行,运用单步、跳转、断点等仿真手段,在仿真过程中观察程序中的数据或者电路的运行状态,当数据出错或电路故障表现出来的时候,程序运行到哪里了,这个地方可能就存在错误,检查并修改。

    对于死循环问题,在程序这几种应尽量避免使用死循环,例如可以设定一个最大等待出错时间,如果超过最大时间,就设置错误警示。如果必须使用死循环,可以考虑使用看门狗等手段,使单片机实现超时复位。

    2018-07-11 19:20:52 0条评论