用定时器中断,单片机中断处理时间大于定时器定时时间会怎样?

如果是不同的中断类型是可以根据优先级嵌套,如果是同一中断类型(如题),

有三种结果:1、马上进入新的中断处理(中断嵌套) 2、等待中断处理完再进入新的中断处理 3、出错。

单片机中断处理时间大于定时器定时时间,在下次中断时间到时,因为中断是同一类型、同一优先级,所以不会马上进入新的中断处理。

而是在本次中断处理结束后,单片机又马上进入新的定时器中断函数,主函数中的语句可能会没有机会运行下去,会影响后面中断的实时性。所以答案为2。

如果为了避免中断嵌套(同一优先级不会发生),在中断处理中人为的在进入中断时关中断,处理完中断后开中断,会影响后面中断的实时性。

最安全的处理方式:中断处理时间越短越好,有什么事放外面处理。中断的初衷是为了提高系统实时性,中断处理太长,会影响同级的中断响应,其它中断谈何实时。

附:解决高速大量数据的中断处理难题

1.在中断中,只接收。或加上简单判断。 2、在主程序中处理。

时间: 2024-09-30 04:17:39

用定时器中断,单片机中断处理时间大于定时器定时时间会怎样?的相关文章

奶爸业余单片机学习之:定时器使用方法——非中断,TF值软件重置法

============定时器使用方法——非中断,TF值软件重置法======== 第一:设置特殊功能寄存器TMOD,配置好工作模式. 第二:设置计数寄存器TH0和TL0的初值. 第三:设置TCON,通过TR0置1来让定时器开始计数. 第四:判断TCON寄存器的TF0位,监测定时器溢出情况.  实例: //LED由三极管及73HC138控制//用定时器0实现亮与灭之间的1秒时 # include <reg52.h> sbit led2 = P0^0; sbit addr0 = P1^0;sbi

奶爸业余单片机学习之:定时器中断的使用方法——进入中断TF0(TF1)值硬件自动重置

/*============定时器中断的使用方法—---TF0(TF1)值硬件重置法======== 第一:打开总中断第二:打开定时器 中断第三:设置特殊功能寄存器TMOD,配置好工作模式. 第四:设置计数寄存器TH0和TL0的初值. 第五:设置TCON,通过TR0置1来让定时器开始计数.*/ //LED由三极管及73HC138控制//用定时器0实现亮与灭之间的1秒延时 # include <reg52.h> sbit led2 = P0^0; sbit addr0 = P1^0;sbit a

【转】 51单片机中断学习

一.中断的概念    CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生):    CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务):    待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二.中断源 在51单片机中有5个中断源 中断号          优先级                    中断源                    中断入口地址 0               1(最高)   

51单片机中断interrupt……using……

51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using 0 是第0组寄存器: using 1 是第1组寄存器: using 2 是第2组寄存器: using 3 是第3组寄存器:51单片机内的寄存器是R0--R7(不是R0-R3)R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1.RS0位决定的.using 0时设置 RS1=0,RS

【007】AVR单片机中断系统

AVR单片机的21个中断源 I/O端口的第二功能 AVR单片机共有单个定时器,定时/计数器1是16bit的,其余的定时/计数器0和定时/计数器2都是8bit的定时器. 定时器的工作模式 普通模式 CTC模式 快速PWM模式 相位修正PWM模式 相位频率修正PWM模式 输入捕获模式 和51单片机的定时计数器类似,根据设定的时钟频率,每过一个时钟,计数寄存器数值加1. 用到的寄存器 T/C1控制寄存器B:(控制时钟的来源和频率) 后三位的设置,1表示定时器停止,2~6表示不同频率的内部时钟,7~8表

单片机中断全局变量保护方法

首先要明白这几个知识点:关键字volatile的使用,原子操作,临界区的使用.明白的直接跳到文中的4.全局变量的使用及保护处查看. 1.关键字volatile 关键字volatile用于告诉编译器,说明被修身的变量可能会被意想不到地改变,防止编译器对代码进行优化. 比如如下程序: 1 ucNms=0x65;2 ucNms=0x66;3 ucNms=0x67;4 ucNms=0x68; 上述4条语句,如果变量在声明的时候(unsigned char ucNms;)没有使用volatile,那么编译

8051单片机串口波特率和定时器1的初值计算

在模式0和模式2下,串口波特率固定,模式0为Fosc/12.模式2为Fosc/32或Fosc/64,具体由PCON寄存器的SMOD位决定. 在模式1和模式3下,波特率是一个可变值,波特率可以由定时器1产生(8052可以由定时2产生),那么波特率到底为多少呢?波特率由定时器1的溢出率来决定:Baud Rate = (2SMOD/32)*(Timer 1 Overflow Rate)注意:2SMOD这里的SMOD是指数,SMOD为波特率双倍波特率位,该位在PCON寄存器中.当使用timer 1作为波

单片机中的软定时器

因单片机中常有一些控制与延时关联,这些操作并不需要特别高的精度,为了少敲点字,故做了这个单片机软定时器,不足之处,欢迎指正. timer.h 1 #ifndef __SOFT_TIMER_H__ 2 #define __SOFT_TIMER_H__ 3 4 //#define TIMEBASE_FREQ 1000 5 // 6 #define ONESHOT_TIMER 0 7 #define PERIODIC_TIMER 1 8 9 //time vector size ,可同时使用的最大定时

嵌入式单片机,外部中断,中断标志位介绍

body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil