蓝桥杯单片机 07 彻底理解 51 单片机的中断系统
广东职业技术学院 欧浩源
在接下来的教程中, 将会介绍定时器串口通信等外设的基本使用, 而这些外设的使用都要涉及中断, 而且中断是单片机或嵌入式开发中一个相当重要的概念不能掌握中断系统, 就无法灵活应用这些外设
1 什么是中断?
你正在追电视剧神雕侠侣, 正看得入迷的时候, 电话响了, 你暂停电视剧, 去接电话, 在接电话的过程中, 门铃又响了, 你暂时放下电话, 去把门打开如果追电视剧是在执行主程序, 那么电话就是中断源, 电话铃响了就是中断请求, 暂停电视就是现场保护, 接电话就是中断响应, 门铃响了是更高一级的中断请求, 去把门打开, 那就是中断嵌套开完门回来接着聊电话, 那是中断返回, 接完电话把电视剧暂停打开就是现场恢复
内核与外设之间的主要交互方式有两种: 轮询和中断轮询的方式貌似公平, 但实际工作效率很低, 且不能及时响应紧急事件; 中断系统使得内核具备了应对突发事件的能力
中断有个特点, 就是你不知道中断什么时候发生因此, 每个中断都需要有一个中断入口地址, 也成为中断向量这样, 不管中断在什么时候发生, 它都有一个确定的程序执行起始点中断响应之后, 执行的那段程序, 我们称作中断服务函数, 也就是这个函数专门是为该中断服务的
2 关于 51 单片机的中断系统
一般来说, 51 单片机有 5 个中断源 (忽略定时 / 计数器 2), 分 2 个优先级, 这个 5 个中断源按照自然优先级从高到低依次为:
外部中断 0:INT0
定时 / 计数器 0:TF0
外部中断 1:INT1
定时 / 计数器 1:TF1
串口中断: RI/TI
下面一图将充分说明 51 单片机的中断系统结构:
每个中断源都对应着一个固定的入口地址, 也就是中断向量, 它们依次是:
- 0x0003: INT0
- 0x000B: TF0
- 0x0013: INT1
- 0x001B: TF1
- 0x0023: RI/TI
也就是说, 不管主程序执行到什么地方, 只要外部中断 1 产生请求, 内核要响应该中断, 就会到 0x0013 这个地址去执行代码如果你是在使用汇编语言进行程序开发的时候, 你需要记住每个中断源对应的地址; 如果你使用的是 C 语言, 你只需要记住中断源的顺序就可以了, 也就是最左边的中断号
3 中断相关的寄存器
中断相关的寄存器有 4 个, 每个寄存器都是可以位寻址的, 这该编程带来了方便
其中 2 个为控制寄存器: IE 寄存器与 IP 寄存器:
另外 2 个为中断请求标志: TCON 寄存器与 SCON 寄存器:
4 关于中断服务函数程序的编写
一般情况下, 中断的处理函数有两个, 其一为中断初始化函数, 其二为中断服务函数初始化函数就是一个普通的函数, 而中断服务函数却有特殊的格式要求:
<1> 中断函数没有返回值, 也不能带参数
<2> 函数名后面要跟一个关键字 interrupt, 说明这是一个中断服务函数
<3> 在关键字 interrupt 后面要跟上中断号, 说明这个中断服务函数是为那个中断服务的
中断服务函数的格式为:
void 函数名 () interrupt 中断号
{
---- 函数体 ----
}
我们要利用定时器 0 来进行间隔定时, 中断程序架构我们 C 语言可以这样写:
5 结束语
中断系统很重要, 务必彻底理解, 熟练掌握, 对于每一个款微处理器都是这样!!!
来源: https://www.cnblogs.com/ALittleBee/p/8414903.html