第5章 MCS-51单片机中断系统_第1页
第5章 MCS-51单片机中断系统_第2页
第5章 MCS-51单片机中断系统_第3页
第5章 MCS-51单片机中断系统_第4页
第5章 MCS-51单片机中断系统_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章中断系统5.1 中断的概念5.2 MCS-51单片机的中断流程5.3 MCS-51的中断响应条件和中断处理5.4 中断程序编程举例5.1中断的概念当CPU正在处理某事件的时候,外部发生的某一事件请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件后,再返回到原来被中止的地方继续原来的工作,这样的过程称为中断。中断举例中断源、中断允许控制、中断优先级处理、中断响应过程中断服务程序1中断服务程序

2中断事件1中断事件

25.2MCS-51单片机的中断流程主程序单片机中断的应用举例例1假设某消防队坐落在道路的一边,正常情况下,交通红绿灯以30s的间隔轮流点亮,当有消防任务时,消防官兵只需要按一下设置在路边的消防紧急按钮,则道路交通灯就会变成红灯并持续10s时间,禁止其他车辆通行,使消防车可以顺利通过,10s后自动返回红绿灯轮流点亮的正常状态,用51单片机的中断可以实现上述功能。例2在工业应用场合经常利用中断电路来实现系统的故障显示。假设有四个终端设备和主控室相连接,主控室可以采用声音报警或指示灯等方式表示终端设备是否正常工作。当终端设备正常工作时,主控室指示灯灭,当终端设备工作异常时,主控室对应指示灯亮,用单片机中断电路可以实现。总结:单片机的中断能实现哪些功能?P82解决快速CPU和慢速外设之间的矛盾,使CPU和外设可以并行工作。具备故障处理能力,提高机器自身的可靠性。中断方式消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。及时采集、实时控制。将现场采集的数据通过中断方式及时传送给CPU,经过处理后立即做出反应,实现现场控制。中断和子程序调用的区别P82中断子程序调用中断产生是随机的程序事先安排的可为外设和单片机内部事件服务为主程序服务,与外设无关主程序┇

MOVA,3AH

LCALLDELAYMOVB,A┇

LCALLDELAYMOVA,B┇DELAY子程序DELAY:MOVR0,30H┇

RET子程序调用中断服务程序1中断服务程序

2中断事件1中断事件

2中断流程主程序中断和子程序调用的区别P82中断子程序调用中断产生是随机的程序事先安排的可为外设和单片机内部事件服务为主程序服务,与外设无关中断程序和主程序的关系ORG0000HLJMPMAINORG0003H;外部中断0的中断入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中断0下降沿触发方式

SETBEX0;外部中断0允许控制

SETBEA;单片机中断允许控制LOOP:SETBP1.0;绿灯被点亮

LCALLDELAY1S

;延时1sCLRP1.0;绿灯熄灭

SETBP1.1;红灯被点亮

LCALLDELAY1S;延时1sCLRP1.1;红灯熄灭

LJMP LOOPINT_EX0:SETBP1.1;红灯被点亮

CLRP1.0;绿灯熄灭

LCALLDELAY1S;延时1sRETI

中断初始化程序51中断系统的五个中断源P831、INT0——外部中断0。中断请求通过P3.2引脚输入。2、INT1——外部中断1

中断请求通过P3.3引脚输入。3、T0——定时器/计数器0溢出中断4、T1——定时器/计数器1溢出中断5、TX/RX——串行口中断。P3口第二功能(P20)读选通外部写选通外部计数输入计数器定时器计数输入计数器定时器申请外部中断申请外部中断串行数据发送串行数据接收功能含义RAMRAM1/0/10RDWRTTINTINTRXDTXD1010第二功能51中断系统的五个中断源P831、INT0——外部中断0。中断请求通过P3.2引脚输入。2、INT1——外部中断1

中断请求通过P3.3引脚输入。3、T0——定时器/计数器0溢出中断4、T1——定时器/计数器1溢出中断5、TX/RX——串行口中断。

当串行口完成一帧数据的发送或接收时,

便自动请求中断。溢出时自动请求中断P3口第二功能(P20)读选通外部写选通外部计数输入计数器定时器计数输入计数器定时器申请外部中断申请外部中断串行数据发送串行数据接收功能含义RAMRAM1/0/10RDWRTTINTINTRXDTXD1010第二功能IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0IE1TF1T0T1TIRITXRXESET0EX0EX1ET1EA自然优先级矢量地址高级中断请求自然优先级矢量地址低级中断请求PX0PT0PX1PT1PSIEIP中断请求标志寄存器

