打印
[51单片机]

新手求救:51单片机怎让程序跑飞后进行现场回复啊

[复制链接]
楼主: 2657145539
手机看帖
扫描二维码
随时随地手机跟帖
21
huayuliang| | 2015-1-26 20:03 | 只看该作者 回帖奖励 |倒序浏览
贴出你的电路图吧···硬件问题不解决,软件上再怎么处理也弥补不了硬伤。

使用特权

评论回复
22
曾经in| | 2015-1-26 20:07 | 只看该作者
本帖最后由 曾经in 于 2015-1-26 20:17 编辑

动力电源和控制电源相对独立,信号线别和大电流电源线搞在一起
是用电池的话改单片机一组电池电机一组电池两块共地就好

使用特权

评论回复
23
2657145539|  楼主 | 2015-1-26 20:19 | 只看该作者
高手帮忙看看怎么改

使用特权

评论回复
24
2657145539|  楼主 | 2015-1-26 20:29 | 只看该作者

使用特权

评论回复
25
2657145539|  楼主 | 2015-1-26 20:31 | 只看该作者

使用特权

评论回复
26
2657145539|  楼主 | 2015-1-26 20:38 | 只看该作者
这个论坛的朋友们很热心,真诚的感谢大家,让我知道大概在哪方面改进;我不知道该怎么传图片,我先研究研究再传

使用特权

评论回复
27
ddllxxrr| | 2015-1-26 21:33 | 只看该作者
楼主先搞好硬件吧,软件只是个幅助作用,解决不了根本问题。你的定时器再飞怎么办呢?????

使用特权

评论回复
28
通宵敲代码| | 2015-1-26 22:25 | 只看该作者
排除干扰问题,很可能是你的供电电流不够!

自动复位可以用“看门狗”

使用特权

评论回复
29
通宵敲代码| | 2015-1-26 22:25 | 只看该作者
排除干扰问题,很可能是你的供电电流不够!

自动复位可以用“看门狗”

使用特权

评论回复
30
2657145539|  楼主 | 2015-1-27 08:19 | 只看该作者
23楼的图片打开方法:右击“新标签页打开图片”高手们帮忙看看问题在哪

使用特权

评论回复
31
slm342107| | 2015-1-27 09:59 | 只看该作者
一、楼主的硬件设计有问题,应该是电磁干扰没有处理好   二、程序加看门狗复位,跑飞不喂狗后复位。  三、这种小程序还会跑飞一定是程序内部逻辑问题,查一下有没有野指针/堆栈溢出等问题,

使用特权

评论回复
32
2657145539|  楼主 | 2015-1-27 11:17 | 只看该作者
本帖最后由 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);

}}


}
}要是干活干一半,看门狗复位计的数不就白寄了呀

使用特权

评论回复
33
2657145539|  楼主 | 2015-1-27 11:25 | 只看该作者
还有个问题就是gonzuo函数里屏蔽的S(50),如果加上了第一遍工作没问题,第二遍就不干活了

使用特权

评论回复
34
lemenade| | 2015-1-27 11:27 | 只看该作者
我以前也做过电表的,交流电做整流的话,继电器和MCU的电路是地线隔离的,不然抗干扰一定会有问题的。没看到图片所以不好说什么。

使用特权

评论回复
35
2657145539|  楼主 | 2015-1-27 11:35 | 只看该作者
lemenade 发表于 2015-1-27 11:27
我以前也做过电表的,交流电做整流的话,继电器和MCU的电路是地线隔离的,不然抗干扰一定会有问题的。没看 ...

谢谢,23楼右击“新标签页打开图片”您帮忙看看问题在哪

使用特权

评论回复
36
slm342107| | 2015-1-27 11:51 | 只看该作者
2657145539 发表于 2015-1-27 11:17
//#include
   #include
//#define uint unsigned int;

@楼主,不明白的是,你这个s(50)只是延迟啊,又不是喂狗.感觉你第二遍不干活是加延迟以后端口的值发生了变化导致的。
看门狗复位有开么?开了的话只要喂狗及时不会复位,就是要让它的计数白计。只有程序挂掉才因没人喂狗而复位

使用特权

评论回复
37
2657145539|  楼主 | 2015-1-27 12:27 | 只看该作者
本帖最后由 2657145539 于 2015-1-27 12:28 编辑
slm342107 发表于 2015-1-27 11:51
@楼主,不明白的是,你这个s(50)只是延迟啊,又不是喂狗.感觉你第二遍不干活是加延迟以后端口的值发生了 ...

没开看门狗,只是延时,T1记得数有用,是测量长度的

使用特权

评论回复
38
lemenade| | 2015-1-27 15:18 | 只看该作者
2657145539 发表于 2015-1-27 11:35
谢谢,23楼右击“新标签页打开图片”您帮忙看看问题在哪

试过了好像不行

使用特权

评论回复
39
2657145539|  楼主 | 2015-1-27 16:44 | 只看该作者
//photo.163.com/qzq51/#m=2&aid=276875032&pid=9166733578

使用特权

评论回复
40
2657145539|  楼主 | 2015-1-27 16:47 | 只看该作者
lemenade 发表于 2015-1-27 15:18
试过了好像不行
谢谢:
//photo.163.com/qzq51/#m=2&aid=276875032&pid=9166733578,这个链接应该可以,前面省略了HTTP:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则