单片机/MCU论坛
直播中

尹彬

12年用户 33经验值
擅长:操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 嵌入式技术 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 RF/无线 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 操作系统/软件 微处理器/微控制 模拟与电源 基础元器件 基础元器件 模拟与电源 微处理器/微控制 操作系
私信 关注
[资料]

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

本帖最后由 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
举报

lstcspring

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

尹彬

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

#include
#define uint unsigned int
***it S0=P0^0;
***it S1=P0^1;
***it S2=P0^2;
***it S3=P0^3;
***it S4=P2^0;
***it S5=P2^1;
***it S6=P2^2;
***it S7=P2^3;
***it S8=P2^4;
***it S9=P2^5;
***it S10=P2^6;
***it S11=P2^7;

***it B0=P1^0;
***it B1=P1^1;


***it 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
你好,能够解决这个问题吗。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分