中断 LET′S TRY“嵌入式编程”: 5 of 6
中断
本连载讲解作为嵌入式系统开发技术人员所必需具备的单片机的基础知识。本期为最后一期,将为大家介绍在单片机控制系统中不可缺少的 处理方式--“中断”的基础知识。
“中断”与“轮询”
本期是单片机入门连载的最后一期。第1期我们学习了“单片机的基本构成”,第2期学习了“单片机的外围功能电路”,第3期学习了“单片机的编程语言和开发环境”,第4期学习了“单片机的外部外围功能电路控制”的基础知识。本期我们将说明在单片机编程过程中一定会遇到的、也是单片机控制中不可缺少的一种处理方式---“中断”。
“中断”处理并非单片机控制系统所特有的现象,在我们的日常生活中“中断”的例子也随处可见。让我们来看看身边的例子吧。比如尽管您知道今天有快递送到,但却不知道快递送来的具体时间,在这种情况下,也许您会选择坐在客厅里边看书,边等快递送来。在您看书其间,门铃响的时候就表明快递到了(有事件发生)。这就是“中断”的例子。

图1:“中断”处理 示意图
如果不用“中断”处理等待方式的话,在看书的过程中,您就不得不经常走到门口去确认快递是否到了。 像这样频繁地确认是否有“事件”发生的现象,在单片机控制中是通过软件编程完成的。我们把这种处理方式称为“轮询”(图2)。

图2:“轮询”处理示意图
单片机中的中断处理
实际上单片机的中断处理更加复杂,还是以上述事例(边看书边等待快递送来)进行说明。
| 边看书边等待快递送来 | 单片机中的处理 |
| 1) 看书时 | 主程序正在执行时 |
| 2) 快递送来的门铃响了 | 有事件发生,向单片机发送中断信号通知 |
| 3) 中断看书过程 | 单片机接收中断信号,暂停正在执行的主程序 |
| 4) 记录正在看的页码 | 保存当前单片机的状态(保存到寄存器中) |
| 5) 接收快递 | 执行对应中断源的处理(中断程序) |
| 6) 确认刚才所作的记录 | 返回刚才所保存的单片机的状态 |
| 7) 继续看书 | 从暂停的地方开始继续执行程序 |
现在,相信大家对“中断” 已经有所了解了。下面我们来看看在实际的“中断”处理中,单片机内部是怎样进行的。
在单片机中,通知事件发生的中断信号一般来自于外部INT引脚的输入信号,或是来自定时器、串行I/F等内部的外围功能电路的信号。接收中断信号的是中断控制器。中断控制器根据产生的中断信号的优先级,按优先级顺序发送给CPU。当然,被设定为无效的设备所传送来的中断信号是不会传给CPU的,您也可以屏蔽或忽略它们。CPU根据从中断控制器接收到的指示,执行相应的程序(中断处理)。

