关于定时器、SCI中断的程序结构的问题

2019-07-15 16:19发布

我做的项目是用在生产线上的检测设备的,简单地说就是当发现一个产品不合格后发出信号控制继电器操作排除机构将不合格产品剔除掉。有些生产线的速度会很高,这就要求我的控制信号要精确,否则排除机构就没办法可靠地将产品剔除,因为如果控制信号延迟或超前10ms发出,反映到产线上就可能会有几公分的距离差异。按照以前的经验,我用一个定时器做定时中断,中断周期100us,然后用这个100us在main中做一个2ms的计时器,我将排除机构的控制信号输出操作放在main中的这个2ms周期里执行。但实际上,我的MCU还会和两个外设做通信,就是说MCU既做上位机又做下位机,通信耗时约8ms,也是在main中执行,这就让我的2ms周期没有意义了。因此,我的做法是另外再用一个定时器直接做2ms中断(优先级低于100us定时器),在定时器中执行排除机构的控制代码。
这个做法之前没有出什么问题。后来由于项目需要另外画了一块板子,通信方式有一些变化,原来是RS485的四线制通信,现在改成RS485的两线制通信,这样在SCI中断中增加了方向控制的代码。结果这一版电路出来后,原来的代码放上去跑一段时间就可能会发生MCU复位。我将2ms定时器中的一些代码放到了main中,结果复位现象就不会发生了。因此,我怀疑是否是我的这种程序结构有一些问题。
请各位有类似经验的朋友不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
mouxiang
2019-07-16 04:32
感谢LS两位朋友的回答。我忘了说一点,之前为了避免出现2ms定时器打断100us定时器的问题,我已经在2ms定时器中开总中断了,也就是说我即使进入了2ms定时器中断,也能响应100us定时器的中断。为了验证这一点,我分别在100us定时器和2ms定时器中操作MCU的2个输出口进行翻转,用示波器观察其波形,如果我在进入2ms定时器时不打开总中断,则100us定时器中操作的那个输出口在示波器上能看到偶尔不翻转的现象;如果打开了总中断,那么100us定时器中操作的输出口波形就是一个十分标准的方波。而我在进入100us定时器时是不会打开总中断的。也就是说,对于100us定时器来说,没有其他中断能够阻止MCU对其响应,它就是最高优先的。对于2ms定时来说,它可能会被100us定时器打断,但这个过程很短,代码也能够在2ms内执行完。

一周热门 更多>