单片机/MCU论坛
直播中

jf_38670854

1年用户 6经验值
私信 关注
[讨论]

单片机中断笔记

中断含义
单片机的中断是由单片机片内的中断系统来实现的。当中断请求源(简称中断源)发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断服务程序处理中断服务请求,处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。51单片机有两个外部中断,两个定时器/计数器,两个外部中断分别是int0,int1。定时器/计数器分别是t0,t1,还有一个串口中断TI/RI,加起来有五个中断。它们在硬件上的排列顺序是INT0,T0,INT1,T1,TI/RI,这5个中断源的中断顺序号依次就是interrupt 后面的0,1,2,3,4。其中定时器可以选择工作方式,因为我们使用定时器的方式不一而足,有的程序会用来计时,有的程序用来计数,根据程序要求设置工作方式各取所需。

中断的概念
CPU在处理A事件的时候,发生了B事件,请求CPU迅速去处理。(中断产生)
CPU暂时中断当前的工作,转去处理B事件。(中断响应和中断服务)
待CPU将B事件处理完毕后,再回到原来A事件中断的地方继续处理A事件。(中断返回)
这个过程,就叫做中断。

image.png

中断系统的结构

80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套。

image.png

1.外部中断0(P3.2引脚)可由IT0选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0置1,向CPU申请中断;

2.外部中断1(P3.3引脚)可由IT1选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1置1,向CPU申请中断;

3.TF0——片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。

4.TF1——片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。

5.RI或TI——串行口中断请求标志。当串行口接收完一帧串行数 据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。中断处理过程中断优先级控制——IP

中断请求标志
image.png
IT0(TCON.0),外部中断0触发方式控制位。

当IT0=0时,为电平触发方式。

当IT0=1时,为边沿触发方式(下降沿有效)。

IE0(TCON.1),外部中断0中断请求标志位。

IT1(TCON.2),外部中断1触发方式控制位。

IE1(TCON.3),外部中断1中断请求标志位。

TF0(TCON.5),定时器/计数器T0溢出中断请求标志位

TF1(TCON.7),定时器/计数器T1溢出中断请求标志位

中断允许控制——IE

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
image.png
EXO(IE.0),外部中断0允许位;

ETO(IE.1),定时/计数器TO中断允许位;

EX1(IE.2),外部中断0允许位;

ET1(IE.3),定时/计数器T1中断允许位;

ES(IE.4),串行口中断允许位;

EA(IE.7),CPU中断允许(总允许)位。

中断优先级控制——IP

80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。
image.png
PXO(IP.0),外部中断0优先级设定位;

PTO(IP.1),定时/计数器TO优先级设定位;

PX1(IP.2),外部中断0优先级设定位;

PT1(IP.3),定时/计数器T1优先级设定位;

PS (IP.4),串行口优先级设定位;

PT2 (IP.5),定时/计数器T2优先级设定位。

中断优先级的原则

同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,排列如下:
image.png

80C51单片机的中断优先级有三条原则:

1.CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。

2.正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。

3.正在进行的低优先级中断服务,能被高优先级中断请求所中断。

为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。

中断响应的条件为:

  1. 中断源有中断请求;
  2. 此中断源的中断允许位为1;
  3. CPU开中断(EA=1);

以上三条必须同时满足时,CPU才有可能响应中断。

中断服务函数要与中断一一照应

外部中断0 —— interrupt 0

外部中断1 —— interrupt 2

定时/计数器0 —— interrupt 1

定时/计数器1 —— interrupt 3

串口中断 —— interrupt 4

单片机中断系统优点

1.提高处理器的效率:使用中断可以有效降低CPU对于外设的轮询时间,释放CPU的大量时间用于执行其他任务。

2.提高系统的实时性:当有事件需要立即响应时,通过中断可以使CPU立即处理该事件,并且保证处理完成之后立即返回原来的执行任务,从而提高了系统的实时性。

3.简化程序结构:中断可以将程序分为两部分,一部分是主程序,另一部分是中断服务程序。可以将I/O操作、定时器计数等与主程序无关的功能交给中断服务程序处理,使程序结构更加简单明了。

4.提高可靠性:使用中断可以避免因为某一设备忙或出错而导致程序死循环的情况发生,从而提高了系统的可靠性**
中断函数与普通函数的相同点:**

1.都是从主函数转到子函数,子函数执行完后又返回主函数。
2.两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。
3.两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。

中断函数与普通函数的区别:
①中断函数与普通函数相比要注意在入口屏蔽一些中断,在出口恢复,防止中断函数在处理重要工作中又被中断重入,导致处理异常。
②中断函数还要注意在入口保存重要的寄存器状态,特别是函数中用到的寄存器,在出口恢复,防止中断函数结束后给正常程序带来异常。
③普通函数相当于子程序,完全可以写到主函数当中去。
④中断函数一般是和硬件相关联,在一定条件下才跳转进入的函数。
⑤中断函数需要预先设定中断条件。
⑥中断服务程序的入口地址是相对固定的,而普通的功能程序入口则是随意设置的,此外,中断服务程序的调用是靠中断申请信号而非普通程序。

中断函数注意事项(大)
1、中断函数代码应尽量简洁。一般不宜在中断函数内编写大量复杂冗长的代码;应尽量避免在中断函数内调用其他自定义函数;
2、尽量避免在中断内调用数学函数。因为某些数学函数涉及相关的库函数调用和中间变量较多,可能出现交叉调用。在必须使用数学函数时,可考虑将复杂的数学函数运算任务交给主程序完成,中断函数通过全局变量引用其结果;
3、宏的定义与调用。在中断函数中调用宏,可减少在函数调用中压栈与出栈的开销。
中断处理函数不能有返回值和形参,因为中断处理函数都是硬件调用(或者叫触发),没有程序给它传递参数,也没有程序接收它的返回值,其参数的传递通过全局变量的方式。

中断函数注意事项(小)
1、中断函数不能进行参数传递
2、中断函数没有返回值
3、在任何情况下都不能直接调用中断函数
4、中断函数使用浮点运算要保存浮点寄存器的状态。
5、如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同,被调函数最好设置为可重入的。
6、(可忽略)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:
a.在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。
b.中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。
c.如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
d.C51编译器从绝对地址8m 3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。
7、中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。
8、在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。
首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。
其次它可使中断服务程序的结构简单,不容易出错。中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。
9、中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的中断

更多回帖

发帖
×
20
完善资料,
赚取积分