




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及接口技术主编:张毅刚
主讲:张毅刚第5章AT89C51单片机的中断系统在单片机中,中断技术主要用于实时测控。就是要求单片机能快速响应和及时处理单片机外部事件或内部事件所提出的中断服务请求,由于中断请求是随机发出的,就要求单片机内有一个中断系统。本章应重点掌握中断系统有关的特殊功能寄存器,掌握中断系统的特性并能正确使用,中断系统软件设计:初始化编程,中断服务子程序设计。
CPU正在执行程序时,单片机外部或内部发生的某一事件,请求CPU迅速去处理。5.1中断的概念
CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为中断。
此过程,称为CPU的中断响应过程。中断源:产生中断的请求源称为中断源。中断源向CPU提出的处理请求,称为中断请求。中断系统:能够实现中断处理功能的部件称为中断系统;中断嵌套:正在执行低级中断服务程序时,被高优先级中断请求中断。 采用中断技术完全消除了单片机采用软件定时查询操作方式中的处理不及时现象,大大地提高了CPU的工作效率。因此,单片机的片内硬件中都带有中断系统。5.1中断的概念8051有5个中断请求源,两个中断优先级,实现两级中断嵌套。五个中断请求源:(1).INT0
——外部中断请求0,由引脚INT0(12脚P3.2)输入,中断请求标志为IE0。(2).INT1
——外部中断请求1,由引脚INT1(13脚P3.3)输入,中断请求标志为IE1。(3).定时器/计数器T0溢出中断请求,中断请求标志为TF0。(4).定时器/计数器T1溢出中断请求,中断请求标志为TF1。(5).串行口中断请求,中断请求标志为TI或RI。5.2AT89C51中断系统的结构5.2.1中断请求源5.2AT89C51中断系统的结构5.2.1中断请求源特殊功能寄存器TCON和SCON的相应位锁存5个中断请求源的中断请求标志。1.TCON寄存器——定时器/计数器的控制寄存器,字节地址为88H。5.2AT89C51中断系统的结构5.2.2中断请求标志寄存器各标志位的功能:
(1).TF1——T1溢出中断请求标志位。
T1计数溢出时,由硬件置“1”TF1,向CPU申请中断,CPU响应TF1中断时,硬件自动清“0”TF1,TF1也可由软件清0。(2).TF0——T0的溢出中断请求标志位,功能和TF1类似。溢出:计数到最大,再加1=0,溢出。1.TCON寄存器——定时器/计数器的控制寄存器,字节地址为88H。5.2AT89C51中断系统的结构5.2.2中断请求标志寄存器(3).IE1——外部中断请求1的中断请求标志位。IE1=1表示外部中断1有中断请求。响应中断时,硬件自动清“0”
IE1。(4).IE0——外部中断请求0的中断请求标志位。(5).IT1——选择外部中断请求1中断触发方式,由软件置“1”或清“0”
IT1=0,选择电平触发方式,“0”有效。
IT1=1,选择跳沿触发方式。“↓”有效,(6).IT0——选择外部中断请求0中断触发方式,意义与IT1类似。注意:TR1、TR02个位与中断无关。2.SCON寄存器
——串行口控制寄存器,字节地址为98H。5.2AT89C51中断系统的结构5.2.2中断请求标志寄存器各标志位的功能:
(1).TI——发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置“1”TI。必须在中断服务程序中用软件对TI标志清“0”。(2).RI——接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”RI标志。必须在中断服务程序中用软件对RI标志清“0”。5.3中断控制
5.3.1中断允许寄存器
IE
IE中断允许寄存器
,字节地址A8H,可位寻址。CPU对中断源的开放或屏蔽,由IE中断允许寄存器进行控制。IE对中断的开放和关闭为两级控制
总的开关中断控制位
EA(IE.7位):EA=0,所有中断请求被屏蔽。EA=1,CPU开放中断,但五个中断源的中断请求是否允许,还要由IE中的5个中断请求允许控制位决定。5.3中断控制
5.3.1中断允许寄存器
IEIE中其它各位的功能如下:
(1).ES:串行口中断允许位。0:禁止中断;1:允许中断。(2).ET1:定时器/计数器T1的溢出中断允许位
0:禁止中断;1:允许中断(3).EX1:外部中断1中断允许位。0:禁止中断;1:允许中断(4).ET0:定时器/计数器T0的溢出中断允许位
0:禁止中断;1:允许中断(5).EX0:外部中断0中断允许位。0:禁止中断;1:允许中断AT89C51复位后,IE清0,所有中断请求被禁止。5.3中断控制
5.3.1中断允许寄存器
IE改变IE的内容,可用字节操作指令,也可用位操作指令。
例5-1
若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。编写设置IE的相应程序段(1).
用字节操作指令编写
MOVIE,#8AH ;8AH=10001010B100010105.3中断控制
5.3.1中断允许寄存器
IE(2).用位操作指令编写
CLRES ;禁止串行口中断
CLREX1 ;禁止外部中断1中断
CLREX0 ;禁止外部中断0中断
SETBET0 ;允许定时器/计数器T0中断
SETBET1 ;允许定时器/计数器T1中断
SETBEA ;CPU开中断100010105.3.2中断优先级寄存器IP
AT89C51有两个中断优先级:低优先级、高优先级。可实现两级中断嵌套。可归纳为下面两条基本规则:(1).低优先级可被高优先级中断,反之则不能。(2).同级中断不会被它的同级中断源所中断。5.3中断控制
5.3.2中断优先级寄存器IP
IP中断优先级寄存器,其字节地址为B8H,控制中断源优先级别。IP各位的含义如下:
(1).PS:串行口中断优先级控制位1:高优先级;0:低优先级(2).PT1:定时器T1中断优先级控制位
1:高优先级;0:低优先级(3).PX1:外部中断1中断优先级控制位1:高优先级;0:低优先级(4).PT0:定时器T0中断优先级控制位
1:高优先级;0:低优先级(5).PX0:外部中断0中断优先级控制位1:高优先级;0:低优先级由软件可改变各中断源的中断优先级。5.3中断控制
5.3.2中断优先级寄存器IP89C51的中断系统有两个不可寻址的“优先级激活触发器”:一个用来指示某高优先级的中断正在执行,所有后来中断均被阻止。另一个用来指示某低优先级的中断正在执行,所有同级中断都被阻止,但不阻断高优先级的中断请求。表5-1中断查询次序中断源中断级别外部中断0 最高T0溢出中断外部中断1T1溢出中断串行口中断 最低
同时收到几个同一优先级的中断请求时,优先响应哪一个中断,取决于内部的查询顺序。查询顺序如表5-1:改变IP的内容,可用字节操作指令,也可用位操作指令。5.3中断控制
5.3.2中断优先级寄存器IP例5-2设置IP寄存器,使2个外中断请求为高优先级,其它为低优先级(1).用位操作指令
SETBPX0 ;2个外中断为高优先级
SETBPX1 CLRPS ;串口为低优先级中断
CLRPT0 ;2个定时器/计数器低优先级中断
CLRPT1(2).用字节操作指令
MOVIP,#05H ;或MOV0B8H,#05H;000001015.3中断控制
中断响应的主要过程:首先由硬件自动生成一条长调用指令:
LCALL addr165.4响应中断请求的条件
表5-2 中断入口地址表中断源
入口地址外部中断0
0003H定时器/计数器T0 000BH外部中断1 0013H定时器/计数器T1 001BH串行口中断 0023H接着就由CPU执行该指令,将PC的内容压入堆栈以保护断点,再将中断入口地址装入PC。各中断源服务程序入口地址固定。如表5-2所示:一般是在入口地址处放一条跳转指令,转移到相应中断服务程序。遇到下列三种情况之一时,不能立即响应中断(1).CPU正在处理同级的或更高优先级的中断。(2).硬件查询到中断标志时机器周期不是当前正在执行指令的最后一个机器周期。只有当前指令执行完毕后,才能响应中断。(3).正在执行的指令是RETI或是访问IE或IP的指令。需要再去执行完一条指令,才能响应新的中断请求。
如果存在上述三种情况之一,CPU将丢弃中断查询结果,不能立即对中断进行响应。但中断标志仍然存在,满足条件后仍会响应。5.4响应中断请求的条件
设计者使用外部中断时,有时需要考虑从外部中断请求有效
(外部中断请求标志IE0或IE1置“1”)到转入中断入口地址所需要的响应时间。外部中断的最短的响应时间为3个机器周期:(1).中断请求标志位查询占1个机器周期。(2).子程序调用指令LCALL转到相应的中断服务程序入口,需2个机器周期。5.5外部中断的响应时间外部中断响应的最长的响应时间为8个机器周期:(1).发生在CPU进行中断标志查询时,刚好是开始执行RETI或是访问IE或IP的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,当前指令执行完最长需2个机器周期。(2).接着再执行一条指令,按最长指令
(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。(3).加上硬件子程序调用指令LCALL的执行,需要2个机器周期。所以,外部中断响应最长时间为8个机器周期。如果已在处理同级或更高级中断,响应时间无法计算。在一个单一中断的系统里,AT89C51单片机对外部中断请求的响应的时间总是在3~8个机器周期之间。5.5外部中断的响应时间外部中断有触发两种触发方式:电平触发方式和跳沿触发方式
CPU每个机器周期自动采样外部中断输入引脚(12、13)的电平。在中断服务程序返回之前,当次外部中断请求输入必须无效,否则CPU返回主程序后会再次响应中断。(1).电平触发方式①设置电平触发方式:编程对TCON寄存器的IT0(1)位清“0”。②适合情况:适合于外部中断以低电平输入,且中断服务程序能清除外部中断请求
(使中断请求电平又变为“1”)的情况。5.6外部中断的触发方式选择5.6.1电平触发方式(2).跳沿触发方式——下降沿触发①设置跳沿触发方式:编程对TCON寄存器的IT0(1)位置“1”②适合情况:适合于外部中断以负脉冲形式输入的外部中断。
CPU若连续两个机器周期采样外部中断输入引脚(12、13)的电平,一个采样输入为高,下一个采样输入为低,则认为有下降沿,因此中断请求输入的负脉冲宽度至少保持1个机器周期。5.6外部中断的触发方式选择5.6.2跳沿触发方式
1.定时器/计数器中断请求标志TF0、TF1的建立与撤消
建立:计数器计数溢出时,硬件会自动对TF0或TF1置“1”;撤销:中断请求被响应后。硬件会自动对TF0或TF1清“0”。2.串行口中断请求标志TI、RI的建立与撤消建立:串口每发送完一帧串行数据后,硬件自动对TI置“1”;串口接收完一个数据帧,硬件自动对RI置“1”。撤销:只能采用软件撤销。这是因为CPU响应串行口中断后,还需测试这两个中断标志,判断是接收中断还是发送中断,因此不能响应中断后自动撤销。
CLRTI;清TI标志位
CLRRI;清RI标志位5.7中断请求的撤消如果中断程序中没有对TI、RI清“0”,则中断返回后又会重新进入中断程序。2.外部中断请求标志IE0、IE1的建立与撤消
建立:外部中断请求引脚信号有效,硬件自动对IE0或IE1置“1”;撤销:中断请求被响应后。硬件会自动对IE0或IE1清“0”。电平方式的外部中断请求的完全撤消,除了将中断标志位清“0”之外,还需在中断响应后把中断请求信号引脚从低电平强制改变为高电平。否则又会再次进入中断。5.7中断请求的撤消IE0=1
↓中断响应↓IE0=0↓中断服务↓IE0=10可以采用软硬件结合的方法实现,如图所示。P1.0端输出负脉冲就可使D触发器置“1”,从而撤消了低电平中断请求信号。00↑1采用跳沿触发多好!1.中断系统程序设计步骤和任务
(1).主程序初始化中的中断设置①.设置中断允许控制寄存器IE;②.设置中断优先级寄存器IP;③.对外中断源,设置是采用电平触发还是跳沿触发。(2).中断矢量填写,C语言采用interrupt
n
进行中断矢量处理。(3).编写中断服务程序,处理中断请求①.保护、恢复现场,C语言不需要;②.处理中断事务。5.8中断服务程序的设计例5-3
假设允许外部中断0中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式。在主程序中进行初始化时编写如下程序段:
SETBEA ;CPU开中断
SETBEX0 ;允许外中断0产生中断
SETBPX0 ;外中断0为高级中断
SETBIT0 ;外中断0为跳沿触发方式
SETBEX1 ;允许外中断1产生中断
SETBES ;允许串行口产生中断
SETBET0 ;允许T0产生中断
SETBET1 ;允许T1产生中断5.8中断服务程序的设计2.采用中断时的主程序结构常用的主程序结构如下:
ORG0000H
LJMPMAIN
ORG中断入口地址
(0003H)
LJMPINT ;中断矢量填写
⋮
ORG0030HMAIN:
主程序
⋮INT:
中断服务程序5.8中断服务程序的设计3.中断服务程序的流程(1).现场保护和现场恢复现场保护:现场是指进入中断时单片机寄存器和存储器单元中的数据或状态。中断发生是不可预知的,为了使中断服务子程序的执行不破坏这些数据或状态,以免在中断返回后影响主程序的运行结果,就要把不希望破坏的数据或状态送入堆栈保存起来。现场保护一定要位于中断处理程序的最前面。要保护的内容:根据中断处理程序的具体情况来决定。一般原则是,要保护中断服务子程序影响的那些寄存器或存储单元,例如PSW,Acc等。5.8中断服务程序的设计现场恢复:中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出,以恢复那些寄存器和存储器单元中的原有内容。现场恢复一定要位于中断处理程序的后面。AT89C51单片机的堆栈操作指令“PUSHdirect”和“POPdirect”,主要是供现场保护和现场恢复使用。注意堆栈后进先出原则,例如
PUSH Acc PUSH PSW
⋮ POP PSW POP Acc5.8中断服务程序的设计(2).关中断和开中断现场保护前和现场恢复前关中断,是为了防止此时有高一级的中断进入,避免现场被破坏;现场保护后开中断是为了允许有更高级的中断进入;现场恢复后开中断是为下一次的中断做好准备,这样除现场保护和现场恢复的片刻不能被中断外,仍然保持着中断嵌套的功能,又避免现场被破坏。若一个重要的中断,必须执行完毕,不允许被其他的中断嵌套。对此可在现场保护之前先关闭总中断开关位,彻底关闭其他中断请求,待中断处理完毕后再开总中断开关位。5.8中断服务程序的设计(3).中断处理中断处理是中断源请求中断的具体目的。设计者应根据具体要求,来编写该部分的程序。(4).中断返回中断服务子程序执行的最后一条指令必须是中断返回指令RETI。CPU执行完这条指令后,把响应中断时所置“1”的不可寻址的优先级状态触发器清“0”,然后从堆栈中弹出栈顶上的两个字节的断点地址送到程序计数器PC,弹出的第1个字节送入PCH,第2个字节送入PCL,CPU从断点处重新执行被中断的程序。5.8中断服务程序的设计关于现场保护的说明若中断程序中改变了PSW、A、R0的值,则中断服务程序中现场保护需将PSW、A和R0的内容保护。INT: CLR EA ;CPU关中断
PUSHPSW ;现场保护
PUSHACC PUSH00H ;保护R0
SETBEA ;CPU开中断5.8中断服务程序的设计因为中断是随机的,若不进行现场保护,则中断返回后会使被中断的程序出错。例如:
······MOV A,30HADD A,40HMOV @R0,AMOV A,31HADDCA,41HINC R0MOV @R0,A中断程序改变A,结果错误改变R0,放错单元改变PSW,结果错误例5-4
根据图5-9的中断服务程序流程,编出中断服务程序。假设,现场保护只需将PSW和A的内容保护。典型的中断子服务程序如下:INT: CLR EA ;CPU关中断
PUSHPSW ;现场保护
PUSHACC ;
SETBEA
;CPU开中断 中断处理程序段
CLREA
;CPU关中断
POPACC ;现场恢复
POPPSW SETBEA ;CPU开中断
RETI ;中断返回,恢复断点5.8中断服务程序的设计
AT89C51的两个外部中断请求源往往不够用。需对外部中断源进行扩充。外部中断源扩充必须满足两条:①.任何一个外部中断源的中断请求都能使外部中断0或1产生中断请求;②.CPU响应中断后,能够通过查询的方式找到是哪一个中断源的中断请求。本节介绍一种扩充外部中断源的方法。将外部中断按中断请求的轻重缓急进行排队分为两组,把其中高优先级别的中断请求源分为一组接到89C51的一个外部中断请求源,并设置高优先级。其余为另一组连到89C51的另一个外中断源输入端。5.9多外部中断源系统设计电路如图,5个外部中断请求源IR0~IR4,均为高电平有效,这时可按中断请求的轻重缓急进行排队,把其中最高级别的中断请求源IR0直接接到AT89C51的一个外部中断请求源INT0输入端,并设置高优先级。IR1~IR4的OC门连到89C51的另一个外中断源输入端INT1。5.9多外部中断源系统设计IR1~IR4任何一个或一个以上为高电平,则INT1=0,产生中断请求,89C51响应中断后,在中断服务子程序查询P1.0~P1.3,确定是哪一个中断源的中断请求,查询顺序就是优先响应的顺序。例C5-4电路如图,5个外部中断请求源IR0~IR4,均为高电平有效,优先级:IR0→IR4,编写程序,IR0中断,LED1~LED4全点亮;IR1中断,点亮LED1;IR2中断,点亮LED2;IR3中断,点亮LED3;IR4中断,点亮LED4;思路:主程序中外部中断0设为高优先级,外部中断1中断子程序中,按IR1→IR4顺序查询。5.9多外部中断源系统设计
ORG 0000H LJMP STA LJMP DIT0 ;外中断0中断矢量0003H ORG 0013H ;外中断1中断矢量0013H LJMPDIT1 ORG 0030H ;主程序开始处STA: MOV P1,#0FFH ;要输入先输出“1”,灯全灭
SETBEA ;CPU开中断
SETBEX0 ;允许外中断0中断
SETBEX1 ;允许外中断1产生中断
SETB IT0 ;外中断0为下降沿触发方式
SETB IT1 ;外中断1为下降沿触发方式
SETBPX0 ;外中断0为高优先级中断
CLR PX1 ;外中断1为低优先级中断LOOP: SJMP LOOP ;等待中断5.9多外部中断源系统设计中断矢量填写中断设置
ORG 0100H;外中断0程序DIT0: MOVP1,#0FH;LED全亮
RETI ORG 0200H;外中断1程序DIT1:
MOV P1,#0FFH;LED全灭
JNB P1.0,IR2;查询IR1 CLR P1.4 ;LED1亮 IR2:
JNB P1.1,IR3;查询IR2 CLR P1.5 ;LED2亮
IR3:
JNB P1.2,IR4;查询IR3 CLR P1.6 ;LED3亮
IR4:
JNB P1.3,IRRI;查询IR4 CLR P1.7 ;LED4亮IRRI: RETI ;中断返回5.9多外部中断源系统设计111100011110000C语言参考程序#include<reg51.h>
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP1_5=P1^5;
sbitP1_6=P1^6;
sbit
P1_7=P1^7;5.9多外部中断源系统设计C语言参考程序voidmain() //主函数{ P1=0xff; //LED全灭
EA=1; //总中断允许
EX0=1; //允许外部中断0中断
EX1=1; //允许外部中断1中断
IT0=1; //选择外部中断0为下降沿触发方式
IT1=1; //选择外部中断0为下降沿触发方式
PX0=1; //外部中断0为高优先级
PX1=0; //外部中断1为低优先级
for(;;) //延时等待中断
{;}} 5.9多外部中断源系统设计中断设置voidint0_isr(void)interrupt0 //外中断0的中断服务函数
{ P1=0x0f; //高4位输出0,全点亮
}voidint1_isr(void)interrupt2 //外中断1的中断服务函数
{ P1=0x0ff; //LED全灭
if(P1_0==1)P1_4=0; //IR1中断,点亮LED1 if(P1_1==1)P1_5=0; //IR2中断,点亮LED2 if(P1_2==1)P1_6=0; //IR4中断,点亮LED3 if(P1_3==1)P1_7=0; //IR4中断,点亮LED4}5.9多外部中断源系统设计在µVision_4下调试仿真调试例C5-4
无论是汇编语言程序还是C语言程序,都是一样调试。程序输入后,单击KeilC51工具栏的图标,汇编/编译当前源程序,直至程序语法上无错。单击工具栏的图标,进入仿真状态。5.9多外部中断源系统设计
单击菜单“Peripherals”,在弹出外围设备菜单中选择I/O口P1、P3。全速运行程序。在P1口中设置P1.3、P1.2、P1.1=0,P1.0=1然后产生外部中断1,P3.3=0,↓。程序会进入中断程序,使P1.4=0。1FEE汇编语言程序结构与设计方法1.特殊地址的转移程序汇编语言程序开始是写好主程序入口地址和中断入口地址的转移指令。
ORG 0000H LJMP MAIN ;转移到主程序
ORG 0003H LJMP MAIN ;无外部中断0,转移到主程序
ORG 000BH LJMP IT0P ;转移到T0中断服务程序
ORG 0023H LJMP COM_INT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国海运拼箱行业市场发展前瞻及投资战略研究报告
- 城市基础设施建设的主要施工机械设备计划
- 广东省地区气象因素对急性脑卒中发病风险的影响
- 2025年营养师基础知识考核试卷:营养师营养教育课程设计与实施试题
- 2025-2030中国棉布帽行业发展趋势及发展前景研究报告
- 2025-2030中国柑橘籽油行业调研分析及发展趋势预测研究报告
- 学校建设项目用地预审流程指南
- 2025年消防安全知识培训考试题库:火灾预防与逃生消防安全知识竞赛试题及答案(含解析)
- 矿山作业安全风险防范与控制措施
- 建筑工地安全事故应急处理流程
- 《机械设计基础》复习备考题库(含答案)
- 安全生产责任书安全制度
- xk5036数控立式铣床总体及横向进给传动机构设计论文大学本科毕业论文
- 小学五六年级青春期女生健康心理讲座PPT
- 基于模型预测控制的无人驾驶车辆轨迹跟踪控制算法研究共3篇
- 空冷岛空冷机组管束更换施工方案
- 2023年大学生数学竞赛天津市试题参考及答案
- JJG 644-2003振动位移传感器
- 药品使用监督检查记录表
- 综合工业废水处理PACT工艺
- GA/T 16.31-2017道路交通管理信息代码第31部分:交通违法行为类别代码
评论
0/150
提交评论