本文简单粗暴地阐述了中断的一些概念、中断源、中断寄存器各位的作用,并写出了编写一个中断函数的流程/要点。不在意细节时,可直接查看照搬“三、中断程序的编程”。

一、中断概念

中断定义(比喻):

​ A同学得知B同学今天会送一本书过来给他,但是不知道B什么时候来。所以A会一直做自己的事情,直到B发信息告诉他“我来了”才下楼拿书,而后又回去做自己的事情。

​ 如此便是中断的好处——可以让程序进行自己的工作,当有中断请求时再去执行中断服务程序,完成后继续自己的原工作。

中断的主要名词:

  1. 中断源:即何种事件可以引发中断。

  2. 中断请求:即告诉处理器,有一个中断事件出现了。

    • 发生中断后,微处理器要识别中断请求来自哪个中断源。
  3. 中断优先级:先执行哪个中断呢。

    • 同时出现多个中断请求时,处理器会按优先级从高到低依次执行中断服务程序。
  4. 中断响应:处理器接受中断至执行用户设置的程序的此段时间内发生的事情。

    • 先完成当前正在执行的指令,并保存下一条指令的地址(断点);
    • 暂停主程序的执行后,将程序执行的地址接入到中断入口地址;
    • 一般此时会在找中断入口地址的单元内写一条无条件转移指令(因为该地址仅8字节),使得程序跳转到中断服务程序中执行。
  5. 中断处理:执行中断服务程序。

  6. 中断嵌套:当前正在进行的中断服务程序,可以被更高优先级的中断请求打断。

  7. 中断返回:程序回到断点处,继续执行主程序。

二、51的中断系统

中断系统的结构:

中断源:

1)中断源种类:

​ 51的中断系统共有5个中断源

  • 外部中断0(INT0):由P3.2引脚输入的中断请求信号。
  • 外部中断1(INT1):由P3.3引脚输入的中断请求信号。
  • 定时器T0中断(T0):由定时器/计数器T0的定时、计数溢出产生的中断请求。
  • 定时器T1中断(T0):由定时器/计数器T1的定时、计数溢出产生的中断请求。
  • 串行口中断(ES):由串行数据发生完成(TI)或串行数据接收完成(RI)产生的中断请求。

2)中断地址入口:

​ 5个中断源有其固定的中断地址入口,编写中断服务程序时要附带对应的中断序号,以控制程序进行对应的中断响应。

中断源 中断入口地址 中断序号
外部中断0 0003H 0
定时器T0 000BH 1
外部中断1 0013H 2
定时器T1 001BH 3
串行口中断ES 0023H 4

中断的寄存器:

注:在<reg51.h>和<reg52.h>中,各寄存器对应的位已被定义,意味着无需宏定义便可直接进行“EA=1”之类的编程。

1)中断请求标志:

1.TCON寄存器

位: 7 6 5 4 3 2 1 0
字节地址:88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

各标志位功能如下:

  1. TF0——定时器T0的溢出中断请求标志位。溢出时由硬件置1,即开始发送中断请求;单片机响应中断后,重新由硬件清0。
  2. TR0——定时器/计数器0的启动控制。功能详见定时器知识。
  3. IE0——外部中断0的中断请求标志位。触发中断时由硬件置1,即开始发送中断请求;单片机响应中断后,重新由硬件清0。
  4. IT0——外部中断0的触发方式选择位。令它为1,则对应引脚为下降沿触发中断;令它为0,则对应引脚为低电平触发方式。
  5. TF1、TR1,IE1、IT1则为定时器1、外部中断1的相关标志位,功能与上述相同。

2.SCON寄存器

位: 7 6 5 4 3 2 1 0
字节地址:98H SMD SM1 SM2 REN TB8 RB8 T1 R1

各标志位功能如下:

  1. TI——串行口发送完成中断请求标志位。串行口发送数据后,TI位被硬件置1;单片机响应串行口中断后,必须在服务程序中将TI手动清0。
  2. RI——串行口接收完成中断请求标志位。串行口接收数据后,TI位被硬件置1;单片机响应串行口中断后,必须在服务程序中将TI手动清0。

2)中断控制:

1.中断允许寄存器IE

位: 7 6 5 4 3 2 1 0
字节地址:A8H EA - - ES ET1 EX1 ET0 EX0

各位的功能如下:

  1. EA——总中断允许控制位。用来开启或屏蔽所有的中断请求,令它为1,则开放中断请求,可以响应中断;令它为0,则屏蔽所有中断请求。
  2. ES——串行口中断允许控制位。为1时开放串行口中断请求,为0时屏蔽。
  3. ET1——定时器/计数器T1中断允许控制位。为1时开放TI的中断请求,为0时屏蔽。
  4. EX1——外部中断1中断允许控制位。为1时开放外部中断1的中断请求,为0时屏蔽。
  5. ET0、EX0则为T0、外部中断0的中断允许控制位。功能与上述相同。

2.中断优先级寄存器IR

位: 7 6 5 4 3 2 1 0
字节地址:B8H - - - PS PT1 PX1 PT0 PX0

各位的功能如下:

  1. PS——串行口中断优先级控制位。
  2. PT1——TI中断优先级控制位。
  3. PX1——外部中断1中断优先级控制位。
  4. PT0、PX0则为T0、外部中断0的中断优先级控制位。功能与上述相同。

中断响应的条件:

  • 中断源发出有效的中断请求,相应的中断请求标志位被置1;
  • 中断允许寄存器IE中的EA=1;
  • 相应中断源的中断请求被开放,即IE中相应位被置1。

三、中断系统的编程

中断初始化:

使用中断前,必须打开中断。

EA=1;   //打开总中断,必备。
ET0=1; //根据中断源打开相应的中断允许位,必备。TR0=1;  //如果使用定时器,则记得打开定时器
EX0=1; //如果检测外部中断,则记得选择中断触发方式

