AT89S52死机问题,头疼啊/请高手指点

2020-01-30 14:16发布

我用AT89S52做了个简单的程序如下,使用一段时间工作10小时要死机4、5次吧。用的是51最小系统板杜邦线插接的,电源开关电源24V加78L05供电驱动5V四路继电器板负载电磁阀驱动气缸动作,动作很简单就是总是死机,之后改了带狗的程序还是死啊,郁闷ing.....请高手帮忙看看什么问题。
不带看门狗的程序:
#include <at89x52.h>

sbit key1 = P0^3;
void Delay(int m)
{
        while(--m);
}

void main(void)
{
        int n ;          
                n=0;
        while(1)
        {   
                P0_0=1;
                P0_1=1;
                P0_2=1;
                if(!key1)
                { Delay(10000);
                        if(!key1)
                        {
                           n=n+1;
                           if(n==3)
                           {
                           n=1;
                           }

                  while(!key1)
                         {
                                     if(n==1)
                                {                  
                                        P0_0 = 0;

                                  }
                            if(n==2)
                               {                  
                                        P0_2 = 0;
                               }
                          }
                          }
                 }
          
        }
}




带看门狗的程序
#include <at89x52.h>
void WatchDog(void);
void Delay(void);
sbit key1 = P0^3;
sfr WDTRST  = 0xA6;
int n,i ;         
void Delay(void)
{
    for(i=0;i<5000;i++)
            WatchDog();
}
void WatchDog(void)
{
    WDTRST =0x1E;
    WDTRST =0xE1;
}
void main(void)
{        
   WatchDog();
                n=0;
        while(1)
        {   WatchDog();
                P0_0=1;
                P0_1=1;
                P0_2=1;
       
                if(!key1)
                { Delay();
                        if(!key1)
                        {
                           n=n+1;
                                WatchDog();
                           if(n==3)
                           {
                           n=1;
                                 WatchDog();
                           }

                  while(!key1)
                         {  WatchDog( );
                                     if(n==1)
                                {                  
                                        P0_0 = 0;
                                           WatchDog();
                                  }
                            if(n==2)
                               {                  
                                        P0_2 = 0;
                                                WatchDog();
                               }
                          }
                          }
                 }
          
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
36条回答
lijia115003
1楼-- · 2020-02-03 01:17
shuipaopao 发表于 2013-2-6 09:21
会死机或重启,运行不正常啊。带继电器的电路要加上消除电火花的电容。整个系统要加EMC滤波,单片机电源 ...

受教了,谢谢哈
i_kkyu
2楼-- · 2020-02-03 01:33
似乎挺常见的问题。
barryliu
3楼-- · 2020-02-03 04:40
 精彩回答 2  元偷偷看……
fjourdev
4楼-- · 2020-02-03 06:55
我做过数字555+4017控制普通玩具电机,定时的电路,定时一直不准!最后在电机上串1mH的电感才解决!死机先试下理想状态会死?会,程序问题。不会,比较大原因硬件问题,虽然软甲有时可以解决!但是不要用软件解决!而先采用硬件解决,软件等不死机在进行加强性处理,也不要动不动更换CPU,因为换掉CPU跟用软甲解决具有随机性,会为后面量产埋下祸根!
xiaobendan001
5楼-- · 2020-02-03 09:43
硬件问题,按理说AT的不会那么差的
另外,死机是怎么看出来的?
你程序有些问题。对于输入信号的抖动没有处理的很好。这种编程方式,唉!在论坛里面好好的看看别人的帖子吧。
建议还是先把硬件发上来看看吧。
xiaobendan001
6楼-- · 2020-02-03 12:11
看到过一个很大的焊机还是叫做什么吧,类似的,好像河南人做的哦,就是AT的片子的,那家伙可控硅控制一个大变压器,输出几千安的电流啊,我有个做PLC应用的朋友,用了好几种虽然都是国产的,但是都不行,动不动就死机,但是这个AT的单片机做的非常稳定哦,从来没有死机的,所以不要怀疑芯片的问题

一周热门 更多>