图3:单片机内部的“中断”处理
实时处理中断
“中断”与“轮询”看起来好象可以进行同样的处理,实际上它们有很大的区别。区别在于当事件发生时,中断方式可以立刻执行对应事件的处理。中断的这种处理方式被称为是实时处理。
而在“轮询”方式中,如果对发生事件的监视周期较短的话也可以实现实时处理,但是在通常情况下,总是有多个事件发生,有时主程序也不允许太短的循环,所以,难以实现实时处理。
当 “中断” 发生时,由于从检测到事件发生到切换到中断处理只需要几十至几百个时钟,所以可以在短时间内对应事件进行处理。
例如,在键输入或开关输入的情况下,对于单片机来说开关何时将被按下是不可预测的事件。所以,如果在主程序中以“轮询”的方式监视的话,将会无端浪费CPU的处理时间,而且,如果要进行多个“轮询”处理,则“轮询”的周期将会变长。
如果不具备单片机的硬件知识,是很难理解和应用“中断”的。“中断”的内容也确实有些难度,但是它却是单片机系统控制中无法避开的一种处理。所以,大家一定要加深对单片机知识的理解,并熟练掌握“中断”的基本知识和使用方法!
单片机入门系列共分5期,讲解了单片机的基础知识。如果这个系列讲解能提高大家学习单片机的热情,我们将深感荣幸……Let’s try!
中断 LET′S TRY“嵌入式编程”: 5 of 6的更多相关文章
- 外围功能电路控制 LET′S TRY“嵌入式编程”: 4 of 6
外围功能电路控制 LET′S TRY“嵌入式编程”: 4 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的单片机的基础知识. 在<单片机入门(1)-(3)>中,我们一起学习了单片 ...
- 单片机的编程语言和开发环境 LET′S TRY“嵌入式编程”: 3 of 6
单片机的编程语言和开发环境 LET′S TRY“嵌入式编程”: 3 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 在“ ...
- 单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6
单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 上期在&l ...
- 单片机的基本构成、工作原理 LET′S TRY“嵌入式编程”: 1 of 6
单片机的基本构成.工作原理 LET′S TRY“嵌入式编程”: 1 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识.有了电 ...
- C语言与汇编的嵌入式编程:求100以内素数
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...
- 【C/C++】C语言嵌入式编程修炼·背景篇·软件架构篇·内存操作篇
C 语言嵌入式系统编程修炼之一:背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言 ...
- Makefile | Linux嵌入式编程 使用详细图解
针对的是对Makefile一点都不会的小白哦! 练习之前我们要做好准备: (1):第一步创建一个目录,因为实验过程中生成的文件会很多,不要把你系统里的文件搞得乱七八糟. [cjj@bogon ~]$ ...
- C语言与汇编的嵌入式编程:统计字符串中各字符出现的次数
原始C语言: #include<stdio.h> void main(){ ]; char pipei[] = "abcdefghijklmnopqrstuvwxyz" ...
- C语言与汇编的嵌入式编程:main中模拟函数的调用(两数交换)
编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *p1,int *p2) { int temp; temp = *p1; *p ...
随机推荐
- react-router的坑
componentWillReceiveProps(nextProps){ 在改钩子函数里接受组件变化的最近的传递的props 如果在这里没有使用nextprops 而是调用this.props 会出 ...
- java从request中获取GET和POST请求参数
URL和参数列表 一 获取请求方式 request.getMethod(); get和post都可用, 二 获取请求类型 request.getContentType(); get和post都可用,示 ...
- C# Note4:XML序列化和反序列化(含加密解密等)
前言 在项目中,我们经常用到各种配置文件,比如xml文件.binary文件等等,这里主要根据实践经验介绍下xml文件的序列化和反序列化(毕竟最常用). 实践背景:我要做一个用户管理功能,用户账号信息存 ...
- 莫烦theano学习自修第三天【共享变量】
1. 代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ import numpy as np import theano.tensor as T i ...
- 一、Dev
一.获取选中的表格 // MessageBox.Show(gridview_Parent.GetFocusedDataRow()["series"].ToString());//获 ...
- python排序 sorted()与list.sort() (转)
该文章为转载:原文地址为:https://www.cnblogs.com/zuizui1204/p/6422939.html 只要是可迭代对象都可以用sorted . sorted(itrearble ...
- Windows上安装 TensorFlow及简单命令
1.官网及帮助文档 官网: https://www.tensorflow.org/install/install_windows 中文帮助文档:https://efeiefei.gitbooks.io ...
- ES 6 系列 - Promise
一.含义 是异步编程的一种解决方案,es 6 将其变成了标准. 简单的说是一个容器,里面保存了某个未来才会结束的事件(通常是一个异步操作)的结果.语法上, Promise 是一个对象,从它可以获取异步 ...
- jQuery插件开发的基本形式
(function ($, window, document, undefined) { "use strict"; var defaults = { pageIndex: 0, ...
- How to helloworld on Xcode
create a mac app,click button to change label text? create project,click left window button on Main. ...