智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2562|回复: 8
打印 上一主题 下一主题

场中断中的程序运行时间大于场中断的时间会发生什么事?

[复制链接]

2

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
QQ
威望
305
贡献
92
兑换币
0
注册时间
2011-12-31
在线时间
20 小时
跳转到指定楼层
1#
发表于 2012-6-14 19:19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一段寻多行线的程序放场中断里,但是运行程序时一到场中断里就不出来了。
#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()这段程序运行时间太长了导致的??为什么会一直不进入下一场啊??
求大神指点啊 !!

2

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
QQ
威望
305
贡献
92
兑换币
0
注册时间
2011-12-31
在线时间
20 小时
2#
 楼主| 发表于 2012-6-14 19:21:33 | 只看该作者
对了 c 和 b 的初始值是0
回复 支持 反对

使用道具 举报

5

主题

148

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1463

活跃会员奖章

威望
771
贡献
428
兑换币
295
注册时间
2012-2-27
在线时间
132 小时
毕业学校
咚巴拉
3#
发表于 2012-6-14 20:05:55 | 只看该作者
可能一段程序不会执行。。或出错吧。。。大家的建议呢
回复 支持 反对

使用道具 举报

14

主题

193

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1821
威望
1018
贡献
179
兑换币
60
注册时间
2011-11-11
在线时间
312 小时
4#
发表于 2012-6-14 20:18:11 | 只看该作者
本帖最后由 999 于 2012-6-14 20:29 编辑




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





回复 支持 反对

使用道具 举报

2

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
QQ
威望
305
贡献
92
兑换币
0
注册时间
2011-12-31
在线时间
20 小时
5#
 楼主| 发表于 2012-6-14 20:39:39 | 只看该作者
试了一下 ,还是不行。
TFLG1_C1F=1; 这是对1通道清零吧
前面我已经用 TIE_C1I=0; 把一通道关闭了呀。
回复 支持 反对

使用道具 举报

68

主题

807

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
12252

优秀会员奖章活跃会员奖章在线王奖章论坛骨干奖章论坛元老奖章

QQ
威望
8024
贡献
2448
兑换币
496
注册时间
2011-10-4
在线时间
890 小时
6#
发表于 2012-6-14 20:45:24 | 只看该作者
可以先把执行时间测好,
回复 支持 反对

使用道具 举报

2

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
QQ
威望
305
贡献
92
兑换币
0
注册时间
2011-12-31
在线时间
20 小时
7#
 楼主| 发表于 2012-6-14 21:15:18 | 只看该作者
b 和 c 是我发现程序不对时加进去的,是为了看程序怎么运行时用的,其他地方不用。
从刷完程序运行时b 和c的值不变我才发现程序运行到xunxian()之后就不再进入下一个中断了
回复 支持 反对

使用道具 举报

2

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
QQ
威望
305
贡献
92
兑换币
0
注册时间
2011-12-31
在线时间
20 小时
8#
 楼主| 发表于 2012-6-14 21:22:47 | 只看该作者
renqinglei 发表于 2012-6-14 20:45
可以先把执行时间测好,

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

回复 支持 反对

使用道具 举报

68

主题

807

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
12252

优秀会员奖章活跃会员奖章在线王奖章论坛骨干奖章论坛元老奖章

QQ
威望
8024
贡献
2448
兑换币
496
注册时间
2011-10-4
在线时间
890 小时
9#
发表于 2012-6-14 21:38:03 | 只看该作者
ZYR 发表于 2012-6-14 21:22
好办法。怎么测时间啊???

for(;;),执行,检测IO跳变,数字示波器
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-10-6 00:30 , Processed in 0.051619 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表