TCON、SCON中断允许控制寄存器

IE中断优先级寄存器IPMCS-51单片机中断系统结构P82interrupt

enablepriorityconfig单片机例5.5消防紧急按钮源程序如下:ORG0000HLJMPMAINORG0003H;外部中断0的中断入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中断0下降沿触发方式

SETBEX0;外部中断0允许控制

SETBEA;单片机中断允许控制LOOP:SETBP1.0;绿灯被点亮

LCALLDELAY1S

;延时1sCLRP1.0;绿灯熄灭

SETBP1.1;红灯被点亮

LCALLDELAY1S;延时1sCLRP1.1;红灯熄灭

LJMP LOOPINT_EX0:SETBP1.1;红灯被点亮

CLRP1.0;绿灯熄灭

LCALLDELAY1S;延时1sRETI

中断初始化程序5.2.1中断请求标志寄存器想要接听电话必须有两个条件:电话铃必须响;你听到铃声响。对于51单片机同样如此,光有中断源是不够的,还必须能够被接收到。51单片机采用设置中断请求标志寄存器TCON和串行口中断请求标志寄存器SCON的方式来记录是否接收到中断,接收到则相应位置1。TIRI

SCON(98H)9FH9EH9DH9CH9BH9AH99H98HTF1TF0IE1IT1IE0IT0

TCON(88H)8FH8EH8DH8CH8BH8AH89H88HTF1TF0IE1IT1IE0IT0

TCON(88H)8FH8EH8DH8CH8BH8AH89H88H1、TCON中断请求标志寄存器

TCON寄存器的8位使用了6位,另外两位将在第六章使用。

TCON锁存T0和T1的溢出中断标志及外部中断0和1的中断标志等。externalTrigger各控制位的含义TF1:定时器/计数器T1溢出中断请求标志位。T1TF0:定时器/计数器T0溢出中断请求标志位。T0当启动T1计数后,T1从初值开始加1计数,计数器最高位产生溢出时,由硬件自动使TF1置1,向CPU发出中断请求。当CPU响应中断时,硬件将自动对TF1清0。IE1:外部中断1的中断请求标志。INT1(P3.3)IE0:外部中断0的中断请求标志。INT0(P3.2)以IE1为例:当检测到外部中断引脚INT1(P3.3)上存在有效的中断请求信号时,由硬件自动使IE1置1。当CPU响应中断请求时,由硬件自动使IE1清0。

各控制位的含义IE1:外部中断1的中断请求标志。INT1(P3.3)IE0:外部中断0的中断请求标志。INT0(P3.2)以IE1为例:当检测到外部中断引脚INT1(P3.3)上存在有效的中断请求信号时,由硬件自动使IE1置1。当CPU响应中断请求时,由硬件自动使IE1清0。

IT1:外部中断1的中断触发方式控制位。IT0:外部中断0的中断触发方式控制位。以IT1为例:

IT1=0时,外部中断1为低电平触发方式。即若引脚P3.3为低电平,则有中断请求信号,则IE1置1;

IT1=1时,外部中断1为下降沿触发方式。

若引脚P3.3的电平一个机器周期高电平,接着的下一个机器周期为低电平,则有中断请求信号,则IE1置1。注意:IE1、IE0由硬件自动设置

IT1、IT0可由用户设置。提问:外部中断0下降沿触发,怎么置位?

SETBIT0Trigger2、串行口中断请求标志寄存器SCONTIRI

SCON(98H)9FH9EH9DH9CH9BH9AH99H98H

SCON为串行口控制寄存器,其低2位锁存串行口的接收中断和发送中断标志RI和TI。

SCON中TI和RI的格式如下所示SCON中控制位的含义TI:串行口发送中断请求标志CPU将一个数据写入发送缓冲器SBUF时,就启动发送。每发送完一帧串行数据后,硬件置TI=1。但CPU响应中断时,并不清除TI,必须在中断服务程序中由程序对TI清0。RI:串行口接收中断请求标志在串行口允许接收时,每接收完一个串行帧,硬件置RI=1

。CPU响应中断时不会清除RI,必须在中断服务程序中由程序对RI清0。transmitreceive

总结:MCS-51的中断标志

优先级高低INT0INT1T0T1串口IE0TF0IE1TF1TIRI中断源中断标志位每一个中断源都有相应的中断标志位;某一个中断源申请中断,相应中断标志位置1。中断矢量0003H000BH0013H001BH0023HP265.2.2中断允许控制寄存器EAESET1EX1ET0EX0

