发 帖  
原厂入驻New
[问答] 如何在没有ISR的情况下准确地服务长时间的例程?
234 ISR 编码器 应用程序
分享
你好,我用的是PIC16F1887。我有一个旋转编码器服务的积极和消极的边缘两个“改变中断”引脚。它运行良好,不会错过任何过渡。编码器是手动控制,因此每秒旋转2-3次。我有一个陀螺仪/加速度计例程,需要10mS才能执行,而且每20mS就有一个TMR中断来维修它。它也工作得很好,并且能够快速地跟踪应用程序。然而,当我使用这两个例程时一起编码器中断错过一些边缘过渡,我想这是因为一些边缘过渡发生在10mS执行时间的陀螺例程。我如何能绕过这个问题?将陀螺仪中断改为50ms对编码器有好处,但陀螺仪响应太慢。16F不具有优先中断。
0
2019-11-7 14:00:13   评论 分享淘帖 邀请回答
5个回答
陀螺仪/加速度计例程是可中断的。我的意思是,如果在中间发生中断,它会受到伤害吗?如果是,那么可以将它从中断例程移到主循环。然后,您可以运行它回或当计时器翻滚(您可以检测到它的IF标志)。它可以双向工作,如果不是,就把它变成可中断的。否则,唯一的办法是将陀螺仪/加速度计程序分成较小的程序,并在它们之间处理编码器。
2019-11-7 14:09:13 评论

举报

没关系。这样一来,每个陀螺仪都会有10毫秒。如果其他的例行程序花费的时间太长,就把它们分开:假设有足够的时间来运行所有程序,这应该可以工作。另外,你可以试着在陀螺仪例行程序上工作,试图使它更快。
2019-11-7 14:34:31 评论

举报

嗯,我明白了。我想我明白了。不幸的是,主回路中另一个程序的执行时间根据因素而变化,因此使得陀螺程序在可变时间发生。我想我可以设置一个中断计时器,这样我就可以用一个延迟来填充另一个例程,这样它总是同时完成的。考虑到
2019-11-7 14:49:53 评论

举报

嗨,您可能需要将陀螺仪程序和/或主程序的其他部分划分成较小的部分,这些部分可以在彼此之间调用。考虑在什么时间需要完成哪些任务,以及需要完成多少时间。如果总和比所有时间都多,那么您可能必须用不同的方式做某事。
2019-11-7 15:04:34 评论

举报

我懂了。好的,谢谢。我要试一试,让陀螺更快一些。我升级到XC8PRO模式,将执行时间从20ms减半到10ms,这都是C代码。汇编代码会产生多大的差异?考虑到
2019-11-7 15:18:19 评论

举报

只有小组成员才能发言,加入小组>>

109个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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