第 7章 中断系统及实验第 7章 中断系统及实验本章学习目标:
了解中断现象、中断优先级、中断嵌套的含义。
掌握中断系统的编程及应用。
第 7章 中断系统及实验
7.1 中断的种类
能引起中断的原因是多样的,要求 CPU进行处理的任务很多,为了更好地满足整个系统对实时性的要求,有必要对中断进行分类。通常,按引起中断的原因与 CPU的关系分为外部中断和内部中断两大类。
第 7章 中断系统及实验
7.1.1 外部中断外部中断是由 CPU以外的原因引起的。
这类中断通过硬件电路向 CPU发出中断请求,因此将这类中断称为硬件中断。外部中断常用于外部设备和单片机之间的数据传送或人机交互等场合。
第 7章 中断系统及实验外部中断的中断源
① 输入 /输出设备及外存储设备;
②定时器或计数器电路;
③电源故障等。
第 7章 中断系统及实验
7.1.2 内部中断
内部中断是指由 CPU内部原因引起的中断。这类中断发生在 CPU的内部,因此称为内部中断。内部中断可分为陷阱中断和软件中断。
①陷阱中断是指由 CPU内部事件引起的中断,如程序执行中的故障,或 CPU内部的硬件故障等。
②软件中断是指由专用的软件中断指令或系统调用指令引起的中断。其主要用于引入程序断点,便于进行程序调试和故障检测。
第 7章 中断系统及实验
7.2 MCS-51单片机的中断系统
7.2.1 中断源
MCS-51单片机共有 3类 5个中断源,两个优先级,中断处理程序可实现 2级嵌套,有较强的中断处理能力。
5个中断源中,2个为外部中断请求,2个为片内定时器 /计数器 T0和 T1的溢出中断请求
TF0和 TF1,1个为片内串行口中断请求 TI或
RI。这些中断请求信号锁存在特殊功能寄存器 TCON和 SCON中。
0INT
第 7章 中断系统及实验定时器 /计数器控制寄存器 TCON
① 定时器 /计数器控制寄存器 TCON,其格式如图 7.1
所示。
图 7.1 定时器 /计数器控制字段位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
第 7章 中断系统及实验与中断有关的控制位
其中与中断有关的控制位有 6位,IT0,IE0、
IT1,IE1,TF0,TF1。
IT0:外部中断 0请求方式控制位。 IT0=0,
外部中断 0为电平触发方式,P3.2引脚上检测到低电平有效; IT0=1,外部中断 0为边沿触发方式,P3.2引脚上检测到由高到低的负跳变有效。 IT0由软件置位或复位。
第 7章 中断系统及实验外部中断 0请求标志位
IE0:外部中断 0请求标志位。 CPU采样到
P3.2引脚出现有效中断请求时,IE0由硬件电路自动置位;当 CPU响应中断,转向中断服务程序时,IE0由硬件电路自动复位。
第 7章 中断系统及实验外部中断 1请求
IT1:外部中断 1请求方式控制位,功能与
IT0类似。
IE1:外部中断 1请求标志位,功能与 IE0类似。
第 7章 中断系统及实验定时器 /计数器溢出中断申请标志位
TF0:定时器 /计数器 T0溢出中断申请标志位。启动计数后,T0从初始值开始加 1计数,
当最高位产生溢出时,由硬件电路置位 TF0,
向 CPU发出中断申请。 CPU响应 TF0中断时清除该标志位,TF0也可用软件查询后清除。
TF1:定时器 /计数器 T1溢出中断申请标志位,功能与 TF0类似。
第 7章 中断系统及实验串行口控制寄存器 SCON
② 串行口控制寄存器 SCON,其格式如图 7.2所示。
图 7.2 串行口工作方式控制字段位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
第 7章 中断系统及实验与中断有关的控制位有 2位与中断有关的控制位有 2位,TI和 RI。
TI:串行口的发送中断标志位。当串行口发送完一帧 8位数据后,由硬件电路置位 TI。需要注意的是,CPU在响应发送中断请求后,转向中断服务程序时并不会对 TI自动进行复位,因此用户应在中断服务程序中对 TI进行手动复位。
RI:串行口的接收中断标志位。当串行口接收完一帧 8位数据后,由硬件电路置位 RI。类似的,用户应在中断服务程序中对 RI进行手动复位。
第 7章 中断系统及实验
7.2.2 中断允许控制对于每个中断源,其开发与禁止由中断允许控制寄存器 IE的控制位决定,其格式如图 7.3所示。
图 7.3 中断允许控制字段位地址 AFH AEH ADH ACH ABH AAH A9H A8H
IE EA / ET2 ES ET1 EX1 ET0 EX0
第 7章 中断系统及实验与中断有关的控制位与中断有关的控制位有,EA,ES,ET1、
EX1,ET0,EX0。
EA:中断允许总控制位。 EA= 0,关闭总控制位,禁止所有中断; EA= 1,开放总控制位,每个中断源根据各自的控制位的置位或复位来确定开发或禁止。
ES:串行口中断允许控制位。 ES= 0,禁止串行口中断; ES= 1,允许串行口中断。
第 7章 中断系统及实验定时器 /计数器中断允许控制位
ET1:定时器 /计数器 T1中断允许控制位。 ET1= 0,
禁止 T1中断; ET1= 1,允许 T1中断。
EX1:外部中断 1中断允许控制位。 EX1= 0,禁止外部中断 1; EX1= 1,允许外部中断 1。
ET0:定时器 /计数器 T0中断允许控制位。 ET0= 0,
禁止 T0中断; ET0= 1,允许 T0中断。
EX0:外部中断 0中断允许控制位。 EX0= 0,禁止外部中断 0; EX0= 1,允许外部中断 0。
第 7章 中断系统及实验
7.2.3 中断响应优先级控制中断源的响应优先级是由中断优先级寄存器 IP的控制位决定的,格式如图 7.4所示。
图 7.4 中断优先级控制字段位地址 BFH BEH BDH BCH BBH BAH B9H B8H
IP / / / PS PT1 PX1 PT0 PX0
第 7章 中断系统及实验中断优先级控制位
PS:串行口中断优先级控制位。 PS= 0,串行口中断响应优先级设为低优先级; PS= 1,串行口中断响应优先级设为高优先级。
PT1:定时器 /计数器 T1中断优先级控制位。 PT1
= 0,定时器 /计数器 T1中断响应优先级设为低优先级; PT1= 1,定时器 /计数器 T1中断响应优先级设为高优先级。
PX1:外部中断 1中断优先级控制位。 PX1= 0,外部中断 1中断响应优先级设为低优先级; PX1= 1,
外部中断 1中断响应优先级设为高优先级。
第 7章 中断系统及实验中断优先级控制位
PT0:定时器 /计数器 T0中断优先级控制位。
PT0=0,定时器 /计数器 T0中断响应优先级设为低优先级; PT0=1,定时器 /计数器 T0
中断响应优先级设为高优先级。
PX0:外部中断 0中断优先级控制位。
PX0=0,外部中断 0中断响应优先级设为低优先级; PX0=1,外部中断 0中断响应优先级设为高优先级。
第 7章 中断系统及实验中断系统结构第 7章 中断系统及实验单片机对中断优先级的处理原则
同一优先级的中断源同时申请中断时,按自然优先级顺序确定应响应的中断申请;
不同优先级的中断源同时申请中断时,先处理高优先级的申请,后处理低优先级的申请;
正在处理低优先级中断时收到高优先级中断申请,
停止处理低优先级中断以响应高优先级中断申请;
正在处理高优先级中断时收到低优先级中断申请,
不响应低优先级中断申请。
第 7章 中断系统及实验对于同一优先级的中断申请
对于同一优先级的中断申请,单片机对中断申请响应顺序安排如下:
中断源 同一中断优先级外部中断 0 最高级定时器 /计数器 T0中断外部中断 1
定时器 /计数器 T1中断串行口中断 最低级第 7章 中断系统及实验
7.2.4 中断响应
单片机响应中断的基本条件是:有效的中断请求;当前的所有中断请求中,响应优先级最高;中断允许控制寄存器 IE中源允许开关和总允许开关均已开放。
第 7章 中断系统及实验单片机中断响应过程
单片机中断响应过程:单片机一旦响应中断,首先置位相应的优先级有效触发器;
然后执行一个硬件子程序调用,把断点地址压入堆栈;再把与各中断源对应的中断服务程序首地址送到程序计数器 PC,同时清除中断请求标志( TI和 RI除外),从而控制程序转移到中断服务程序。以上过程由中断系统自动完成。
第 7章 中断系统及实验中断服务程序入口地址各中断源所对应的中断服务程序入口地址:
中断源 入口地址外部中断 0 0003H
定时器 /计数器 T0中断 000BH
外部中断 1 0013H
定时器 /计数器 T1中断 001BH
串行口中断 0023H
第 7章 中断系统及实验中断服务程序入口地址
由于每个中断服务程序入口地址处只有 8个字节的空间,无法放下完整的中断服务程序,通常是将中断服务程序放在内存的其他区域,而在入口地址处放一条长跳转指令 LJMP,以转移到中断服务程序运行。单片机在保护断点后,转入中断服务程序,
直到遇到 RETI指令返回主程序为止。
第 7章 中断系统及实验中断服务程序中加上参数
如使用 C51语言编程,只需在中断服务程序中加上参数,interrupt n( n=0-4)即可,n
的数值对应 5个中断源。在返回主程序时,
也无需再加入特别的中断返回指令。断点保护和返回在 C51源程序编译时由系统自动完成。
第 7章 中断系统及实验
7.3 交通灯控制实验
用单片机来控制十字路口的交通,在紧急状况下能让特殊车辆优先通行。正常情况下,东西路口和南北路口交替通行,有特殊车辆需通行时,通过中断程序使东西路口和南北路口均禁止通行,保证特殊车辆的优先通行。
第 7章 中断系统及实验
7.3.1 硬件电路第 7章 中断系统及实验
7.3.2 软件在工作目录中建立 traffic_light.uv2工程,将
traffic_light.c源文件添加到工程中,经编译连接后生成 traffic_light.hex以载入到单片机中。
工程项目窗口如图 7.8所示。
第 7章 中断系统及实验图 7.8 工程窗口第 7章 中断系统及实验以下为 traffic_light.c源文件:
//---交通灯控制实验 ---
//---头文件引用 ---
#include "reg51.h"
//---宏定义 ---
#define uchar unsigned char
#define uint unsigned int
//---位变量定义 ---
sbit EAST_REDLIGHT=P1^0;
sbit EAST_YELLOWLIGHT=P1^1;
sbit EAST_GREENLIGHT=P1^2;
sbit SOUTH_REDLIGHT=P1^3;
sbit SOUTH_YELLOWLIGHT=P1^4;
sbit SOUTH_GREENLIGHT=P1^5;
第 7章 中断系统及实验
//---延时子程序 ---
void delay(uint k)
{ uint i,j;
for(i=0;i<1000;i++)
for(j=0;j<k;j++);
}
第 7章 中断系统及实验
//---外部中断 0响应程序 ---
void int0( ) interrupt 0
{ EAST_REDLIGHT=1;
EAST_YELLOWLIGHT=0;
EAST_GREENLIGHT=0;
//东西路口红灯开启,黄灯绿灯关闭
SOUTH_REDLIGHT=1;
SOUTH_YELLOWLIGHT=0;
SOUTH_GREENLIGHT=0;
//南北路口红灯开启,黄灯绿灯关闭
delay(850);//延时 10秒
}
第 7章 中断系统及实验
//---东西路口通行子程序 ---
void east( )
{ EAST_REDLIGHT=0;
EAST_YELLOWLIGHT=0;
EAST_GREENLIGHT=1;//东西路口绿灯开启,黄灯红灯关闭
SOUTH_REDLIGHT=1;
SOUTH_YELLOWLIGHT=0;
SOUTH_GREENLIGHT=0;//南北路口红灯开启,黄灯绿灯关闭
delay(850);//延时 10秒
EAST_REDLIGHT=0;
EAST_YELLOWLIGHT=1;
EAST_GREENLIGHT=0;//东西路口黄灯开启,绿灯红灯关闭
delay(85);//延时 1秒
}
第 7章 中断系统及实验
//---南北路口通行子程序 ---
void south( )
{
EAST_REDLIGHT=1;
EAST_YELLOWLIGHT=0;
EAST_GREENLIGHT=0;//东西路口红灯开启,黄灯绿灯关闭
SOUTH_REDLIGHT=0;
SOUTH_YELLOWLIGHT=0;
SOUTH_GREENLIGHT=1;//南北路口绿灯开启,黄灯红灯关闭
delay(850);//延时 10秒
SOUTH_REDLIGHT=0;
SOUTH_YELLOWLIGHT=1;
SOUTH_GREENLIGHT=0;//南北路口黄灯开启,绿灯红灯关闭
delay(85);//延时 1秒
}
第 7章 中断系统及实验
//---主程序 ---
main( )
{ IE=0x81; //开中断
TCON=0x00;//中断触发方式为电平方式
IP=0x00; //外部中断 0设为低优先级
while(1)
{ east( ); //东西路口通行
south( );//南北路口通行
}
}
第 7章 中断系统及实验
7.3.3 运行结果第 7章 中断系统及实验图 7.10 南北路口通行第 7章 中断系统及实验图 7.11 特殊车辆通行(中断)
第 7章 中断系统及实验
7.4 数据采集实验
用单片机来实现一个数据采集系统,用户发出中断请求后,单片机采集一次数据,
之后将采集结果在发光二极管上输出。
第 7章 中断系统及实验
7.4.1 硬件电路本实验使用单片机的 P0口作为数据采集输入端,P1口作为输出端,使用一个按键开关提供单个脉冲作为中断请求信号。硬件电路图如图 7.12所示。
第 7章 中断系统及实验图 7.12 数据采集实验硬件电路第 7章 中断系统及实验
7.4.2 软件
工程窗口如图 7.13所示。
图 7.13 数据采集实验工程窗口第 7章 中断系统及实验
C51源文件 data_collect.c如下所示。
//---数据采集实验 ---
//---包含头文件 ---
#include"reg51.h"
//---外部中断 1响应程序 ---
void int1( ) interrupt 2
{ P0=0xff;//P0口用于输入
P1=P0;
}
第 7章 中断系统及实验
//---主函数 ---
void main( )
{ IE=0x84;//开中断
while(1);
}
第 7章 中断系统及实验
7.4.3 实验运行结果
从图 7.14至图 7.16,可看到:按键一次,则采集数据一次;
不按键则不采集。
图 7.14 数据采集实验(未采集数据)
第 7章 中断系统及实验图 7.15 数据采集实验(第一次数据采集)
第 7章 中断系统及实验图 7.16 数据采集实验(第二次数据采集)
第 7章 中断系统及实验
7.5 中断嵌套实验
MCS-51单片机具有 2个响应优先级的中断系统,可以实现中断的嵌套,即高优先级的中断请求可以打断低优先级的中断服务程序的执行而去执行高优先级的中断服务程序。
实验中使用了三套数码管显示系统,分别为正常显示系统(使用 P0口)、低优先级中断显示系统(使用 P1口)和高优先级中断显示系统(使用 P2口)。
第 7章 中断系统及实验
P1口进行显示 0-9的数字
实验中,正常显示系统将循环显示 0-9的数字,发出中断请求后,低响应优先级的显示系统将打断正常显示系统的显示,转到
P1口进行显示一次 0-9的数字,显示完毕后关闭显示返回到主程序。若在显示期间有高响应优先级的中断请求来到,则低响应优先级的显示系统将被打断,转到 P2口进行显示一次 0-9的数字,显示完毕后关闭显示返回到低响应优先级的中断服务程序。
第 7章 中断系统及实验
7.5.1 硬件电路
中断嵌套实验的硬件电路如图 7.17所示。
图 7.17 中断嵌套实验硬件电路第 7章 中断系统及实验
7.5.2 软件
在工作目录下建立工程文件 7seg.uv2,之后输入 C51源文件 7seg.c,添加到工程文件中,
编译连接后生成 7seg.hex目标文件以供载入单片机。
工程窗口如图 7.18所示。
第 7章 中断系统及实验图 7.18 中断嵌套实验工程窗口第 7章 中断系统及实验
C51源文件 7seg.c如下所示。
//---中断嵌套实验 ---
//---头文件引用 ---
#include "reg51.h"
//---宏定义 ---
#define uchar unsigned char
#define uint unsigned int
第 7章 中断系统及实验
//---延时子程序 ---
void delay(uint k)
{ uint i,j;
for(i=0;i<100;i++)
for(j=0;j<k;j++);
}
第 7章 中断系统及实验
//---外部中断 0响应程序 ---
void int0( ) interrupt 0
{uchar i;
for(i=0xf0;i<0xfa;i++)
{ P1=i; //数码管显示
delay(850);//延时 1秒
}
P1=0; //关闭数码管显示
}
第 7章 中断系统及实验
//---外部中断 1响应程序 ---
void int1( ) interrupt 2
{uchar i;
for(i=0xf0;i<0xfa;i++)
{ P2=i; //数码管显示
delay(850);//延时 1秒
}
P2=0; //关闭数码管显示
}
第 7章 中断系统及实验
//---主程序 ---
main( )
{ uchar i;
IE=0x85; //开中断
TCON=0x00;//中断触发方式为电平方式
IP=0x04; //外部中断 0设为低优先级,外部中断 1设为高优先级
while(1)
{ for(i=0;i<10;i++)
{ P0=i;
delay(850);//延时 1秒
}
}
}
第 7章 中断系统及实验
7.5.3 实验运行结果
从图 7.19到图 7.23可以看到中断嵌套的过程。
图 7.19 中断嵌套实验的正常显示第 7章 中断系统及实验图 7.20 低优先级显示程序中断正常显示的情况第 7章 中断系统及实验图 7.21 高优先级显示程序中断低优先级显示程序的情况第 7章 中断系统及实验图 7.22 高优先级显示程序结束后,关闭显示返回低优先级显示程序第 7章 中断系统及实验图 7.23 低优先级显示程序结束后,关闭显示返回正常显示程序