IE(A8H)AFHAEHADHACHABHAAHA9HA8HEA—中断允许总控制位。

EA=0,屏蔽所有的中断请求;

EA=1,CPU开放中断。开放哪个中断,还要取决于各中断源的中断允许控制位的状态。这就是所谓的两级控制。EnableES—串行口中断允许位

ES=0,禁止串行口中断;S:serial

ES=1,允许串行口中断ET1—定时器/计数器T1的溢出中断允许位

ET1=0,禁止T1中断;T:timer

ET1=1,允许T1中断ET0—定时器/计数器T0的溢出中断允许位

ET0=0,禁止T0中断;

ET0=1,允许T0中断EX1—外部中断1的中断允许位

EX1=0,禁止外部中断1中断;X:external

EX1=1,允许外部中断1中断EX0—外部中断0的中断允许位。

EX0=0,禁止外部中断0中断;

EX0=1,允许外部中断0中断例5.1:假设允许外部中断0中断,禁止其他中断。试设置IE的相应值。解:对于51单片机采用两级中断控制,所以(IE)=10000001B=81H,对IE的设置可以用如下方式实现(a)用字节操作指令

MOVIE,#81H;(b)用位操作指令

SETBEX0 ;外部中断0允许中断

SETBEA ;CPU开中断一般情况下,建议使用位操作方式设置IE的值,这样可以增加程序的可读性。

EAESET1EX1ET0EX0

IE(A8H)11000000PSPT1PX1PT0PX0IP(B8H)

BCHBBHBAHB9HB8H1、中断优先级寄存器IP的格式PS—串行口中断优先级控制位PT1—定时器/计数器T1中断优先级控制位PX1—外部中断1中断优先级控制位PT0—定时器/计数器T0中断优先级控制位PX0—外部中断0中断优先级控制位若某控制位为1,则相应的中断源规定为高级中断;反之,为0,则相应的中断源规定为低级中断。5.2.3中断优先级控制priority2、中断优先级排列顺序

当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部硬件查询顺序。其优先级(自然优先级)排列顺序如下图所示:中断源

同级内的中断优先级外部中断0中断高级定时器/计数器T0溢出中断外部中断1定时器/计数器T1溢出中断串行口中断低级例5.4:单片机有5个中断源,但只能设置两个中断优先级,因此在中断优先级安排上受到一定的限制,试问以下几种中断的优先级排列(级别从高到低)是否可能?若可能,则应如何设置中断源的中断级别?(1)定时器T0,定时器T1,外中断0,外中断1,串行口中断(2)串行口中断,定时器T0,外中断0,外中断1,定时器T1解:(1)只有采取编程设置IP。

将定时器T0,定时器T1设置为高优先级,那么定时器T0,定时器T1优先级高于外中断0,外中断1,串行口中断;

同级中断按照自然优先级排列,定时器T0的优先级要高于定时器T1;外中断0,外中断1,串行口中断也满足自然优先级排列顺序。可以实现(IP)=00001010B(2)无法实现中断源

同级内的中断优先级外部中断0中断高级定时器/计数器T0溢出中断外部中断1定时器/计数器T1溢出中断串行口中断低级PSPT1PX1PT0PX0IP(B8H)由于51单片机只有两个优先级设置,故只存在两级中断嵌套结构,两级中断嵌套的中断过程如图所示。第一级中断必须为IP中设置的低级中断请求,第二级中断为IP中设置的高级中断请求。CPU执行高级中断服务程序响应高级中断请求返回低级中断程序高级中断请求响应低级中断请求返回主程序低级中断请求CPU执行主程序CPU执行低级中断服务程序5.2.5中断嵌套P87问:假设51单片机的5个中断源经过设置后的优先级由高到低的顺序为:

定时器T0,定时器T1,外中断0,外中断1,串行口中断

IP高级

IP低级(1)如果定时器T0发出中断请求后,单片机执行定时器T0中断程序过程中,外部中断0发出中断请求,这时会出现中断嵌套吗?(2)如果定时器T1发出中断请求后,单片机执行定时器T1中断程序过程中,定时器T0发出中断请求,这时会出现中断嵌套吗?总结:中断嵌套必须是IP低级中断内嵌IP高级中断。当一个中断被响应后,所有与之同级或低级的中断源的中断请求都被禁止,不发生嵌套。不会不会5.3MCS-51的中断响应条件和中断处理中断响应的条件中断处理过程5.3.1中断响应的条件MCS-51单片机响应中断条件有以下条件:◆有中断源发出中断请求。◆中断允许位EA=1,即CPU开放中断。◆申请中断的中断源的允许位为1,即对应的中断源开放中断◆

