微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片程序一个死循环的问题。求大神,

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

时间:10-02 整理:3721RD 点击:
一个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
                  
           }
}

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

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

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

你少了一个}符号呀              

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

试试                        TX_Send=1;
                        while(!KeyValue)                       
                        VLCWrite("1",5,1);//发送字符1,发送5个字符,采用信道1

还是不行~~~

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

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

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

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

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

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
                  
           }
}

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top