单片机成长之路(51基础篇) - 010 51单片机的中断系统

2020-01-16来源: eefocus关键字:单片机  51基础篇  中断系统

一. 有关中断的概念

1. 仔细研什么叫中断?
  举例:同学正在教室写作业,忽然被人叫出去,回来后,继续写作业这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。


二. 引入计算机中断的概念。
  中断的作用:

    处理断电保存,解决快速CPU与慢速外设之间的矛盾等。对MCS-51单片机的中断系统用一句话讲叫:“五源中断,两级管理”中断请求源(五源中断)


  五个中断源:


外部中断0(/INT0)      0003H

T0溢出中断             000BH

外部中断1(/INT1)      0013H

T1溢出中断             001BH

串口中断 入口地址     0023H 


  有了中断请求,如何通知CPU?

  通过中断请求标志位来通知CPU。

研究一下生活中的中断,对于我们学习单片机的中断也很有好处。


  第一、什么可以引起中断,生活中很多事件可以引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。


  第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。


  第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:


1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。

2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。

3、执行中断处理程序。

4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。


  究竟单片机是怎么样找到中断程序所在位置,又怎么返回的呢?我们稍后再谈。

MCS-51中断系统的结构:


  8031单片机的中断系统简单实用,其基本特点是:有5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序;5个中断源有两级中断优先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设置的 编程。


中断系统的结构:
  5个中断源的符号、名称及产生的条件如下。


INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。

INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。

T0:定时器/计数器0中断,由T0计满回零引起。

T1:定时器/计数器l中断,由T1计满回零引起。

TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。


  整个中断系统的结构框图见下图一所示。

    由图一可见,外部中断有下跳沿引起和低电平引起的选择;串行中断有发送(TI)相接收(R1)的区别;各个中断源打开与否,受中断自身的允许位和全局允许位的控制,并具有高优先级和低优先级的选择。


中断请求源:

  (1)外部中断请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。


    IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。

    

    IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。


    IT1、IE1的用途和IT0、IE0相同。


  (2)内部中断请求源

    TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。


    TF1:定时器T1的溢出中断标记,当T1计数产生溢出时,由硬件置位TF1。当CPU响应中断后,再由硬件将TF1清0。


    TI、RI:串行口发送、接收中断,在串口中再讲解。


中断系统的控制寄存器:

中断允许寄存器IE:在中断源与CPU之间有一级控制,类似开关,其中第一级为一个总开关,第二级为五个分开关,由IE控制。


中断屏蔽:在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。见下表

IE 中断充许寄存器

B7

B6

B5

B4

B3

B2

B1

B0

EA

-

ET2

ES

ET1

EX1

ET0

EX0

  其中EA是总开关,如果它等于0,则所有中断都不允许。


ES-串行口中断允许

ET1-定时器1中断允许

EX1-外中断1中断允许。

ET0-定时器0中断允许

EX0-外中断0中断允许。


如果我们要设置允许外中断1,定时器1中断允许,其它不允许,则IE可以是即:8CH,当然,我们也可以用位操作指令来实现它。


SETB EA

SETB ET1

SETB EX1


单片机中断指令:


 1 SETB EA ; 允许单片机总断

 2 CLR EA ; 禁止单片机总断

 3 SETB ES ; 允许串口断

 4 CLR ES ; 禁止串口断

 5 SETB ET1 ; 允许T1溢出断

 6 CLR ET1 ; 禁止T1溢出断

 7 SETB EX1 ; 允许外部断1

 8 CLR EX1 ; 禁止外部断1

 9 SETB ET0 ; 允许T0溢出断

10 CLR ET0 ; 禁止T0溢出断

11 SETB EX0 ; 允许外部断0

12 CLR EX0 ; 禁止外部断0


中断优先级寄存器IP

  中断优先原则:(概括为四句话)


1 低级不打断高级

2 高级不睬低级

3 同级不能打断

4 同级、同时中断,事先约定。


CPU同一时间只能响应一个中断请求。若同时来了两个或两个以上中断请求,就必须有先有后。为此将5个中断源分成高级、低级两个级别,高级优先,由IP控制。
在MCS-中断优先级中由中断优先级寄存器IP来高置的,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。

IP优先级别寄存器各位介绍如下:


1 PS:串行口中断优先级控制位。PS=1设定串行口为高优先级中断;PS=0为低优先级中断。

2 PT1:T1中断优先级控制位。PT1=1设定定时器T1为高优先级中断;PT1=0为低优先级中断。

3 PX1:外部中断1优先级控制位。PX1=1设定定时器外部中断1为高优先级中断;PX1=0为低优先级中断。

4 PT0:T0中断优先级控制位。PT0=1设定定时器T0为高优先级中断;PT0=0为低优先级中断。

5 PX0:外部中断0优先级控制位。PX0=1设定定时器外部中断0为高优先级中断;PX0=0为低优先级中断。


例:设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。

