打印

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

[复制链接]
2198|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wcsvery|  楼主 | 2010-9-23 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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引脚电平一直为高电平的。请赐教。谢谢~!

相关帖子

沙发
corset| | 2010-9-23 22:47 | 只看该作者
是不是开了看门狗啊

使用特权

评论回复
板凳
wcsvery|  楼主 | 2010-9-24 08:49 | 只看该作者
程序里都没定义看门狗怎么可能开了看门狗。。。。不知道是什么问题

使用特权

评论回复
地板
rcwust2009| | 2010-9-24 22:11 | 只看该作者
程序在逻辑上来说是没有错的。那就可能是你外部电路的问题,你在用万用表进行测试的时候,最好是进行单步调试,在那里设置一个断点,运行到那里之后,再看时候是真的认为高电平。

使用特权

评论回复
5
DINGXIAOYU777| | 2010-9-25 21:06 | 只看该作者
P23=0?
P20=1?
你定义这两个io了没有,这样都能够通过编译?

使用特权

评论回复
6
DINGXIAOYU777| | 2010-9-25 21:08 | 只看该作者
sbit relay1=P2^0;//控制电机抽气
sbit relay2=P2^3;//控制气压电磁阀放气
是relay1、 relay2,而没有定P23、P20

使用特权

评论回复
7
wcsvery|  楼主 | 2010-9-26 09:03 | 只看该作者
大意了~~~LS所说其实是发帖了不小心改的~~~正版的通过编译没问题的~~~那个问题已经解决了~~不过现在又出现了自动复位的新问题~~~还是多谢各位热心的解答!

使用特权

评论回复
8
免证入网| | 2010-9-27 15:31 | 只看该作者
可能低电平时间很短,导致逻辑判断为假跳出循环,而你用万用表测即使出现很短暂的低电平万用表也反应不过来,给你一种误判断以为一直为高电平。判断之前最好有个读引脚的语句。呵呵

使用特权

评论回复
9
奇兵| | 2010-9-27 19:28 | 只看该作者
楼主说一说你用这程序要干嘛!让我们了解一下你的意图!
你的主函数
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);
  }
执行完for(i=0;i<10;i++)delay(65500);当然从新执行while(1)的语句了!

使用特权

评论回复
10
免证入网| | 2010-9-28 13:45 | 只看该作者
我知道了,你在主函数前面加以下:
char code addr[3]  _at_  0x003b;
意思是跳过中断地址

使用特权

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

本版积分规则

0

主题

37

帖子

1

粉丝