一、中断概念
内核与外设之间的主要交互方式有两种:轮询和中断。
轮询的方式貌似公平,但实际工作效率很低,且不能及时响应紧急事件;
中断系统使得内核具备了应对突发事件的能力。在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另外一段特殊程序来处理出现的紧急事务,处理结束后,CPU自动返回到原来暂停的程序中去继续执行。这种程序在执行过程中由于外界的原因而被中间打断的情况,称为中断。
📌中断服务函数:内核响应中断后执行的相应处理程序。也就是中断发生后要做什么。
📌中断向量:中断服务程序的入口地址。每个中断源都对应一个固定的入口地址。当内核响应中断请求时,就会暂停当前的程序执行,然后跳转到该入口地址执行代码。
📌中断号:在C语言对51进行编程时,中断向量被映射为中断号,也就是我们不需要去背中断向量,只需要记住中断号对应哪个中断源就好。
✨记忆技巧:外部中断和定时中断交叉,先外部再定时器,先0后1,最后一个是串口。
二、中断过程
三、中断控制系统(类似STM32的NVIC)
51单片机的中断系统和STM32最大的区别51的中断不能嵌套,必须执行完当前中断服务函数才能执行下一个中断服务函数。
使用这个中断系统时,用户需要明确每个中断源的功能,适当地设置优先级,编写对应的中断服务函数。根据应用的需要,用户可能还需要控制中断的使能和禁止,并在中断服务例程中恰当地处理中断标志位。
四、中断相关寄存器
4.1 IE寄存器
4.2 IP寄存器(不重要,我写了好几届省赛真题都没用到这个寄存器)
4.3 TCON寄存器
4.4 TMOD寄存器(只能字节寻址)
什么叫做只能字节寻址?
举个例子就能明白,例如我们想控制TCON的外部中断0触发方式,我们可以直接IT0=0;
而我们想设置TMOD的GATE,我们不能直接GATE=0;,而必须TMOD=0x**;也就是不能直接对某一位进行操作,而必须对整个寄存器进行操作,所以我们一定要学会位操作!
4.5 SCON寄存器(串口设置相关)
五、中断编写
5.1 中断初始化&中断服务函数
推荐在写这两个函数的时候有一个自己的规范
例如:
void Init_IT0() // 外部中断0初始化
{
}
void Interrupt_IT0() interrupt 0 // 外部中断0服务函数
{
}
5.2 特殊编程格式
A. 中断函数没有返回值,也不能带参数。
B. 函数名后面要跟一个关键字 interrupt,说明这是一个中断服务函数。
C. 在关键字 interrupt 后面要跟上中断号,说明这个中断服务函数是为那个中断源服务的。
六、外部中断应用
外部中断编写重点:
1.外部中断触发方式:高电平触发or下降沿触发
2.外部中断开关
3.总开关
编写中断服务函数的规则之一就是少做事情,一定不能在中断中进行延时操作文章来源:https://www.toymoban.com/news/detail-797401.html
未完待续…文章来源地址https://www.toymoban.com/news/detail-797401.html
到了这里,关于第十五届蓝桥杯单片机组备赛——中断系统与外部中断应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!