《单片机 第五章 中断系统.ppt》由会员分享,可在线阅读,更多相关《单片机 第五章 中断系统.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章 中断系统中断系统第一节第一节 中断概述中断概述第四节第四节 扩充外部中断源扩充外部中断源第二节第二节 80C5180C51中断系统中断系统第三节第三节 中断处理过程中断处理过程第五节第五节 中断系统的应用中断系统的应用返回总返回总目录目录第一节第一节 中断概述中断概述已知已知80C5180C51单片机主频为单片机主频为6MHz6MHz,请利用定时器请利用定时器T0T0和和P1.2P1.2输出矩形脉输出矩形脉冲,其波形如下:冲,其波形如下:一、中断的概念一、中断的概念02H控制字控制字MOV TMOD,#02HMOV TH0,#E7HMOV TL0 ,#E7HSETB TR0SET
2、B P1.2MOV R0,#7JBC TF0,REPAJMP DELCLR P1.2DJNZ R0,DELAJMP L1L1:DEL:REP:效效率率低低计算机在执行程序的过程中,由于计算机在执行程序的过程中,由于CPU以外的某种原因,中止当前程以外的某种原因,中止当前程序的执行,而去执行相应的处理程序,待处理结束后在回来执行被中序的执行,而去执行相应的处理程序,待处理结束后在回来执行被中止的原程序,这中情况我们称之为止的原程序,这中情况我们称之为“中断中断”。所执行的处理程序称为所执行的处理程序称为“中断服务程序中断服务程序”;原来运行的程序称为;原来运行的程序称为“主主程序程序”;主程序被
3、断开的点称为;主程序被断开的点称为“断点断点”;引起中断的原因,或能发;引起中断的原因,或能发出中断申请的来源称为出中断申请的来源称为“中断源中断源”。与子程序调用的区别:调用子程序指令是事先安排好的;而何时调用与子程序调用的区别:调用子程序指令是事先安排好的;而何时调用中断服务程序事先无法确知,因而调用中断服务程序的过程是由中断服务程序事先无法确知,因而调用中断服务程序的过程是由硬件硬件自动完成自动完成。二、中断系统的功能二、中断系统的功能1.1.能实现中断及返回能实现中断及返回响应响应中断中断保护保护现场现场将断点处的将断点处的PCPC值压入堆栈值压入堆栈将相关寄存器内容压入堆栈将相关寄存
4、器内容压入堆栈返回返回断点断点恢复恢复现场现场将断点处的将断点处的PCPC值弹回值弹回RETIRETI将相关寄存器的值弹回将相关寄存器的值弹回软件软件2.2.能实现中断优先级能实现中断优先级3.3.能实现中断嵌套能实现中断嵌套中断流程图中断流程图中断嵌套流程图中断嵌套流程图第二节第二节 80C5180C51中断系统中断系统一、中断源及入口地址一、中断源及入口地址1.1.中断源中断源三个片内中断源:三个片内中断源:T0、T1 和和 串行通信串行通信2.2.入口地址入口地址中断源中断源中断服务程序入口地址中断服务程序入口地址外部中断外部中断0 00003H0003H定时器定时器0 0000BH00
5、0BH外部中断外部中断1 10013H0013H定时器定时器1 1001BH001BH串行口中断串行口中断0023H0023H二、中断请求标志二、中断请求标志IE1=1(IE1=1(有有)IE1=0(IE1=0(无无)IT1=0(IT1=0(电平电平)IT1=1(IT1=1(边沿边沿)外部中断申外部中断申请方式控制请方式控制三、中断允许控制三、中断允许控制EA=1EA=1开放中断开放中断EA=0EA=0屏蔽中断屏蔽中断ES=1ES=1允许串行中断允许串行中断ES=0ES=0屏蔽串行中断屏蔽串行中断中断允许控制寄存器中断允许控制寄存器IEIE可以位寻址可以位寻址ET1=1ET1=1允许允许T1T
6、1中断中断ET1=0ET1=0屏蔽屏蔽T1T1中断中断EX1=1EX1=1允许外部中断允许外部中断1 1申请中断申请中断EX1=0EX1=0屏蔽外部中断屏蔽外部中断1 1申请中断申请中断注意:单片机复位后注意:单片机复位后IEIE被清零被清零四、中断优先级四、中断优先级PS1=1PS1=1高优先级高优先级(SETB PS)(SETB PS)PS1=0PS1=0低优先级低优先级(CLR PS)(CLR PS)PT1=1PT1=1高优先级高优先级PT1=0PT1=0低优先级低优先级注意:单片机复位后注意:单片机复位后IP IP 被清零被清零,以下为自然优先级以下为自然优先级 在人为设置的优先级相同
7、的情形下,在人为设置的优先级相同的情形下,CPUCPU按照按照 自然优先级进行响应。自然优先级进行响应。中断源中断源高高外部中断外部中断0 0定时器定时器0 0外部中断外部中断1 1定时器定时器1 1串行口中断串行口中断低低例:利用定时器例:利用定时器T0T0定时,在定时,在P1.0P1.0端输出一方波,周期为端输出一方波,周期为20ms20ms。f=12MZf=12MZ。(先用软件查询的方式编程)。(先用软件查询的方式编程)JMP$JMP$第三节第三节 中断处理过程中断处理过程中断处理过程可分三个阶段:中断响应、中断处理、中断返回中断处理过程可分三个阶段:中断响应、中断处理、中断返回一、中断
8、响应一、中断响应有中断源发出中断申请有中断源发出中断申请中断总允许位中断总允许位EA=1EA=1中断源的中断允许位为中断源的中断允许位为1 1CPUCPU正在执行一个同级或高级的中断服务正在执行一个同级或高级的中断服务不是正在执行的指令的最后一个周期不是正在执行的指令的最后一个周期正在执行正在执行RETIRETI或对或对IEIE、IPIP进行读进行读/写写二、中断处理二、中断处理中断处理中断处理(中断服务中断服务)程序从入口地址开始执行,直到返回程序从入口地址开始执行,直到返回指令指令“RETI”为止,这个过程称为为止,这个过程称为“中断处理中断处理”。此过程。此过程一般包括两部分内容,一是保
9、护现场,二是处理中断请求。一般包括两部分内容,一是保护现场,二是处理中断请求。三、中断返回三、中断返回中断返回是指中断服务完成后,计算机返回到断点(即原中断返回是指中断服务完成后,计算机返回到断点(即原来断开的位置),继续执行原来的程序。来断开的位置),继续执行原来的程序。中断返回由专门的中断指令中断返回由专门的中断指令“RETI”实现,该指令的功能实现,该指令的功能是把断点地址取出,送回到程序计数器是把断点地址取出,送回到程序计数器PC中去。中去。四、中断请求的撤除四、中断请求的撤除CPUCPU响应某中断请求后,在中断返回前,应撤销该中断请求,响应某中断请求后,在中断返回前,应撤销该中断请求
10、,否则会引起另一次中断。否则会引起另一次中断。外部中断:一旦输入信号有效,则向外部中断:一旦输入信号有效,则向CPU申请中断并且使申请中断并且使 IE0(IE1)=1,在边沿触发申请中断方式下,由硬在边沿触发申请中断方式下,由硬 件复位;件复位;在电平触发申请中断方式下,软件与在电平触发申请中断方式下,软件与 硬件均不能清除中断标志,必须在中断返回前硬件均不能清除中断标志,必须在中断返回前 撤销引脚上的低电平。撤销引脚上的低电平。定时定时/计数器:计数器:TF0(TF1)=1请求中断处理。请求中断处理。使用中断时由硬件清零,在查询方式可由软件清零。使用中断时由硬件清零,在查询方式可由软件清零。
11、串行中断:串行中断:RI或或TI1请求中断,响应中断后必须软件清零。请求中断,响应中断后必须软件清零。例:用中断的方法编程使例:用中断的方法编程使P1.0P1.0和和P1.1P1.1分别输出周期为分别输出周期为2ms2ms和和 500us500us的方波。的方波。例:用中断的方法编程设计一个秒闪电路,其功能是发光二极管例:用中断的方法编程设计一个秒闪电路,其功能是发光二极管LEDLED每每 次闪亮次闪亮1s1s,即亮,即亮600ms600ms、灭、灭400ms.400ms.主频为主频为12MHZ.12MHZ.设设P1.0P1.0接发光二极接发光二极 管管TIMER0_SUB:CLR TROTI
12、MER0_SUB:CLR TRO PUSH PSW PUSH PSW INC R2 INC R2 CJNE R2,#8H,SUB1 CJNE R2,#8H,SUB1 CLR P1.0 CLR P1.0 SUB1:CJNE R2,#14H,TEND SUB1:CJNE R2,#14H,TEND SETB P1.0 SETB P1.0 MOV R2,#0 MOV R2,#0 TEND:MOV TH0,#3CH TEND:MOV TH0,#3CH MOV TL0,#0B0H MOV TL0,#0B0H SETB TR0 SETB TR0 POP PSW POP PSW RETI RETI第四节第四节
13、 扩充外部中断源扩充外部中断源一、利用定时器扩充法一、利用定时器扩充法80C5180C51单片机有两个定时器,具有两个内部中断标志和外部计单片机有两个定时器,具有两个内部中断标志和外部计数引脚。将其设置为计数方式,计数初值定为满量程,当从外数引脚。将其设置为计数方式,计数初值定为满量程,当从外部计数引脚输入一个下降沿,计数器加部计数引脚输入一个下降沿,计数器加1 1产生溢出中断。因而产生溢出中断。因而可把外部计数引脚可把外部计数引脚T0(P3.4)T0(P3.4)或或T1(P3.5)T1(P3.5)作为扩充中断输入,定作为扩充中断输入,定时器的溢出中断标志和服务程序作为扩充中断源的标志和服务时
14、器的溢出中断标志和服务程序作为扩充中断源的标志和服务程序。程序。MOV TMOD,#06HMOV TL0,#0FFHMOV TH0,#0FFHSETB TR0SETB ET0SETB EA 将将T0T0(P3.4P3.4)扩充为外部中断源输入端)扩充为外部中断源输入端二、中断和查询结合法二、中断和查询结合法通过外部中断通过外部中断1 1扩展出扩展出4 4个外个外部中断源引脚部中断源引脚,这样加上外这样加上外部中断部中断0 0,单片机共有,单片机共有5 5个中个中断源断源XI0XI0XI4XI4,其中,其中XI0XI0的的优先级最高,至于优先级最高,至于XI1XI1XI4XI4的优先级则在外部中
15、断的优先级则在外部中断1 1服服务程序中,由软件按人为设务程序中,由软件按人为设定的顺序(优先级)查询外定的顺序(优先级)查询外部中断哪位是高电平部中断哪位是高电平(XI1(XI1XI4XI4高电平表示申请中断高电平表示申请中断),),然后进入该中断处理。然后进入该中断处理。1 1SAV1:XI1中断服务程序中断服务程序 AJMP DISUBSAV2:XI2中断服务程序中断服务程序 AJMP DISUBSAV3:XI3中断服务程序中断服务程序 AJMP DISUB SAV4:XI4中断服务程序中断服务程序 AJMP DISUBEXINT:PUSH PSW PUSH ACC JB P1.0,SA
16、V1 JB P1.1,SAV2 JB P1.2,SAV3 JB P1.3,SAV4DISUB:POP ACC POP PSW RETISAV1:XI1中断服务程序中断服务程序 AJMP DISUBSAV2:XI2中断服务程序中断服务程序 AJMP DISUBSAV3:XI3中断服务程序中断服务程序 AJMP DISUB SAV4:XI4中断服务程序中断服务程序 AJMP DISUB第五节第五节 中断系统的应用中断系统的应用本节将通过两机通信的实例,说明中断系统的应用。通过实例,可本节将通过两机通信的实例,说明中断系统的应用。通过实例,可以了解中断控制和中断服务程序的设计思想及注意的问题。以了解
17、中断控制和中断服务程序的设计思想及注意的问题。例:已知甲、乙两台例:已知甲、乙两台80C5180C51单片机所使用的晶振均为单片机所使用的晶振均为11.0592MHZ.11.0592MHZ.现要现要 求两机之间进行串行通信求两机之间进行串行通信,甲机发送,乙机接收甲机发送,乙机接收.传输波特率定为传输波特率定为 96009600波特波特.甲机以甲机以78H,77H78H,77H中的内容为发送数据的起始地址中的内容为发送数据的起始地址,以以76H76H 75H 75H中的内容为发送数据的末地址。甲机首先发送数据的起始地址中的内容为发送数据的末地址。甲机首先发送数据的起始地址 和末地址,然后再开始
18、发送数据和末地址,然后再开始发送数据.乙机接收到的第乙机接收到的第1 12 2字节作为存字节作为存 放接收数据的起始地址,第放接收数据的起始地址,第3 34 4字节作为存放接收数据的末地址字节作为存放接收数据的末地址 址,第址,第5 5字节为起始数据。(地址用查询方式发送,数据用中断发字节为起始数据。(地址用查询方式发送,数据用中断发 送)送)甲机发送程序甲机发送程序ORG 2000HMOV TMOD,20H20H-定时定时/计数器计数器T1的工作方式为的工作方式为软件启动软件启动、定时定时、方式方式2MOV TH1,#0FDH-波特率为波特率为9600波特,晶振为波特,晶振为11.0592查
19、表可得查表可得T1初始值为初始值为FDHMOV TL1,#0FDH-方式方式2为初始值自动重装的为初始值自动重装的8位定时位定时/计数器计数器SETB EA-打开总开关打开总开关CLR ES-关闭分开关。发送地址时用查询方式,因此禁止串行中断关闭分开关。发送地址时用查询方式,因此禁止串行中断SETB TRI串行通信的串行通信的“发动机设置发动机设置”及及“启动发动机(启动发动机(SETB TR1)”MOV SCON,#40H-串行口置工作方式串行口置工作方式1(8位数据位位数据位,1位起始位位起始位,1位中止位位中止位,共共10位位)CLR TI-发送前,清除串行发送中断标志(每次发送前必做的
20、工作)发送前,清除串行发送中断标志(每次发送前必做的工作)MOV SBUF,78H-把数据块首地址的高把数据块首地址的高8位发送出去位发送出去JNB TI,$-等待发送完毕等待发送完毕CLR TIMOV SBUF,77H-把数据块首地址的低把数据块首地址的低8位发送出去位发送出去JNB TI,$CLR TIMOV SBUF,76H-把数据块末地址的高把数据块末地址的高8位发送出去位发送出去JNB TI,$CLR TIMOV SBUF,75H-把数据块末地址的低把数据块末地址的低8位发送出去,由于是最位发送出去,由于是最 后一个地址,发送完后就后一个地址,发送完后就 要发送数据,按照要发送数据,
21、按照 题意数据用中断方式发送,因此发送最后一个题意数据用中断方式发送,因此发送最后一个 地址不用查询方式来判断是否发送完毕,而是地址不用查询方式来判断是否发送完毕,而是 等待发送完毕串行口自动申请中断,进入中断等待发送完毕串行口自动申请中断,进入中断 服务程序完成数据传送任务。另外,传送速率服务程序完成数据传送任务。另外,传送速率 为为9600波特率,也就是传送一位所需的时间为波特率,也就是传送一位所需的时间为 约为约为104us(若晶振为若晶振为11.0592MHZ,执行一条指,执行一条指 令的时间最多为令的时间最多为4us)SETB ESSJMP$以上为甲机发送程序的主程序,完成发送数据块
22、地址并进入中断服务程序的任务。以上为甲机发送程序的主程序,完成发送数据块地址并进入中断服务程序的任务。以下为承担发送数据的中断服务程序,串行口的中断服务程序的入口地址为以下为承担发送数据的中断服务程序,串行口的中断服务程序的入口地址为0023HORG 0023HLJMP 2000HORG 2000HESS:PUSH DPL PUSH DPH PUSH A MOV DPH,78H MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A以上发送的是数据块的第一个数据,所需时间为以上发送的是数据块的第一个数据,所需时间为81048104832us832us,本程序不设问答
23、机制,本程序不设问答机制,即乙机接收完毕后,给甲机发送一个接收完毕信号,然后甲机再启动发送第二个数据。即乙机接收完毕后,给甲机发送一个接收完毕信号,然后甲机再启动发送第二个数据。MOV A,DPH CJNE A,76H,EN1-不相等则证明尚未传送完毕,应该重新修改地址指不相等则证明尚未传送完毕,应该重新修改地址指 针指向数据块的下一个数据,因此针指向数据块的下一个数据,因此ENI程序块完成程序块完成 的是修改工作。的是修改工作。MOV A,DPL CJNE A,75H,EN1 CLR ES-A中的内容与中的内容与75H中的内容相等,证明数据全部传送完中的内容相等,证明数据全部传送完 毕毕,所
24、以关闭串行中断所以关闭串行中断 ESC:POP A POP DPH POP DPL-注意出栈顺序注意出栈顺序 RETI EN1:INC 77H MOV A,77H-77H单元中的内容加单元中的内容加1有可能等于有可能等于0,此时向高位进位此时向高位进位 JNZ EN2 INC 78HEN2:SJMP ESC以上中断服务程序块中,以上中断服务程序块中,ESSESS部分完成的是数据的传送和地址的比部分完成的是数据的传送和地址的比较;较;EN1EN1完成的是地址的修改;完成的是地址的修改;ESCESC部分完成的是恢复现场退出中部分完成的是恢复现场退出中断服务程序。值得注意的是执行完以上中断服务程序的
25、时间因该断服务程序。值得注意的是执行完以上中断服务程序的时间因该不足不足832us,832us,也就是说在中断服务程序中执行也就是说在中断服务程序中执行MOV SBUF,AMOV SBUF,A后,要后,要经过经过地址比较地址比较、修改地址修改地址、恢复现场恢复现场三项任务才能退出中断等待三项任务才能退出中断等待下一次的中断申请,也就是说执行三项任务的时间不能超过下一次的中断申请,也就是说执行三项任务的时间不能超过832us832us(这个要求很容易办到)(这个要求很容易办到)乙机接收程序乙机接收程序 ORG 2000HREV:MOV TMOD,#20H MOV TL1,#0FDH MOV TH
26、1,#0FDH SETB TR1-启动发动机启动发动机乙机设置接收波特率为乙机设置接收波特率为9600波特,与甲机的发送波特率一致。乙机发动机设置及启动波特,与甲机的发送波特率一致。乙机发动机设置及启动 MOV SCON,#50H两机沟通方式设定两机沟通方式设定,与甲机一致均为串行通信方式与甲机一致均为串行通信方式1并允许接收并允许接收.1040us接收一个数据接收一个数据(10位位)SETB EA SETB ES-乙机接收数据采用中断方式乙机接收数据采用中断方式,所以一开始就打开串行中断所以一开始就打开串行中断 CLR B.0-接收完地址后将接收完地址后将B.0置置1表示地址结束完毕表示地址
27、结束完毕 MOV 70H,#78H-把甲机发送的地址存放在乙机片内相同的位置(把甲机发送的地址存放在乙机片内相同的位置(78H,77H 和和76H,75H)SJMP$-虽然在执行完虽然在执行完MOV SCON,#50H时已经启动接收,但由时已经启动接收,但由 于接收一个数据需要于接收一个数据需要832us,因此在执行,因此在执行SJMP$时还没时还没 有接收完一个具有有接收完一个具有10位的数据位的数据 以上为乙机接收数据的主程序。主要解决发动机的设置及启动、沟通方式的设置、开中断以上为乙机接收数据的主程序。主要解决发动机的设置及启动、沟通方式的设置、开中断及必要标志位的设定。至于发送数据的任
28、务交由中断服务程序来完成。及必要标志位的设定。至于发送数据的任务交由中断服务程序来完成。ESS:PUSH DPL PUSH DPH PUSH A MOV A,R0 PUSH A-以上为保护现场以上为保护现场 JB B.0,DA0-分水岭,接收到的是地址就顺序执行接收地址程序模块,分水岭,接收到的是地址就顺序执行接收地址程序模块,否则转到接收数据程序模块否则转到接收数据程序模块DA0。MOV R0,70H-把(把(70H)即)即78H存入存入R0,78H为乙机片内地址为乙机片内地址 MOV A,SBUFF MOV R0,A DEC 70H CLR RI到此为止乙机完成接收一个到此为止乙机完成接收
29、一个10位的数据。接下来该作什么呢?当然是等待下位的数据。接下来该作什么呢?当然是等待下10位数据的位数据的接收,但必须做好准备工作。准备工作包括:判断是否接收完毕、修改地址指针等接收,但必须做好准备工作。准备工作包括:判断是否接收完毕、修改地址指针等 MOV A,#74H-4个字节的地址接收完毕时个字节的地址接收完毕时70H中的内容位中的内容位74H CJNE A,70H,DA2-不相等则直接退出中断服务程序,等待接收下不相等则直接退出中断服务程序,等待接收下 一个地址否则表示地址接收完毕。一个地址否则表示地址接收完毕。SETB B.0DA2:POP A MOV R0,A POP A POP DPH POP DPL RETIDA0:MOV DPH,78H MOV DPL,77H MOV A,SBUFF MOVX DPTR,A CLR RI INC 77H MOV A,77H JNZ DA3 INC 78HDA3:MOV A,76H CJNE A,78H,DA2 MOV A,75H CJNE A,77H,DA2 CLR ES CLR TR1 AJMP DA2DA2程序块:恢复现场,退出中断程序程序块:恢复现场,退出中断程序DA0程序块:修改地址指针程序块:修改地址指针78H和和77HDA3程序块:判别是否全部数据接收完毕程序块:判别是否全部数据接收完毕
限制150内