如果是用外部信号去触发中断,那就属于外部中断的问题.
中断程序要考虑中断的负载率,就是中断运行时间与中断运行周期的比率.
如果一个中断的周期是100us,而中断运行时间超过100us那中断的负载率就超过100%,主程序根本没办法跑了.
一般要求中断的CPU负载<30%,如果中断的周期是100us,则中断运行时间要小于30us,中断程序尽量简短.
外部中断的中断周期是不可控的,尽量少用不可控的外部中断,如果要用一定要加硬件的低通滤波.
比如行程开关的信号周期为1ms,可以定义信号的上升时间和下降时间,如果周期的20%时间的上升和下降时间是可以接受的,可以将外部的硬件低通滤波做到让100us的信号无法产生中断
那么中断程序时间要控制在30us以内,差不多也就50条指令.
因此外部中断千万慎用,如果要用,一定要加硬件滤波,而且要考量MCU的中断负载率是否能满足要求.
如果信号的周期比较长的话,可以用定时器中断去检测.一般8MHz的晶振,可以开100us左右的定时中断,当然这还取决于中断程序的大小,因此中断程序一定要讲究算法,编译以后对着汇编进行优化.
但是这样精度比较差,要衡量一下是否满求要求. |