中断优先级的设置:

非必需,需要则设置寄存器IP。

中断服务程序:

void name() interrupt 1
{中断服务程序
}// name是自定义的中断名字;
// interrupt必须有,表明此为中断服务程序;
// 1是中断序号,必须有。(51中有0~4号中断源)

四、应用实例

下面是使用中断控制LCD显示按键操作次数的源码,其中有关于LCD的函数、定义已被忽略。

▲重点在全局变量的应用、服务程序的编写、中断初始化函数

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned charsbit LCD=……         //LCD的有关定义
sbit key=P3^2;     //按键S4uint num=0;      //记录按下的次数/*函数功能:粗略延时*/
void delay(uint ms){uint i=0,j=0;for(;i<=ms;i++){for(;j<=110;j++);}
}/*函数功能:LCD写入指令*/
void write_com(uchar command);/*函数功能:LCD写入数据*/
void write_datas(uchar datas);/*函数功能:初始化LCD*/
void init();/*函数功能:中断初始化-下降沿触发*/
void interr(){EA=1;        //开总中断EX0=1;       //开外部中断0IT0=1;     //设定外部中断0为下降沿触发
}void main()
{init();interr();while(1){write_com(0x80);  //将数值的显示位置固定在此delay(5);write_datas(num);        //显示按键操作次数delay(5);}
}void key_num() interrupt 0
{delay(100);        //延时消抖if(key==0){if(num==4) num=0;  /*注:先if再++,则按下超过4次*/num++;                /*     后,会复位为1       */ }
}

51单片机的中断系统及编程(附案例)相关推荐

  1. 51单片机的中断系统

    文章目录 1 51单片机的中断系统 1.1 中断的固有优先级和抢占优先级 1 51单片机的中断系统 1.1 中断的固有优先级和抢占优先级 中断使能寄存器: 中断查询序列: interrupt 后面中断 ...

  2. 51单片机之中断系统

    51单片机之中断系统 中断系统 四种中断类型: 外部中断: 定时器/计数器T0.T1中断: 串行口中断: 定时器/计数器T2中断: 中断入口: 与中断相关的特殊功能寄存器: 中断优先级: 中断响应时间 ...

  3. 51单片机外部中断的C51编程

    51单片机外部中断的C51编程 相关知识: 1.51单片机的5大中断源:串行口中断.定时中断1.外部中断1.定时中断0.外部中断0: 2.中断源的编号: 串行口中断为4.定时中断1为3.外部中断1为2 ...

  4. 51单片机笔记:中断系统

    单片机笔记 中断系统 工作原理 功能描述 终止当前进行的事件,去处理突发需及时处理的事件,处理完还要返回原事件. 中断符函数 void ISR() interupt n 中断符函数与普通函数区别 普通 ...

  5. 51单片机的中断系统详解

    单片机的中断系统 概念 中断发生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理. 中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B. 中断返回:将事件B处理完毕后,回到事 ...

  6. 51单片机:中断系统(外部中断,定时器中断,串口通信)

    目录 中断系统简介: 中断的优先级和嵌套: 8个中断请求源及其优先级: 中断的分别介绍: 1.外部中断0:INT0 2.外部中断1 3.T0和 T1:定时计数器的功能 4.串口中断(串口为什么使用定时 ...

  7. 51单片机仿真——中断系统(2)

    Proteus原理图如下: 要是没有设置中断优先级,则外部中断0比外部中断1的同级次序高.同级之间不会打断已被响应的中断请求.所以应该用IP寄存器设置两个中断源的中断优先级,就能使其中一个中断请求能被 ...

  8. 51单片机 | 外部中断实验

    文章目录 一.外部中断介绍 二.外部中断配置 三.硬件设计 四.软件设计 五.实验现象    51 单片机外部中断有 2 个,外部中断 0 和外部中断 1,它们的使用方法是一样的,所以只要学会一个即可 ...

  9. 使用51单片机采用中断方式进行串口通信的学习记录:

    使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...

最新文章

  1. 侍魂胧月传说服务器维护,侍魂胧月传说手游2021年6月2日停机维护更新详解
  2. SSO 单点登录解决方案
  3. 如何在ASP.NET 5和XUnit.NET中进行LocalDB集成测试
  4. Mysql数据库安全性问题【防注入】
  5. C++的extern关键字
  6. 正方形矩阵求对角线之和
  7. SQLServer安装挂起解决方法
  8. WinForm 图片变灰方法
  9. mysql 值到99999后不增值了_MySQL必知必会3
  10. android奔溃日志手机查看
  11. 【工程项目经验】之Xcode的Instruments检测解决iOS内存泄露
  12. spark rdd读取文件
  13. TSP旅行商问题的Hopfield求解过程
  14. three.js视频教程2022最新
  15. (Android-RTC-8)分析HardwareVideoEncoder—BitrateAdjuster
  16. SpringBoot整合JWT实现前后端Token验证
  17. 用Python批量修改文件名称
  18. 【Python实用工具】查询本机IP地址
  19. PS常用快捷键(持续更新)
  20. 修改docker ip网段

热门文章

  1. 弹出层控件popup
  2. Linux增加swap虚拟内存
  3. 【vps】如何在vps上安装mirai机器人?
  4. html-下拉列表多选
  5. 车辆行人检测学习笔记
  6. matlab图像最暗,一种暗图像的亮度增强方法与流程
  7. 第27课:使用时间测量工具挖掘可利用的业余时间(图文篇)
  8. 10分钟23张图,带你了解中国互联网现状
  9. Kali 虚拟机版,不用安装,直接使用,
  10. 警惕热门技术陷阱,数据库与存储技术规划如何制定?