分享 收藏 返回

单片机/MCU论坛

[资料] 为什么加了延时要运行完才能跳过来。

2012-8-12 23:08

本帖最后由 eehome 于 2013-1-5 09:48 编辑

key()
{if(B0==1&&B1==1)
              {
           loop:    if(S0==1||S1==1||S2==1||S3==1||S4==1||S5==1||S6==1||S7==1||S8==1||S9==1||S10==1||S11==1)
                    {
                                         delay(10);
                    if(S0==1||S1==1||S2==1||S3==1||S4==1||S5==1||S6==1||S7==1||S8==1||S9==1||S10==1||S11==1)
                       {
                                                       Q=~Q;
                                                          }
                                                  if(Q==1){OUT=1;delay(30000);OUT=0;}//30S
                                             if(Q==0){OUT=0; goto loop;}   
                                                  }
                          }             
}






回帖(7)

美好☆时光

2012-8-12 23:10:57
  if(Q==1){OUT=1;delay(30000);OUT=0;}//30S
                                           加了delay(30000);为什么必须要运行完if(Q==1){OUT=1;delay(30000);OUT=0;}//30S
这一条才能跳到下面去  if(Q==0){OUT=0; goto loop;}   

美好☆时光

2012-8-12 23:12:08
求解决方法,谢谢

张三

2012-8-13 09:05:33
代码里面没有这个说法,你的Q的取值可能不对,改为bit Q试一下,同时,看一下,是不是因为进入的时间太快导致与你没来得及看到Q=0后再进入Q=1

彭春

2012-8-13 12:25:49
Q的值,在哪些地方改变,单单独调试一下这段程序呢,拿出来测试

美好☆时光

2012-8-13 19:51:14
本帖最后由 美好☆时光 于 2012-8-13 19:53 编辑

#include<reg52.h>
#define uint unsigned int
sbit S0=P0^0;
sbit S1=P0^1;
sbit S2=P0^2;
sbit S3=P0^3;
sbit S4=P2^0;
sbit S5=P2^1;
sbit S6=P2^2;
sbit S7=P2^3;
sbit S8=P2^4;
sbit S9=P2^5;
sbit S10=P2^6;
sbit S11=P2^7;

sbit B0=P1^0;
sbit B1=P1^1;


sbit OUT=P3^5;

bit Q=0;
uint i,NO,n;

//***************通用延时1ms***************//
void delay(uint z)   
{
   uint x,y;
   for(x=z;x>0;x--)
     {
       for(y=105;y>0;y--)
         ;
          }
}


key()
{if(B0==1&&B1==1)
              {
           loop:    if(S0==1||S1==1||S2==1||S3==1||S4==1||S5==1||S6==1||S7==1||S8==1||S9==1||S10==1||S11==1)
                    {
                                         delay(10);
                    if(S0==1||S1==1||S2==1||S3==1||S4==1||S5==1||S6==1||S7==1||S8==1||S9==1||S10==1||S11==1)
                       {
                                                       Q=~Q;
                                                          }
                                                  if(Q==1){OUT=1;delay(30000);OUT=0;}//30S
                                             if(Q==0){OUT=0; goto loop;}   
                                                  }
                          }             
}

/***********************主函数***********************/
main()
{
P3=0X00;
P1=0XFF;
P0=0X00;
P2=0x00;
OUT=0;

  while(1)
{  
    key();
}
}

美好☆时光

2012-8-13 19:56:35
不加延时,可以马上从Q=1变换到Q=0,但是加了延时就不能马上变换过来,必须要执行完Q=1,才能执行Q=0.求解。

美好☆时光

2012-8-16 18:25:53
你好,能够解决这个问题吗。

更多回帖