完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我做的项目是用在生产线上的检测设备的,简单地说就是当发现一个产品不合格后发出信号控制继电器操作排除机构将不合格产品剔除掉。有些生产线的速度会很高,这就要求我的控制信号要精确,否则排除机构就没办法可靠地将产品剔除,因为如果控制信号延迟或超前10ms发出,反映到产线上就可能会有几公分的距离差异。按照以前的经验,我用一个定时器做定时中断,中断周期100us,然后用这个100us在main中做一个2ms的计时器,我将排除机构的控制信号输出操作放在main中的这个2ms周期里执行。但实际上,我的MCU还会和两个外设做通信,就是说MCU既做上位机又做下位机,通信耗时约8ms,也是在main中执行,这就让我的2ms周期没有意义了。因此,我的做法是另外再用一个定时器直接做2ms中断(优先级低于100us定时器),在定时器中执行排除机构的控制代码。
这个做法之前没有出什么问题。后来由于项目需要另外画了一块板子,通信方式有一些变化,原来是RS485的四线制通信,现在改成RS485的两线制通信,这样在SCI中断中增加了方向控制的代码。结果这一版电路出来后,原来的代码放上去跑一段时间就可能会发生MCU复位。我将2ms定时器中的一些代码放到了main中,结果复位现象就不会发生了。因此,我怀疑是否是我的这种程序结构有一些问题。 请各位有类似经验的朋友不吝赐教! |
|
相关推荐
6个回答
|
|
估计还真是程序结构的问题。你可以尝试在定时器中断里完成2ms计时呀,主函数判断标志位,这样会不会好一点?
|
|
|
|
|
|
|
|
是这样的,100us定时器中我只有一句代码,用来累加系统时间。2ms定时器里面我放了控制信号的代码,而且我测量下来这段代码执行时间为500us以内。如果我在2ms定时器里只做标志然后在main中执行代码的话,会被通信代码拖延比较长的时间。因为我的通信代码耗时可能达到8ms。我的这个通信是这样的,对于MCU来说,其上位机发送指令,MCU接到指令后发下位机查询一些值,然后再将查询到的值返回给上位机,这个过程在main中是一个循环,只有完成这个循环才能去执行其他的main中的代码。通信中断UART0和UART1中也是只有少量代码,主要工作是放在main中的。
我用TIMERA1做100us定时器,这应该是优先级最高的。我用TIMERA0做2ms定时器,其优先级低于TIMERA0,但高于UART优先级。不存在其他中断了。 |
|
|
|
各个中断里执行时间应该小于各个中断里执行时间最短的那个,这里500us显然已经远远超过100us了。原因就在这里,不过这也要看单片机的嵌套深度,但是只要确保不论是哪个定时器里执行时间都小于100us,就没有嵌套深度这问题了
|
|
|
|
感谢LS两位朋友的回答。我忘了说一点,之前为了避免出现2ms定时器打断100us定时器的问题,我已经在2ms定时器中开总中断了,也就是说我即使进入了2ms定时器中断,也能响应100us定时器的中断。为了验证这一点,我分别在100us定时器和2ms定时器中操作MCU的2个输出口进行翻转,用示波器观察其波形,如果我在进入2ms定时器时不打开总中断,则100us定时器中操作的那个输出口在示波器上能看到偶尔不翻转的现象;如果打开了总中断,那么100us定时器中操作的输出口波形就是一个十分标准的方波。而我在进入100us定时器时是不会打开总中断的。也就是说,对于100us定时器来说,没有其他中断能够阻止MCU对其响应,它就是最高优先的。对于2ms定时来说,它可能会被100us定时器打断,但这个过程很短,代码也能够在2ms内执行完。
|
|
|
|
10 毫秒、8毫秒、2毫秒,这么漫长的时间还不够你用?
|
|
|
|
只有小组成员才能发言,加入小组>>
3056个成员聚集在这个小组
加入小组2982 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3710 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2367 浏览 1 评论
4834 浏览 1 评论
2595 浏览 1 评论
1599浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3710浏览 2评论
2983浏览 1评论
1794浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 00:52 , Processed in 1.498463 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号