CPU没有响应同级或更高级别的中断请求。◆当前指令执行完毕。◆如果当前正执行的指令是返回指令(RETI)或访问IP、IE寄存器的指令,则CPU在执行完当前指令后,至少再执行一条指令才会中断。中断源发中断请求中断响应条件是否满足?把PC断点地址压入堆栈

相应中断源的中断入口地址送入PC,转向中断服务程序NY

由硬件自动完成5.3.2中断处理过程图

中断源及其对应的中断入口地址

P88或P26中断源中断入口地址外部中断0(INT0)外部中断1(INT1)定时器T0中断定时器T1中断串行口中断0023H001BH0013H0003H000BH

中断服务程序存放在相应的中断入口地址处。每个中断向量地址之间隔了8个单元,如0003-000BH,在如此少的空间中如何完成用户中断程序呢?很简单,在中断入口地址处安排一个LJMP指令,就可以跳转到中断程序可以放下的地方。建议即使中断服务程序小于8字节,也采用跳转指令方式,以便养成规范的编程风格。8个字节LJMPINT_EX0例5.5消防紧急按钮源程序如下:ORG0000HLJMPMAINORG0003H;外部中断0的中断入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中断0下降沿触发方式

SETBEX0;外部中断0允许控制

SETBEA;单片机中断允许控制LOOP:SETBP1.0;绿灯被点亮

LCALLDELAY1S

;延时1sCLRP1.0;绿灯熄灭

SETBP1.1;红灯被点亮

LCALLDELAY1S;延时1sCLRP1.1;红灯熄灭

LJMP LOOPINT_EX0:SETBP1.1;红灯被点亮

CLRP1.0;绿灯熄灭

LCALLDELAY1S;延时1sRETIEND中断初始化程序

关中断保护现场中断服务

开中断

关中断恢复现场

开中断中断返回断点地址由堆栈弹入PC保护现场和恢复现场的过程中不允许中断,以免现场遭到破坏。保护和恢复现场之后的开中断是为了允许有更高级中断打断此中断服务程序。硬件自动完成中断服务程序PUSHACCPUSHPSWPOPPSWPOPACCCLREASETBEARETI例5.5正常情况下,非交叉路口的交通红绿灯以1s的间隔轮流点亮,当有消防任务时,消防官兵只需要按一下设置在路边的消防紧急按钮,则道路交通灯就会变成红灯并持续1s时间,禁止其他车辆通行,使消防车可以顺利通过,1s后自动返回按紧急按钮前灯的状态,继续红绿灯轮流点亮的正常状态,试用51单片机来模拟实现上述功能。P91分析:1、用红色和绿色发光二极管模拟道路交通灯,并与单片机的I/O口相连,可通过设置I/O口的电平来点亮发光二极管。2、用按钮开关或闸刀开关模拟消防紧急按钮,可将开关与单片机的外部中断0的引脚相连,引入外部中断信号。3、没有中断发生时,红色和绿色发光二极管轮流被点亮,均持续1S(通过调用延时子程序实现)——主程序。4、当中断发生时,将红色发光二极管点亮,并持续1秒

——中断服务程序。5.4中断程序编程举例解:将P1口的P1.1~P1.0分别接红和绿色发光二极管D1~D0模拟道路交通灯,P3.2(INT0)引脚接一开关以模拟消防紧急按钮。图5-10AT89C51单片机模拟交通灯电路原理图P92P3.2中断初始化程序怎么写?书P20例5.5源程序如下:ORG0000HLJMPMAINORG0003H;外部中断0的中断入口地址LJMPINT_EX0ORG0030HMAIN:

SETBIT0;外部中断0下降沿触发方式

SETBEX0;外部中断0允许控制

SETBEA;单片机中断允许控制LOOP:SETBP1.0;绿灯被点亮

LCALLDELAY1S;延时1sCLRP1.0;绿灯熄灭

SETBP1.1;红灯被点亮

LCALLDELAY1S;延时1sCLRP1.1;红灯熄灭

LJMPLOOP中断初始化程序【100ms延时子程序如下】DELAY:MOVR6,#0C8H;外循环200次

LOOP1:MOVR7,#0F8H;内循环248次

NOP;时间补偿

LOOP2:DJNZR7,LOOP2;延时2μs×248=496μsDJNZR6,LOOP1;延时500μs×200=100msRET【延时1s调用100ms延时子程序如下】;1s是100ms的10倍,即连续执行100ms延时子程序10次即可

