智能车制作

标题: 场中断中的程序运行时间大于场中断的时间会发生什么事? [打印本页]

作者: ZYR    时间: 2012-6-14 19:19
标题: 场中断中的程序运行时间大于场中断的时间会发生什么事?
我写了一段寻多行线的程序放场中断里,但是运行程序时一到场中断里就不出来了。
#pragma CODE_SEG NON_BANKED   
interrupt 8 void  timer0 (void)
{  TFLG1_C0F=1;
   sampleflag++;
   
  
    if(sampleflag==1)
     {
      TIE_C1I=1;
       i=0;
       line=0;
       b++;
     }
   else
     {
      TIE_C1I=0;  c++;
      sampleflag=0;
     xunxian();
      
     }   
}
#pragma CODE_SEG DEFAULT   
                  
#pragma CODE_SEG NON_BANKED
interrupt 9  void   timer1  (void)

{TFLG1_C1F=1;
。。。。。采集数据
}
#pragma CODE_SEG DEFAULT   

程序大致是这样的,一场采集数据一场处理数据。
寻线的程序就是那个 xunxian(),我放在了处理数据的那一场里
如果去掉场中断里 xunxian()程序的话 c 和 b会一直变大,图像灰度值的采集也正常。也就是说行场中断都正常。
如果加上xunxian()的话,b=1,c=1,图像灰度值只采集一次就不变了,也就是说第一次场中断采集完数据后,在下一个场中断里运行xunxian()这个程序就一直不出来了。
我想问的是:在运行xunxian()这个程序的那个场里我是不是已经把行中断关了(我感觉我写的TIE_C1I=0;已经把行中断关了)
            如果已经关了的话是不是因为我写的xunxian()这段程序运行时间太长了导致的??为什么会一直不进入下一场啊??
求大神指点啊 !!
作者: ZYR    时间: 2012-6-14 19:21
对了 c 和 b 的初始值是0
作者: liuqifw2010    时间: 2012-6-14 20:05
可能一段程序不会执行。。或出错吧。。。大家的建议呢
作者: 999    时间: 2012-6-14 20:18
本帖最后由 999 于 2012-6-14 20:29 编辑




else
{
      TIE_C1I=0;
      TFLG1_C1F=1;          //这里加一句
      c++;
      sampleflag=0;
      xunxian();                 //再检查下这个函数是不是每次都把 b、c重新赋值成0了
      
}   






作者: ZYR    时间: 2012-6-14 20:39
试了一下 ,还是不行。
TFLG1_C1F=1; 这是对1通道清零吧
前面我已经用 TIE_C1I=0; 把一通道关闭了呀。
作者: renqinglei    时间: 2012-6-14 20:45
可以先把执行时间测好,
作者: ZYR    时间: 2012-6-14 21:15
b 和 c 是我发现程序不对时加进去的,是为了看程序怎么运行时用的,其他地方不用。
从刷完程序运行时b 和c的值不变我才发现程序运行到xunxian()之后就不再进入下一个中断了
作者: ZYR    时间: 2012-6-14 21:22
renqinglei 发表于 2012-6-14 20:45
可以先把执行时间测好,

好办法。怎么测时间啊???


作者: renqinglei    时间: 2012-6-14 21:38
ZYR 发表于 2012-6-14 21:22
好办法。怎么测时间啊???

for(;;),执行,检测IO跳变,数字示波器





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2