智能车制作
标题:
场中断中的程序运行时间大于场中断的时间会发生什么事?
[打印本页]
作者:
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