打印

一个程序跑飞的问题,请赐教!

[复制链接]
5711|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wcsvery|  楼主 | 2010-9-23 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
sbit relay1=P2^0;//控制电机抽气
sbit relay2=P2^3;//控制气压电磁阀放气
sbit P11=P1^1;//气压值电平输出
void delay(unsigned int cnt){while(--cnt);}
void main()
{
  unsigned char i;
  while(1)
  {
  P11=1;
  P23=0;
  P20=1;
  while(P11==1);
  P23=1;
  delay(200);
  P20=0;
  for(i=0;i<10;i++)delay(65500);
  }
}


这样一个程序在WHILE(P11==1);这里没有进入死循环而直接进入下面的程序,用万用表测得的P11引脚电平一直为高电平的。请赐教。谢谢~!用的STC90C52单片机。

相关帖子

沙发
wcsvery|  楼主 | 2010-9-23 22:05 | 只看该作者
自顶~~~高手速来~!

使用特权

评论回复
板凳
fchwr| | 2010-9-23 22:17 | 只看该作者
在最后加while(1)? maybe~~:(

使用特权

评论回复
地板
ayb_ice| | 2010-9-24 08:22 | 只看该作者
那要看P11是怎么定义的,有可能不是指的P1口的位1

使用特权

评论回复
5
匠人粉丝团| | 2010-9-24 08:39 | 只看该作者
用万用表测不一定是精确的,可以试试用示波器看看电平信号有没有非常短的低脉冲信号。

使用特权

评论回复
6
wcsvery|  楼主 | 2010-9-24 08:50 | 只看该作者
用很精准的电压表测出来的电压也是5V无明显大幅度抖动,估计不是这个问题

使用特权

评论回复
7
5880527| | 2010-9-24 09:08 | 只看该作者
哎,就这架势还是先点点灯啊之类的吧,先练练内功

使用特权

评论回复
8
wcsvery|  楼主 | 2010-9-24 09:14 | 只看该作者
现在做着项目没什么时间点灯,7楼内功好就拿出来分享下~!

使用特权

评论回复
9
5880527| | 2010-9-24 09:27 | 只看该作者
:)呵呵,我其实也没去点过什么灯,也是象你这样从一个个小的项目中做过来的,实际应用的东西最锻炼人了

使用特权

评论回复
10
wcsvery|  楼主 | 2010-9-24 09:36 | 只看该作者
9楼谦虚了啊~~既然是过来人那就分析下~~我用的是光耦接三极管驱动继电器,通过继电器来控制15V直流电机,工作电流在1.5A左右,有没有可能是电机转动的大电流影响到光耦前端,继而影响到单片机内部的电平判断?

使用特权

评论回复
11
5880527| | 2010-9-24 09:40 | 只看该作者
那你就先把电机脱开看是否会出问题呀

使用特权

评论回复
12
wcsvery|  楼主 | 2010-9-24 09:45 | 只看该作者
这个尝试过了~~脱开了没问题~~!现在的问题是怎么解决~~?

使用特权

评论回复
13
fzy_666| | 2010-9-24 10:13 | 只看该作者
哈哈,少了大括号

使用特权

评论回复
14
wcsvery|  楼主 | 2010-9-24 10:21 | 只看该作者

使用特权

评论回复
15
alamo2009| | 2010-9-24 10:52 | 只看该作者
哈哈,少了大括号
fzy_666 发表于 2010-9-24 10:13


跟大括号没一点关系!

使用特权

评论回复
16
tengzhihua163| | 2010-9-24 11:29 | 只看该作者
如果确定是电机干扰的问题,可以考虑二次检测P1.1或者延时后检测(延时时间需要测试后确定)

使用特权

评论回复
17
wcsvery|  楼主 | 2010-9-24 11:43 | 只看该作者
P1.1的电压一直是高电平的,通过检测P1.1高电平电压来通过写P2.0控制电机转动,P1.1用万用表测出来一直是高电平的,跳出while(P11==1);循环时万用表测出来的P11还是高电平的~~!

使用特权

评论回复
18
tanganrong| | 2010-9-24 12:01 | 只看该作者
应该P11脚有干扰脉冲,可以用示波器看看,建议加入数字滤波代码试试。

使用特权

评论回复
19
hxs2020| | 2010-9-24 12:52 | 只看该作者
while(P11==1); 与后面的语句是在一个循环内的吧!错了。。
while(P11==1)
  {P23=1;
  delay(200);
  P20=0;
  for(i=0;i<10;i++)delay(65500);
}

不知道对否?

使用特权

评论回复
20
nit3905| | 2010-9-24 12:55 | 只看该作者
P2^0、P2^3定义的是relay1、relay2,主函数里却用P20、P23,编译也能通过?

使用特权

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

本版积分规则

0

主题

37

帖子

1

粉丝