通常在中断子程序中是不调用延时子程序的,这样会增加中断处理时间,如果有其它低级中断了,就会延误响应中断了。 所以,中断子程序中不要写调用延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回,如果中断一次有很多任务需要执行完全,可以在中断子程序中设置一个标志位,在主程序中查这个标志位,当标志为1时,就在主程序中完成这些任务,这样就不会影响其它中断源的中断,也不会使中断产生混乱。 如果延时函数时间过长,则下次中断有可能不会被触发,类似按键不灵敏,还有可能因为中断和主程序都在使用延时函数,而和此相关的寄存器的值没有保存,导致延时时间出错。 |
参与人数 1 | 黑币 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 赞一个! |
shuaishuaida 发表于 2019-4-22 14:01 可不可,详细说一下呢 |
中断需要的时间 程序不对 |
你对中断理解得不太正确 |
HC6800-ES-V2.0 发表于 2019-4-22 08:18 谢谢啦,我理解的按键消抖是做出实物的的时候才需要的,仿真的时候是不需要的。 |
初学者易犯的错: 中断处理程序执行时间过长! 在此期间其它比此更低级是中断都将无法响应,被执行! |
对是硬件中断响应自动判断置位 |
其实不是你说的那样。 IEx是外部中断的触发位,即当有外部中断时,这个位就由单片机置1,不是由程序置1。 在外部中断的服务函数中,只需要将其置0即可,不需要再置1,置1就相当于又产生了新的外部中断。 所以,你原来的程序,只需要IEx置0,不需要最后的置1操作就好了。 我已经试过的,没问题,可以返回。 另外:由于外部中断是用按键完成的,是按键,都是需要消抖的,你没有消抖的程序,所以可能中断会发生几次才能返回主函数,我试验时,按下外部中断1的按键最多产生过三次中断。 |
参与人数 1 | 黑币 +10 | 收起 理由 |
---|---|---|
![]() | + 10 | 很给力! |
压缩包里面的是仿真原理图 |