找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1009|回复: 12
收起左侧

关于单片机中断执行的细节问题

  [复制链接]
ID:1028115 发表于 2022-8-15 16:07 | 显示全部楼层 |阅读模式
比如我有一个中断,对应的中断函数比较复杂,执行的比较慢。
举个例子,可能执行中断函数要2ms,但是中断每过1ms就会触发(有数据发来),这样会漏掉一些中断的执行吗?还是说中断会很智能地存着,有序执行完?


回复

使用道具 举报

ID:624769 发表于 2022-8-15 19:55 来自手机 | 显示全部楼层
会漏,所以中断要精简,能不在中断执行的,就不在中断执行。
回复

使用道具 举报

ID:213173 发表于 2022-8-15 20:24 | 显示全部楼层
中断任务耗时必须小于中断周期,否则会出错。
回复

使用道具 举报

ID:161164 发表于 2022-8-15 22:05 | 显示全部楼层
这只会在中断内死循环
中断运行时间大于定时时间是大忌
回复

使用道具 举报

ID:883242 发表于 2022-8-16 01:31 | 显示全部楼层
一般只有挂起pend位表达有中断未被执行,至于某个中断有多少次未被执行,我见过的单片机没有一个有这个记录能力。
回复

使用道具 举报

ID:827243 发表于 2022-8-16 07:04 | 显示全部楼层
一般单片机,中断不会打断自身的中断函数,如果有新中断产生,会等待本次中断函数结束继续下一次中断。如你所描述,那么程序会一直不断执行中断。
建议中断函数中只设置标志位,在主循环中根据标志位执行动作,比如串口中断只接收数据,接收到指定长度数据后,设置接收标志位。主循环在接收标志位生效后,再进行数据处理,校验,分析,执行动作。
回复

使用道具 举报

ID:1028115 发表于 2022-8-16 09:05 | 显示全部楼层
感谢大家解答!我对单片机的理解更深一层了
回复

使用道具 举报

ID:57657 发表于 2022-8-16 09:27 | 显示全部楼层
定时器0中断运行时间超过定时器时间,TF0寄存器硬件置1。
  1. #include <STC12C5A60S2.h>
  2. #include "intrins.h"
  3. void InitTimer0(){
  4.     TMOD = 0x01;
  5.     TH0 = 0xFC;
  6.     TL0 = 0x18;
  7.     EA = 1;
  8.     ET0 = 1;
  9.     TR0 = 1;
  10. }
  11. void Delay900us()                //@12MHz
  12. {
  13.     unsigned char i, j;

  14.     i = 2;
  15.     j = 189;
  16.     do
  17.     {
  18.         while (--j);
  19.     } while (--i);
  20. }

  21. void main(){
  22.     InitTimer0();
  23.     while (1);
  24. }

  25. void Timer0Interrupt() interrupt 1{         //12Mhz 1mS定时器中断
  26.     TH0 = 0xFC;
  27.     TL0 = 0x18;
  28.     Delay900us();
  29.     //Delay900us();
  30.     P1++;
  31.     if (_testbit_(TF0)) {
  32.         P1 = 0xAA;
  33.         PCON |= 0x02;
  34.         _nop_(); _nop_();
  35.         _nop_(); _nop_();
  36.     }
  37. }
复制代码
回复

使用道具 举报

ID:401564 发表于 2022-8-16 09:53 | 显示全部楼层
中断对应的操作执行的时间一定要小于中断被触发的时间
如果你设计出一个中断操作时间要双中断被触发时间还要长的程序,那就是一个不合理的程序
如果你把一个执行时间比中断被触发时间还长的函数,放在中断中去执行,你的程序很有可能被卡死
回复

使用道具 举报

ID:1034262 发表于 2022-8-16 11:57 | 显示全部楼层
任何中断的间隔时间,都要大于所有中断处理时间的总和,是最好的。
回复

使用道具 举报

ID:195496 发表于 2022-8-16 12:26 | 显示全部楼层
中断中执行最小程序,保存一下数据,置位标志,然后在主程序中进行处理,尽可能少占用中断时间。
回复

使用道具 举报

ID:123289 发表于 2022-8-17 09:48 | 显示全部楼层
楼主能想到这个问题,说明很有潜力!
高手会很好地处理这个问题!!
方法:合理的规划时序!
要点:略。各人看法不同。
回复

使用道具 举报

ID:1028115 发表于 2022-10-20 15:49 | 显示全部楼层
谢谢大家们的回复!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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