首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

请问怎么控制不去调用这意料之外的函数?

2012-03-26 
请教如何控制不去调用这意料之外的函数???程序片段如下定时器中:timerCount++if(timerCount 50){/*dip1

请教如何控制不去调用这意料之外的函数???
程序片段如下
定时器中:
  timerCount++;
  if   (timerCount   > =   50)
  {                                               /*dip1只有   0、1两种情况*/
      if   (dip1   ==   0)               {           value[0]   =   2;       }
      else     if   (dip1   ==   1)   {           value[0]   =   0;       }
      timerCount   =   0;
  }

main函数中:
    switch(value[0])          
        {
          case   0:   {   voicectrl();   break;   }   //声控模式
          case   1:   {   sort();break;   }
          case   2:   {   autopro();break;   }         //自动模式        
          default:;
        }    

现在程序正在读取某个数组array,

得知dip1=0,运行过程中,会定时执行value[0]   =   2;,这时就会出现一次意外的调用autopro();函数中第一个函数,接着读数组array

这时如果去改变dip1=1,运行中会执行value[0]   =   0;,这时就出现一次意外的调用voicectrl();函数中第一个函数,接着读数组array

我想保留定时检测dip1的值来改变value[0]值的功能,但不要在这过程中调用意料之外的函数,请教问题出在什么地方?


[解决办法]
感觉还是楼主的思路有问题。

按照楼主的思路,所说的意外调用是应该出现的正常反应阿。
[解决办法]
你就在SWITCH前把数据读完就是了...
[解决办法]
思路有问题
逻辑不严谨
[解决办法]
单片机是单线程的啊,你的操作函数不要在中断函数中调用就行了,如你所说的,在case 0: 到break 之间的代码内中断,就算该动了value[0]的值,也是要等case 0:后的语句执行到break后的下一个循环执行switch 才能进入case 2去操作数组。

总的来说,还是你的程序思路不清除

热点排行