DELAY1S:MOVR0,#10

LOOP0:LCALLDELAYDJNZR0,LOOP0RET

INT_EX0:

PUSHP1PUSH00HPUSH06HPUSH07HSETBP1.1;红灯被点亮

CLRP1.0;绿灯熄灭

LCALLDELAY1S;延时1s

POP07HPOP06HPOP00HPOPP1RETIEND

需要保护现场和恢复现场的原因:需要保护在主程序和中断程序中都会使用的寄存器、并口等。因为R0、R6、R7在中断服务程序中最后都减到0了,当中断返回时,会接着中断前的延时子程序继续执行,此时的R0、R6、R7之一很有可能从0开始减,得0FFH,而不是中断前的值,延时就长了。

保护P1口的状态,是为了中断返回后继续中断前灯的显示状态,即若中断前绿灯亮了0.5秒,中断后绿灯还需要亮0.5秒,而不是红灯亮0.5秒。保护现场,00H、06H、07H分别是R0、R6、R7的地址,PUSH、POP操作数只能是直接地址P43恢复现场例5.6在工业应用场合经常利用中断电路来实现系统的故障显示,假设有四个终端设备和主控室相连接,主控室可以采用指示灯方式表示终端设备是否正常工作。当终端设备正常工作时,主控室指示灯灭,当终端设备工作异常时,主控室指示灯亮,试用单片机中断电路来实现。分析:1、用4个发光二极管模拟4个信号灯。

2、单片机只有两个外部中断源,但是现在有四个外部中断请求,那么必然存在中断扩展,单片机如何实现外部中断扩展呢?外部中断源的扩展1.将定时器T0,T1中断源作外部中断源2.查询方式扩展外部中断源把多个中断源通过硬件(或非门)引入外部中断源输入端(INT0或INT1),同时将中断源连接到某I/O接口。这样,每个中断源都可以引起中断,在中断服务程序中通过软件查询I/O口,便可以确定哪一个是正在申请的中断源。3.用中断控制芯片(如8259)进行扩展专用中断控制器8259可以直接扩展8个中断源,经级联后,最多可以扩展64个中断源。可编程中断管理芯片8259A

8259A的内部结构与外设相连与CPU相连IR0图5-11利用中断电路来实现系统的故障显示电路原理图P3.2或非中断初始化程序怎么写?1000101000本例用查询方式扩展外部中断源表示外设有故障对应外设4对应外设3对应外设2对应外设1对应外设4对应外设3对应外设2对应外设1

ORG0000H LJMPMAIN ORG0003H

LJMPINT_EX0 ORG0030HMAIN:

CLRIT0;外部中断0低电平触发方式

SETBEX0;外部中断0允许控制

SETBEA;单片机中断允许控制

SJMP$;等待中断到来INT_EX0:JNBP1.0,NEXT1

SETBP1.4 LJMPINT_EX0_ENDNEXT1:JNBP1.1,NEXT2

SETBP1.5LJMPINT_EX0_ENDNEXT2:JNBP1.2,NEXT3

SETBP1.6LJMPINT_EX0_ENDNEXT3:JNBP1.3,INT_EX0_END

SETBP1.7INT_EX0_END:RETIEND例5.6源程序:中断服务程序中对4个设备的中断请求信号依次查询并处理任一设备有故障都会触发中断

ORG0000H LJMPMAIN ORG0003H

LJMPINT_EX0 ORG0030HMAIN:

CLRIT0;外部中断0低电平触发方式

SETBEX0;外部中断0允许控制

SETBEA;单片机中断允许控制

SJMP$;等待中断到来INT_EX0:JNBP1.0,NEXT1

SETBP1.4 LJMPINT_EX0_ENDNEXT1:JNBP1.1,NEXT2

SETBP1.5LJMPINT_EX0_ENDNEXT2:JNBP1.2,NEXT3

SETBP1.6LJMPINT_EX0_ENDNEXT3:JNBP1.3,INT_EX0_END

SETBP1.7INT_EX0_END:RETIEND例5.6源程序:任一设备有故障都会触发中断;若P1.0=0则外设4无故障,继续检查外设3;若P1.0=1则外设4有故障,将对应灯点亮;若P1.1=0则外设3无故障,继续检查外设2;若P1.1=1则外设3有故障,将对应灯点亮;若P1.2=0则外设2无故障,继续检查外设1;若P1.2=1则外设2有故障,将对应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论