单片机/MCU论坛
400万+工程师在用
华为|鸿蒙开发者日
直播报名
400万+工程师在用
华为|鸿蒙开发者日
直播报名

woai135923

5年用户 32经验值
擅长:可编程逻辑 MEMS/传感技术 嵌入式技术
私信 关注
[问答]

单片程序一个死循环的问题。求大神,

2016-12-22 18:36

一个while死循环,程序如下,为什么P0^0,从0变到1,回不到0了,求各位大神帮忙一下

void main (void)
{
          VLCInit(COM1);
        while( 1)
       {
           TX_Send=0;      //TX_Send=P0^0
           KeyDown();       //,按键扫描,读取键值赋值给KeyValue
           if(KeyValue==0)
           {       
          TX_Send=1;
                  while(KeyValue==0)
                  
                   VLCWrite("1",5,1);//发送字符1,发送5个字符,采用信道1
                  
           }
}

回帖(14)

王栋春

2016-12-22 18:36:23

最佳答案

while(KeyValue==0),你在这句下面点个灯,然后在编译烧录运行一下看看灯亮不亮在分析,不亮就好说了,亮那就奇了怪了
这个是坛友解释的 非常在理

周大侠

2016-12-22 18:52:21
while(KeyValue==0)里的KeyValue已经等于0了,所以就是0了啊……因为是while卡死在这句所以你的
KeyDown();       //,按键扫描,读取键值赋值给KeyValue就执行不到了。KeyValue就刷新不了……

woai135923

2016-12-22 19:48:44
引用: HARRY007 发表于 2016-12-22 18:52
while(KeyValue==0)里的KeyValue已经等于0了,所以就是0了啊……因为是while卡死在这句所以你的
KeyDown();       //,按键扫描,读取键值赋值给KeyValue就执行不到了。KeyValue就刷新不了……

我也试过吧while去掉  还是一样~~~~

王栋春

2016-12-22 20:49:29
你少了一个}符号呀              

woai135923

2016-12-22 20:51:44
引用: 王栋春 发表于 2016-12-22 20:49
你少了一个}符号呀

  这个我只是发帖子的时候忘记写进去了  程序是有的 不然连编译都不行了  更不用说测试了

武林

2016-12-22 21:18:32
试试                        TX_Send=1;
                        while(!KeyValue)                       
                        VLCWrite("1",5,1);//发送字符1,发送5个字符,采用信道1

woai135923

2016-12-22 21:27:30
引用: wulinwl 发表于 2016-12-22 21:18
试试                        TX_Send=1;
                        while(!KeyValue)                       
                        VLCWrite("1",5,1);//发送字符1,发送5个字符,采用信道1

还是不行~~~{:4:}

武林

2016-12-22 21:38:05
本帖最后由 wulinwl 于 2016-12-22 21:46 编辑

看来你要在按键扫描程序里找问题。因为while(KeyValue==0)括号里一直为真就不能跳出,下面的语句也改变不了其值,就死在这里。不太明白你这样编程的用意。

woai135923

2016-12-22 21:41:57
引用: wulinwl 发表于 2016-12-22 21:38
看来你要在按键扫描程序里找问题。

我试过用一个扫描按键的来重新写一个主函数。。。    就是按下    P0^0  从0变到1  两秒后变成0      是可以的      而且试过了  每个按键都是可以的

周大侠

2016-12-22 21:53:32
引用: woai135923 发表于 2016-12-22 19:48
我也试过吧while去掉  还是一样~~~~

你没听明白我的意思啊……死在while(KeyValue==0)这句话,你的KeyValue如何变成真????,while(KeyValue==0)之前调用了一次KeyDown(); 刷新了一次KeyValue的值,之后就再也没有刷新了

woai135923

2016-12-23 12:58:26
引用: 王栋春 发表于 2016-12-22 22:15
while(KeyValue==0),你在这句下面点个灯,然后在编译烧录运行一下看看灯亮不亮在分析,不亮就好说了,亮那就奇了怪了
这个是坛友解释的 非常在理

灯亮了   可能是卡在那个VLCWrite  那个子函数里面 ~~~~  忧伤

王栋春

2016-12-23 12:59:34
引用: woai135923 发表于 2016-12-23 12:58
灯亮了   可能是卡在那个VLCWrite  那个子函数里面 ~~~~  忧伤

搞软件一定细心再细心    同样跟着楼主学习一下相关经验

吴学宇

2016-12-23 15:52:41
void main (void)
{
          VLCInit(COM1);
        while( 1)
       {
           TX_Send=0;      //TX_Send=P0^0
           KeyDown();       //,按键扫描,读取键值赋值给KeyValue
           if(KeyValue==0)
           {        
          TX_Send=1;
                  while(KeyValue==0)
                  {
                    KeyDown();
                  }
                  
                   VLCWrite("1",5,1);//发送字符1,发送5个字符,采用信道1
                  
           }
}

张工

2016-12-25 09:05:05
   if(KeyValue==0)
           {        
          TX_Send=1;
一直在判断   if(KeyValue==0)这个条件成立,只是回到1的时间非常短几个机器周期而已。

更多回帖

打开APP