IP的首3位没用,可任意取值,设为000,后面根据要求写就可以了  

因此,最终,IP的值就是06H。

例:在上例中,如果5个中断请求同时发生,求中断响应的次序。

响应次序为:定时器0->外中断1->外中断0->定时器1->串行中断。


五个中断源的自然优先级与中断服务入口地址


外中断0:0003H

定时器0:000BH

外中断1:0013H

定时器1:001BH

串口 :0023H


它们的自然优先级由高到低排列。写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:


orG 0000H

LJMP START

orG 0030H

START:


  这样写的目的,就是为了让出中断源所占用的向量地址。当然,在程序中没用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。


  优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。


MCS-51的中断响应过程:

中断响应的条件:
  讲到这儿,我们依然对于计算机响应中断感到神奇,我们人可以响应外界的事件,是因为我们有多种“传感器“――眼、耳可以接受不同的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。

[1] [2]
关键字:单片机  51基础篇  中断系统 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485876.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机成长之路(51基础篇) - 012 MCS-TMOD T2MOD
下一篇:单片机成长之路(51基础篇)- 009 关于sdcc的多文件编译范例

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于单片机的DHT11温度湿度采集系统
DHT11温度湿度采集原理图:DHT11的单片机源程序:***************************************************************/#include <reg52.h>#define uint unsigned int #define uchar unsigned char#include <intrins.h>typedef bit BOOL  ; sbit io = P1^1 ;//(口线定义)sbit bee=P1^0;sbit rs = P2^5 ; sbit rw = P2^6 ;sbit ep = P2
发表于 2020-01-09
基于单片机的DHT11温度湿度采集系统
单片机贪吃蛇程序Lcd12864显示
贪吃蛇的单片机源程序如下:/***********************************************************功能说明:贪吃蛇编译环境:keil4MCU     :STC89C52RC时钟频率: 22.1184MHz注意:该例程中“过关”不能在keil4编译环境中正常显示************************************************************//*****************************************************************     
发表于 2020-01-09
51单片机+ULN2003驱动5V减速步进电机程序
51单片机      步进电机/*******************************************************ULN2003驱动5V减速步进电机程序Target:STC89C52RC-40CCrystal:12MHzAuthor:战神单片机工作室Platform:51&avr单片机最小系统板+ULN2003步进电机驱动套件*******************************************************接线方式:IN1 ---- P00IN2 ---- P01IN3 ---- P02IN4 ---- P03+   
发表于 2020-01-09
单片机16*16点阵汉字显示仿真加源码 用74hc595驱动芯片
单片机16*16点阵仿真原理图如下点阵由于电流比较大不能直接接单片机所以用74hc595驱动串转并芯片,还可以实现用很少的io口来控制.  单片机源程序如下:#include "reg51.h"#define uchar unsigned char#define uint  unsigned int#define Lie   P1sbit SHCP = P2^0;sbit  DS  = P2^1;sbit STCP = P2^2;uchar code led[ ] ={0x00
发表于 2020-01-09
单片机16*16点阵汉字显示仿真加源码 用74hc595驱动芯片
单片机与PC机的串口通信课程设计
1.1设计目的单片机与PC机串行通信端口在系统控制的范畴中一直占据着及其重要的地位,它不仅没有因为时代的进步而遭淘汰,反而在规格上越来越完善,应用也越来越广泛。作为一种基本而又灵活方便的通信方式,串口通信被广泛应用于PC与PC或者PC与单片机之间的数据交换以及其他工业控制与自动控制中。如今,在很多场合中,要求单片机不仅能独立完成单机的控制任务,还要能与其他数据控制设备(单片机、PC机等)进行数据交换。因此如何实现PC机与单片机之间的通信具有非常重要的现实意义。1.2设计内容以单片机与PC机为核心,实现单片机与PC机机的串口通信。2系统硬件电路设计2.1系统设计框图图2-1 系统设计框图2.2串口通信基本原理所谓"串行通信
发表于 2020-01-09
单片机与PC机的串口通信课程设计
51单片机的ADC0808数字电压表设计
摘要近些年来,数字电压表逐渐进入人们的视线中,它主要采取数字化测量技术。与传统的指针式仪表相比,它的功能有了进一步的完善,并且精度也有了很大的提高。数字电压表主要采用单片机和模/数转换模块,这样不仅提高了测量速度,而且抗干扰能力强、使用便捷、可扩展性强、测量准确。本文主要采用AT89C51单片机和ADC0808芯片制作的简易数字电压表,可以采集0~5V和5~10V的模拟直流电压进行测量,其测量结果在液晶LCD1602上显示。该设计硬件电路主要有三个模块组成:A/D转换模块、数据处理模块及输出显示模块。数据处理由单片机AT89C51来完成,它主要把ADC0808传送来的数值经一定的数据处理,然后送至显示模块进行显示,同时控制显示芯片
发表于 2020-01-09
51单片机的ADC0808数字电压表设计
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved