本帖最后由 2657145539 于 2015-1-27 11:33 编辑
slm342107 发表于 2015-1-27 09:59
一、楼主的硬件设计有问题,应该是电磁干扰没有处理好 二、程序加看门狗复位,跑飞不喂狗后复位。 三、 ...
//#include <absacc.h>
#include<reg52.h>
//#define uint unsigned int;
sbit jishu=P0^0;
sbit gongzuo=P0^1;
sbit mada1=P1^0;
sbit mada2=P1^1;
sbit q=P1^2;
void yanshims(char ms)//延时
{char b,d;
for(b=ms;b>0;b--)
for(d=110;d>0;d--);
}
void s(char s)//延时
{ char f;
unsigned int e;
for(f=s;f>0;f--)
for(e=1100;e>0;e--) ;
}
void shezhi( )//设置,学习计数用
{ TL1=0;
TH1=0;
s(50);
while(!jishu)
{TMOD=0x55;
TR1=1;
mada1=0;
mada2=1;
}
mada2=0;
q=0;
s(50);
}
void gonzuo(a)//工作,和刚才记得数进行比较,想等了停止工作
{
unsigned int r0,r1;
r0=0;
r0=a;
q=1;
TMOD=0X55;
TL1=0;
TH1=0;
mada1=0;
for(r1;r1<r0;)
{TR1=1;
mada1=1;
r1=TH1<<8;
r1=r1+TL1;
}
mada1=0;
q=0;
while(!gongzuo);
//s(50);这要不屏蔽他,第二遍就不干活
}
void main()
{ unsigned int a;
P0=255;
P3=255;
P1=0;
P2=0;
while(1)
{
if(jishu==0)
{
yanshims(100);
if(jishu==0)
{ q=1;
shezhi();
q=0;
a=0;
a=TH1<<8;
a=a+TL1;}
}
if(gongzuo==0)
{yanshims(100);
if(gongzuo==0)
{ q=1;
s(50);
gonzuo(a);
}}
}
}要是干活干一半,看门狗复位计的数不就白寄了呀 |