微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 89c52加看门狗的一个简单问题

89c52加看门狗的一个简单问题

时间:10-02 整理:3721RD 点击:

有个c51的单片机程序,已知一段时间会跑飞,于是加看门狗,但问题来了,下面给个程序片段,问题在红色部分,程序一直等待串口来数据,造成看门狗超时,请问我该如何解决?谢谢
#include <reg51.h>
#include <stdio.h>
sfr WDT_CONTR=0xE1;//定义特殊功能寄存器:STC单片机看门狗控制寄存器
#define WEIGOU WDT_CONTR=0x36
/*************************函数声明**************************************************************/
  char RevByte();
  int RevStr(char *s);
  char RevByte();//调试用于向串口助手发数据
/******************************全局变量声明********************************************/
unsigned char ss[LEN];
unsigned char ssre[LEN];
/*********************************************************************************************/
#define DEBUG
//#define IN_EUROPE //Use this define to setup European FM reception
void  SerialInit();//串口初始化

int main()                                
{
         WEIGOU;//喂狗
    SerialInit();
while(1)
{
         WEIGOU;         //喂狗  
     printf("1\n");        
RevStr(ss);//***********程序运行到这里 一直等待串口输入字符串 造成看门狗超时重启
printf("ss=%s\n",ss);
      
    if(ss[0]!='\0')         {
                        strcpy(ssre,ss);
                        printf("if\n");
                 WEIGOU;         //喂狗  
    }        
                 else
                 {         
                 printf("else\n");
                   WEIGOU;         //喂狗  
                    continue;         
                }         
           
                for(j=0;j<LEN;j++)ss[j]='\0';//数组使用完后吗,别忘了清除数组值!
printf("2\n");
    }
}

/**************从串口接收一个字符*********************************/
{
   char dat;
   RI=0;
   while(!RI);
   {
   dat=SBUF;
   RI=0;
   }
   return dat;
}
/**************从串口接收一个字符串**********************************/
int RevStr(char *s)
{  
while( (*s=RevByte())!='#')  
    {
      s++;
    }
     *s='\0';
        if (s[0]!='\0')
   return 1;
   else return 0;
   
}

那就不让狗监视等待输入这个阶段 可以么?

下来看看支持。

很简单啊!把串口数据存到一个数组中,当接受完成了再判断,根本不用去等

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top