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;
}
那就不让狗监视等待输入这个阶段 可以么?
下来看看支持。
很简单啊!把串口数据存到一个数组中,当接受完成了再判断,根本不用去等