《第5章中断系统》由会员分享,可在线阅读,更多相关《第5章中断系统(55页珍藏版)》请在金锄头文库上搜索。
1、第第5章章 中断系统中断系统5.1中断控制方式中断控制方式5.2MCS-51单片机的中断系统单片机的中断系统5.3中断的中断的C51编程编程5.4外部中断的扩展外部中断的扩展 什么是中断什么是中断生活举例生活举例:你正在家中看书:你正在家中看书突然电话铃响了突然电话铃响了你在你在书上做个记号书上做个记号去接电话并和来电话的人交谈去接电话并和来电话的人交谈门铃突然门铃突然响了响了你让打电话的人先等等你让打电话的人先等等你去开门并和来人交谈你去开门并和来人交谈谈话结束后关好门谈话结束后关好门回到电话机旁继续通话回到电话机旁继续通话通话结束通话结束后放下电话后放下电话回到房间从做记号处继续看书。回到
2、房间从做记号处继续看书。这是一个典型的这是一个典型的中断现象中断现象,即正常的工作过程被某个,即正常的工作过程被某个突发突发事件事件(内部的或外部的)打断。发生中断后执行的另一工作仍(内部的或外部的)打断。发生中断后执行的另一工作仍然可能被新的时间打断(然可能被新的时间打断(中断嵌套中断嵌套)。)。分析分析:某一特定时刻有:某一特定时刻有多项任务多项任务需要一个人(需要一个人(CPU)做,)做,但又不能同时做多项任务,只能采取中断方式但又不能同时做多项任务,只能采取中断方式“穿插完成穿插完成”。第第5章章 中断系统中断系统 中断的基本概念中断的基本概念所谓中断是指所谓中断是指CPU对对系统中系
3、统中或或系统外系统外发生的某个事件的一发生的某个事件的一种响应过程,即种响应过程,即CPU暂时停止暂时停止现行程序的执行,而现行程序的执行,而自动转去执自动转去执行行预先安排好的处理该事件的服务子程序。当处理结束后,再预先安排好的处理该事件的服务子程序。当处理结束后,再返回到被暂停程序的返回到被暂停程序的断点断点处,处,继续执行继续执行原来的程序。实现这种原来的程序。实现这种中断功能的硬件系统和软件系统统称为中断功能的硬件系统和软件系统统称为中断系统中断系统。中断系统是计算机的重要组成部分。实时控制、故障自动中断系统是计算机的重要组成部分。实时控制、故障自动处理时往往用到中断系统,计算机与外部
4、设备间传送数据及实处理时往往用到中断系统,计算机与外部设备间传送数据及实现人机联系也常常采用中断方式。现人机联系也常常采用中断方式。5.1 中断控制方式中断控制方式 中断的基本概念中断的基本概念在中断系统中,通常将在中断系统中,通常将CPU正常运行的程序称为正常运行的程序称为主程序主程序,把引起中断的设备或事件称为把引起中断的设备或事件称为中断源中断源。由中断源向。由中断源向CPU所发出所发出的请求中断的信号称为的请求中断的信号称为中断请求信号中断请求信号,CPU接受中断申请终止接受中断申请终止现行程序而转去执行中断服务程序称为现行程序而转去执行中断服务程序称为中断响应中断响应,服务于中断,服
5、务于中断事件的程序称为事件的程序称为中断服务程序中断服务程序,也称为,也称为中断处理程序中断处理程序。现行程序被中断的地方称为现行程序被中断的地方称为断点断点,执行完中断服务程序后,执行完中断服务程序后返回至源程序断点处称为返回至源程序断点处称为中断返回中断返回,系统处理中断的整个过程,系统处理中断的整个过程称为称为中断中断。5.1 中断控制方式中断控制方式 引进中断的优点引进中断的优点 分时操作分时操作:计算机与外部设备交换信息时,存在着高速计算机与外部设备交换信息时,存在着高速CPU和低速外和低速外设之间处理速度的矛盾。若采用软件查询方式,则不但占用了设之间处理速度的矛盾。若采用软件查询方
6、式,则不但占用了CPU操作时间,而且响应速度慢。中断功能正好解决了这个矛操作时间,而且响应速度慢。中断功能正好解决了这个矛盾。每当外设做完一件事后,就发出中断申请,请求盾。每当外设做完一件事后,就发出中断申请,请求CPU中断中断其正在执行的程序,转去执行中断服务程序。中断处理完成后,其正在执行的程序,转去执行中断服务程序。中断处理完成后,CPU恢复执行主程序,外设仍然继续工作。这样,恢复执行主程序,外设仍然继续工作。这样,CPU就可以就可以同时命令多个外设(如键盘、打印机等)同时工作,从而提高同时命令多个外设(如键盘、打印机等)同时工作,从而提高CPU的工作效率。的工作效率。5.1 中断控制方
7、式中断控制方式 引进中断的优点引进中断的优点 实时处理实时处理:在实时控制中,现场的各个参数随时间和现场情况不断变在实时控制中,现场的各个参数随时间和现场情况不断变化。有了中断功能,外界的这些变化量可根据要求随时向化。有了中断功能,外界的这些变化量可根据要求随时向CPU发中断请求,要求发中断请求,要求CPU及时处理,这种效果是查询方式无法做及时处理,这种效果是查询方式无法做到的。到的。 故障处理故障处理:计算机在运行过程中,难免会出现一些无法预料的故障,计算机在运行过程中,难免会出现一些无法预料的故障,如存储出错、运算溢出和电源突跳等,有了中断功能,当出现如存储出错、运算溢出和电源突跳等,有了
8、中断功能,当出现上述故障情况时,上述故障情况时,CPU就可以及时转去执行故障处理程序,自就可以及时转去执行故障处理程序,自行处理故障而无需停机。行处理故障而无需停机。5.1 中断控制方式中断控制方式 51单片机中断源单片机中断源 外部设备中断源外部设备中断源计算机的输入计算机的输入/输出设备,如键盘、磁盘驱动器、打印机等,输出设备,如键盘、磁盘驱动器、打印机等,可通过接口电路向可通过接口电路向CPU申请中断。申请中断。 故障源故障源故障源是产生故障信息的来源。它作为中断源,可以使故障源是产生故障信息的来源。它作为中断源,可以使CPU以中断方式对已经发生的故障做及时处理。以中断方式对已经发生的故
9、障做及时处理。计算机的故障源有内部和外部之分。内部故障源一般是指计算机的故障源有内部和外部之分。内部故障源一般是指执行指令时产生的错误情况,如除法中除以零,这种故障也称执行指令时产生的错误情况,如除法中除以零,这种故障也称为内部软件中断;外部中断源主要有电源掉电等情况,当电源为内部软件中断;外部中断源主要有电源掉电等情况,当电源掉电而将至一定数值时,即发出中断请求,由计算机中断系统掉电而将至一定数值时,即发出中断请求,由计算机中断系统自动响应,并进行相应处理。自动响应,并进行相应处理。5.1 中断控制方式中断控制方式 51单片机中断源单片机中断源 控制对象中断源控制对象中断源计算机做实时控制时
10、,被控对象常常用作中断源。例如:计算机做实时控制时,被控对象常常用作中断源。例如:电压、电流、温度等超过其上限或下限时,以及继电器、开关电压、电流、温度等超过其上限或下限时,以及继电器、开关闭合与断开时,都可以作为中断源向闭合与断开时,都可以作为中断源向CPU申请中断。申请中断。 定时定时/ /计数脉冲中断源计数脉冲中断源定时器定时器/计数器脉冲中断也有内部和外部之分。内部定时中计数器脉冲中断也有内部和外部之分。内部定时中断是由定时器断是由定时器/计数器溢出而自动产生的;外部计数中断则是由计数器溢出而自动产生的;外部计数中断则是由外部脉冲通过外部脉冲通过CPU的中断请求输入端引起的。的中断请求
11、输入端引起的。5.1 中断控制方式中断控制方式 中断系统需解决的基本问题中断系统需解决的基本问题 中断源中断源:中断请求信号的来源。包括中断请求信号的产生及该信号中断请求信号的来源。包括中断请求信号的产生及该信号怎样被怎样被CPU有效地识别。而且要求中断请求信号产生一次,只有效地识别。而且要求中断请求信号产生一次,只能被能被CPU接收和处理一次,即不能一次中断申请被接收和处理一次,即不能一次中断申请被CPU多次响多次响应。这就涉及到中断请求信号的及时撤除问题。应。这就涉及到中断请求信号的及时撤除问题。 中断响应与返回中断响应与返回:CPU采集到中断请求信号后,怎样转向特定的中断服务子采集到中断
12、请求信号后,怎样转向特定的中断服务子程序及执行完中断服务子程序怎样返回被中断的程序继续正确程序及执行完中断服务子程序怎样返回被中断的程序继续正确地执行。中断响应与返回的过程中涉及到地执行。中断响应与返回的过程中涉及到CPU响应中断的条件、响应中断的条件、现场保护等问题。现场保护等问题。5.1 中断控制方式中断控制方式 中断系统需解决的基本问题中断系统需解决的基本问题 优先级控制(优先级排队)优先级控制(优先级排队):一个计算机应用系统,特别是计算机实时测控应用系统,一个计算机应用系统,特别是计算机实时测控应用系统,往往有多个中断源,各中断源所要求的处理具有不同的轻重、往往有多个中断源,各中断源
13、所要求的处理具有不同的轻重、缓急程度。与人处理问题的思路一样,希望重要紧急的事件先缓急程度。与人处理问题的思路一样,希望重要紧急的事件先处理,而且如果当前处于正在处理某个事件的过程中,有更重处理,而且如果当前处于正在处理某个事件的过程中,有更重要、更紧急的事件到来,就应当暂停当前事件的处理,转去处要、更紧急的事件到来,就应当暂停当前事件的处理,转去处理新事件。这就是中断系统理新事件。这就是中断系统优先级控制优先级控制所要解决的问题。中断所要解决的问题。中断优先级的控制形成了优先级的控制形成了中断嵌套中断嵌套。5.1 中断控制方式中断控制方式 中断系统需解决的基本问题中断系统需解决的基本问题 中
14、断嵌套中断嵌套:当当CPU响应某个中断请求而正在进行中断处理时,若有更响应某个中断请求而正在进行中断处理时,若有更高优先级别的中断源发出中断申请,则高优先级别的中断源发出中断申请,则CPU将自动中断正在执将自动中断正在执行的中断服务程序,并保存该中断程序断点(类似于子程序嵌行的中断服务程序,并保存该中断程序断点(类似于子程序嵌套),转而去执行高级别中断的中断服务程序;当高级别中断套),转而去执行高级别中断的中断服务程序;当高级别中断处理完毕后,再继续执行被中断的中断处理程序。这个过程被处理完毕后,再继续执行被中断的中断处理程序。这个过程被称为中断嵌套。称为中断嵌套。只有高级别的中断能中断当前的
15、中断服务程序,同级别或只有高级别的中断能中断当前的中断服务程序,同级别或者低级别的中断不能中断当前的中断服务程序。者低级别的中断不能中断当前的中断服务程序。5.1 中断控制方式中断控制方式 51单片机中断源单片机中断源 外部中断外部中断 外部中断是指从单片机外部引脚外部中断是指从单片机外部引脚INT0INT0、INT1INT1输入输入中断请求信号的中断,即外部中断源有两个。输入中断请求信号的中断,即外部中断源有两个。输入/ /输出的中断请求、实时事件的中断请求、掉电和设备输出的中断请求、实时事件的中断请求、掉电和设备故障的中断请求都可以作为外部中断源,从引脚故障的中断请求都可以作为外部中断源,
16、从引脚INT0INT0、INT1INT1输入。输入。 外部中断请求有两种触发方式:电平触发及跳变外部中断请求有两种触发方式:电平触发及跳变( (边沿边沿) )触发。这两种触发方式可以通过对特殊功能寄触发。这两种触发方式可以通过对特殊功能寄存器存器TCONTCON编程来选择。编程来选择。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 外部中断外部中断 特殊功能寄存器特殊功能寄存器TCON的格式定义如下:的格式定义如下: IT0(IT1):外部中断:外部中断0(或(或1)触发方式控制位。)触发方式控制位。IT0(或(或IT1)被设置为)被设置为“0”,则选择外部
17、中断为,则选择外部中断为电电平触发平触发方式;方式;IT0(或(或IT1)被设置为)被设置为“1”,则选择,则选择外部中断为外部中断为跳变触发跳变触发方式。方式。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 TCON的格式的格式IE0(IE1):外部中断:外部中断0(或外部中断(或外部中断1)的中断请求标志)的中断请求标志位。当位。当IT0(或(或IT1)=0,即电平触发方式时,即电平触发方式时,CPU在每个机在每个机器周期的器周期的S5P2采样采样INTx(x=0,1)。若)。若INTx引脚为低电平,引脚为低电平,将直接触发外部中断。跳变触发方式时,若第
18、一个机器周期采将直接触发外部中断。跳变触发方式时,若第一个机器周期采样到样到INTx引脚为高电平,第二个机器周期采样到引脚为高电平,第二个机器周期采样到INTx引脚引脚为低电平时,由硬件置位为低电平时,由硬件置位IE0(或(或IE1),并以此来向),并以此来向CPU请请求中断。当求中断。当CPU响应中断转向中断服务程序时由硬件将响应中断转向中断服务程序时由硬件将IE0(或或IE1)清零。)清零。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 外部中断外部中断 对于跳变触发的外部中断,对于跳变触发的外部中断,CPU在每个机器周期在每个机器周期都采样都采样INT
19、x。为了保证检测到。为了保证检测到负跳变负跳变,输入到,输入到INTx引脚上的高电平与低电平至少应保持引脚上的高电平与低电平至少应保持1个机器周期。个机器周期。对于电平触发的外部中断,由于对于电平触发的外部中断,由于CPU对对INTx引脚没有引脚没有控制作用,也没有相应的中断请求标志位,因此需要控制作用,也没有相应的中断请求标志位,因此需要外接电路来撤除中断请求信号。外接电路来撤除中断请求信号。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 外部中断示例外部中断示例 外部中断请求信号通过外部中断请求信号通过D触发器加到单片机引脚上。当外触发器加到单片机引脚上
20、。当外部中断请求信号使部中断请求信号使D触发器的触发器的CLK端发生正跳变时,由于端发生正跳变时,由于D端接地,端接地,Q端输出端输出0,向单片机发出中断请求。,向单片机发出中断请求。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 外部中断示例外部中断示例CPU响应中断后,利用一根口线,如响应中断后,利用一根口线,如P1.0作应答线,在作应答线,在中断服务程序中可用如下两条指令中断服务程序中可用如下两条指令ANLP1,#0FEHORLP1,#01H来来撤除中断请求撤除中断请求。第一条指令使。第一条指令使P1.0为为0,而,而P1口其它各位的口其它各位的状态不
21、变。由于状态不变。由于P1.0与直接置与直接置1端端S相连,故相连,故D触发器触发器Q=1,撤除了中断请求信号撤除了中断请求信号。第二条指令将。第二条指令将P1.0变成变成1,从而使,从而使S=1,使以后产生的新的外部中断请求信号又能向单片机申请中断。,使以后产生的新的外部中断请求信号又能向单片机申请中断。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 内部中断内部中断内部中断是单片机芯片内部产生的中断。内部中断是单片机芯片内部产生的中断。MCS-51单片机单片机(51子系列)的内部中断有定时器子系列)的内部中断有定时器/计数器计数器T0、T1的溢出中断,的
22、溢出中断,串行口的发送串行口的发送/接收中断。接收中断。当定时器当定时器/计数器计数器T0、T1的定时(或计数)溢出时由硬件自的定时(或计数)溢出时由硬件自动置位动置位TCON的的TF0或或TF1位,同时向位,同时向CPU申请中断。申请中断。CPU响响应中断而转向中断服务程序时,由应中断而转向中断服务程序时,由硬件硬件自动将自动将TF0或或TF1清零,清零,即即CPU响应响应T0和和T1中断后能中断后能自动撤除自动撤除中断请求信号。中断请求信号。5.2 MCS-51单片机的中断系统单片机的中断系统 51单片机中断源单片机中断源 内部中断内部中断当串行口发送完或接收完一帧信息,由接口硬件自动置位
23、当串行口发送完或接收完一帧信息,由接口硬件自动置位SCON的的TI或或RI,以此向,以此向CPU申请中断。申请中断。CPU响应中断后,响应中断后,接口硬件不能自动将接口硬件不能自动将TI或或RI清零,即清零,即CPU响应中断后不能响应中断后不能自动撤除中断请求信号,需用户采用自动撤除中断请求信号,需用户采用软件软件的方法将的方法将TI或或RI清清零,来零,来撤除撤除中断请求信号。中断请求信号。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断允许控制(中断允许控制(IE)MCS-51单片机中没有专设的开中断和关中断指令,对各单片机中没有专设的开中断和关中断指令,对各中
24、断源的中断开放或关闭是由内部的中断允许寄存器中断源的中断开放或关闭是由内部的中断允许寄存器IE的各位的各位来控制的。来控制的。IE各位的定义如下:各位的定义如下:EA:中断允许总控位中断允许总控位。EA=0,屏蔽所有的中断请求;,屏蔽所有的中断请求;EA=1,开放中断。,开放中断。EA的作用是使中断允许形成两级控制。即的作用是使中断允许形成两级控制。即各中断源首先受各中断源首先受EA位的控制;其次还要受各中断源自己的中断位的控制;其次还要受各中断源自己的中断允许总控位控制。允许总控位控制。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断允许控制(中断允许控制(IE)
25、ET2:定时器:定时器/计数器计数器T2的溢出中断允许位,只用于的溢出中断允许位,只用于52子系子系列,列,51子系列无此位。子系列无此位。ET2=0,禁止,禁止T2中断;中断;ET2=1,允许,允许T2中断。中断。ES:串行口中断允许位。:串行口中断允许位。ES=0,禁止串行口中断;,禁止串行口中断;ES=1允许串行口中断。允许串行口中断。ET1:定时器:定时器/计数器计数器T1的溢出中断允许位。的溢出中断允许位。T1=0,禁止,禁止T1中断;中断;ET1=1,允许,允许T1中断。中断。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断允许控制(中断允许控制(IE)
26、EX1:外部中断:外部中断1的中断允许位。的中断允许位。EX1=0,禁止外部中断,禁止外部中断1中断;中断;EX1=1,允许外部中断,允许外部中断1中断。中断。ET0:定时器:定时器/计数器计数器T0的溢出中断允许位。的溢出中断允许位。ET0=0,禁止,禁止T0中断;中断;ET0=1,允许,允许T0中断。中断。EX0:外部中断:外部中断0的中断允许位。的中断允许位。EX0=0,禁止外部中断,禁止外部中断0中断;中断;EX0=1允许外部中断允许外部中断0中断。中断。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断优先级控制中断优先级控制51单片机的中断源有单片机的中断
27、源有两个中断优先级两个中断优先级,可实现二级中断嵌,可实现二级中断嵌套。中断系统遵循如下三条规则:套。中断系统遵循如下三条规则:(1)正在进行的中断过程不能被新的)正在进行的中断过程不能被新的同级或低优先级同级或低优先级的中的中断请求所中断,一直到该中断服务程序结束,返回了主程序且断请求所中断,一直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,执行了主程序中的一条指令后,CPU才响应新的中断请求。才响应新的中断请求。(2)正在进行的低优先级中断服务程序能被高优先级中断)正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现请求所中断,实现两级两级中断中断嵌套嵌套。(3
28、)CPU同时接收到几个中断请求时,首先响应优先级最同时接收到几个中断请求时,首先响应优先级最高的中断请求。高的中断请求。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断优先级控制中断优先级控制中断优先级控制规则中前两条是靠中断系统中的两个中断优先级控制规则中前两条是靠中断系统中的两个优先优先级状态触发器级状态触发器来保证的。这两个触发器分别用来指示来保证的。这两个触发器分别用来指示CPU是否是否正在执行高优先级及低优先级的中断服务程序。当某个中断得正在执行高优先级及低优先级的中断服务程序。当某个中断得到响应时,由到响应时,由硬件硬件根据其优先级将相应的一个优先级状态
29、触发根据其优先级将相应的一个优先级状态触发器置器置1。若高优先级的状态触发器为。若高优先级的状态触发器为1,则屏蔽所有后来的中断,则屏蔽所有后来的中断请求;若低优先级的状态触发器为请求;若低优先级的状态触发器为1,则屏蔽后来的同一优先,则屏蔽后来的同一优先级的中断请求。当中断相应结束后,对应的优先级状态触发器级的中断请求。当中断相应结束后,对应的优先级状态触发器被硬件自动清零。被硬件自动清零。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断优先级寄存器中断优先级寄存器IPPT2:定时器:定时器/计数器计数器T2的中断优先级控制位,只用于的中断优先级控制位,只用于52
30、子子系列。系列。PS:串行口的中断优先级控制位。:串行口的中断优先级控制位。PT1:定时器:定时器/计数器计数器T1的中断优先级控制位。的中断优先级控制位。PX1:外部中断:外部中断1的中断优先级控制位。的中断优先级控制位。PT0:定时器:定时器/计数器计数器T0的中断优先级控制位。的中断优先级控制位。PX0:外部中断:外部中断0的中断优先级控制位。的中断优先级控制位。5.2 MCS-51单片机的中断系统单片机的中断系统 中断控制中断控制 中断优先级控制中断优先级控制由于由于51单片机有多个中断源,但优先级只有两个,所以会单片机有多个中断源,但优先级只有两个,所以会有多个中断源处于同一优先级中
31、。在有多个中断源处于同一优先级中。在同一级中同一级中的中断源的中断源默认默认的的优先级由系统按下列顺序确定。优先级由系统按下列顺序确定。5.2 MCS-51单片机的中断系统单片机的中断系统中断源同级的中断优先级外部中断0定时器/计数器0中断外部中断1定时器/计数器1中断串行口中断定时器/计数器2中断最高最低 中断控制系统逻辑结构示意图中断控制系统逻辑结构示意图 5.2 MCS-51单片机的中断系统单片机的中断系统 中断响应的条件中断响应的条件 单片机响应中断的条件为中断源有请求(中断允许寄存器单片机响应中断的条件为中断源有请求(中断允许寄存器IE相应位置相应位置1),且),且CPU开中断(即开
32、中断(即EA=1)。这样,在每个)。这样,在每个机器周期的机器周期的S5P2期间,对所有中断源按用户设置的优先级和期间,对所有中断源按用户设置的优先级和内部规定的优先级进行顺序检测,并可在内部规定的优先级进行顺序检测,并可在S6期间找到所有有期间找到所有有效的中断请求。效的中断请求。5.2 MCS-51单片机的中断系统单片机的中断系统 中断响应的条件中断响应的条件 如有中断请求,且满足下列条件,则在下一个机器周期的如有中断请求,且满足下列条件,则在下一个机器周期的S1期间响应中断,否则将丢弃中断采样的结果。期间响应中断,否则将丢弃中断采样的结果。 无同级或高级中断正在处理。无同级或高级中断正在
33、处理。 现行指令执行到最后现行指令执行到最后1 1个机器周期且已结束。个机器周期且已结束。 若现行指令为若现行指令为RETI或访问或访问IE、IP的指令时,执行完该指的指令时,执行完该指令且紧随其后的另一条指令也已执行完毕。令且紧随其后的另一条指令也已执行完毕。5.2 MCS-51单片机的中断系统单片机的中断系统 中断响应过程中断响应过程CPU响应中断后硬件将响应中断后硬件将自动执行自动执行如下操作:如下操作:(1)根据中断请求源的优先级高低,对相应的优先级状态)根据中断请求源的优先级高低,对相应的优先级状态触发器置触发器置1。(2)保护断点,即把程序计数器)保护断点,即把程序计数器PC的内容
34、压入堆栈保存。的内容压入堆栈保存。(3)清内部硬件可清除的中断请求标志位()清内部硬件可清除的中断请求标志位(IE0、IE1、TF0、TF1)。)。(4)把被响应的中断服务程序)把被响应的中断服务程序入口地址入口地址送入送入PC,从而转入,从而转入相应的中断服务程序执行。相应的中断服务程序执行。5.2 MCS-51单片机的中断系统单片机的中断系统 中断入口地址中断入口地址 各各中断源对应的中断服务程序入口地址如下表所示:中断源对应的中断服务程序入口地址如下表所示:CPU响应中断后,将从上述入口地址开始执行相应的中断响应中断后,将从上述入口地址开始执行相应的中断服务程序。中断服务程序的最后一条指
35、令必须是中断返回指令服务程序。中断服务程序的最后一条指令必须是中断返回指令RETI。5.2 MCS-51单片机的中断系统单片机的中断系统中断源中断入口地址外部中断外部中断0定时器定时器/计数器计数器0外部中断外部中断1定时器定时器/计数器计数器1串行口中断串行口中断定时器定时器/计数器计数器2(52子系列)子系列)0003H000BH0013H001BH0023H002BH 中断响应过程中断响应过程 中断服务程序的最后一条指令必须是中断返回指令中断服务程序的最后一条指令必须是中断返回指令RETI。CPU执行该指令时,先将相应的优先级状态触发器清执行该指令时,先将相应的优先级状态触发器清0,然后
36、,然后从堆栈中弹出断点地址到从堆栈中弹出断点地址到PC,从而返回至断点处继续原程序的,从而返回至断点处继续原程序的执行过程。执行过程。51单片机中断响应后,仅保护断点信息而不单片机中断响应后,仅保护断点信息而不保护现场保护现场信息,信息,如如ACC、工作寄存器、工作寄存器Rn、PSW等存储器的值,且不能自动清等存储器的值,且不能自动清除串行口中断标志除串行口中断标志TI和和RI,也无法清除由电平触发的外部中,也无法清除由电平触发的外部中断请求信号。所以用户在编制中断服务程序时需要格外注意。断请求信号。所以用户在编制中断服务程序时需要格外注意。5.2 MCS-51单片机的中断系统单片机的中断系统
37、 中断响应时间中断响应时间 所谓中断响应时间是指从所谓中断响应时间是指从CPU检测到中断请求信号到转入检测到中断请求信号到转入中断服务程序入口所需要的机器周期数。中断服务程序入口所需要的机器周期数。MCS-51单片机响应中断的单片机响应中断的最短最短时间为时间为3个个机器周期。若机器周期。若CPU检测到中断请求信号时间正好是一条指令的最后一个机器检测到中断请求信号时间正好是一条指令的最后一个机器周期,则不需等待就可以立即响应。周期,则不需等待就可以立即响应。响应中断的过程就是由内部硬件执行一条长调用指令,需响应中断的过程就是由内部硬件执行一条长调用指令,需要要2个机器周期,加上检测需要个机器周
38、期,加上检测需要1个机器周期,一共需要个机器周期,一共需要3个机个机器周期即可执行中断服务程序器周期即可执行中断服务程序。5.2 MCS-51单片机的中断系统单片机的中断系统 中断响应时间中断响应时间 中断响应的中断响应的最长最长时间由下列情况所决定:若中断检测时正时间由下列情况所决定:若中断检测时正在执行在执行RETI或访问或访问IE或或IP指令的第一个机器周期,这样包指令的第一个机器周期,这样包括检测在内需要括检测在内需要2个机器周期个机器周期(以上三条指令均需两个机器周期以上三条指令均需两个机器周期);若紧接着要执行的指令恰好是执行时间最长的乘;若紧接着要执行的指令恰好是执行时间最长的乘
39、/除法指令,除法指令,其执行时间均为其执行时间均为4个机器周期;再用个机器周期;再用2个机器周期执行一条长调个机器周期执行一条长调用指令才转入中断服务程序。所以共需用指令才转入中断服务程序。所以共需8个个机器周期。机器周期。其它情况下的中断响应时间一般为其它情况下的中断响应时间一般为38个个机器周期。机器周期。5.2 MCS-51单片机的中断系统单片机的中断系统 中断函数定义中断函数定义C51的中断服务程序是一种特殊的程序,其定义如下:的中断服务程序是一种特殊的程序,其定义如下:void函数名(函数名(void)interruptnusingm函数体语句函数体语句;这里的这里的interrup
40、t和和using是为编写是为编写C51中断服务程序而引中断服务程序而引入的关键字,入的关键字,interrupt表示该函数是一个中断服务程序,其表示该函数是一个中断服务程序,其后的后的n是指该中断服务程序对应于哪一个中断源;是指该中断服务程序对应于哪一个中断源;using用于用于指定该中断服务程序要使用的工作寄存器组编号,指定该中断服务程序要使用的工作寄存器组编号,m的取值范的取值范围为围为03。若不使用关键字若不使用关键字using,则编译系统会自动给该服务函数,则编译系统会自动给该服务函数分配寄存器组,并将当前工作寄存器组的分配寄存器组,并将当前工作寄存器组的8个寄存器压入堆栈。个寄存器压
41、入堆栈。用户程序中不允许任何程序调用中断服务程序。用户程序中不允许任何程序调用中断服务程序。5.3 中断系统的中断系统的C51编程编程 中断函数定义中断函数定义C51的中断源及其中断编号如下:的中断源及其中断编号如下:5.3 中断系统的中断系统的C51编程编程中断源中断编号外部中断0定时器/计数器0中断外部中断1定时器/计数器1中断串行口中断定时器/计数器2中断012345 中断函数定义中断函数定义编写中断函数时,应注意以下几点:编写中断函数时,应注意以下几点:(1)中断函数不带任何参数,否则会导致编译出错。)中断函数不带任何参数,否则会导致编译出错。(2)中断函数不能有返回值,所以函数类型应
42、为)中断函数不能有返回值,所以函数类型应为void。(3)中断函数必须由中断源触发而自动调用,不得直接调)中断函数必须由中断源触发而自动调用,不得直接调用,因此也不用提前声明。用,因此也不用提前声明。(4)中断函数要精简,避免因执行时间过长影响其它中断)中断函数要精简,避免因执行时间过长影响其它中断的响应。的响应。5.3 中断系统的中断系统的C51编程编程 中断举例中断举例例例1:用按钮控制指示灯的:用按钮控制指示灯的“亮灭亮灭”状态。在单片机状态。在单片机INT0引引脚接一个按钮,脚接一个按钮,P1.0引脚上接一个发光二极管。每按一次按钮,引脚上接一个发光二极管。每按一次按钮,则发光二极管的
43、亮灭状态转换一次。则发光二极管的亮灭状态转换一次。每次按下按钮时,会在单片每次按下按钮时,会在单片机的机的INT0引脚上产生一个负脉冲,引脚上产生一个负脉冲,如果将单片机外部中断如果将单片机外部中断0的触发方的触发方式设为边沿跳变触发,则单片机检式设为边沿跳变触发,则单片机检测到这个负脉冲之后就会调用外部测到这个负脉冲之后就会调用外部中断中断0服务程序。服务程序。5.3 中断系统的中断系统的C51编程编程 中断举例中断举例例例1:用按钮控制指示灯的:用按钮控制指示灯的“亮灭亮灭”状态。状态。#include/寄存器声明头文件寄存器声明头文件sbitp1_0=P10;/发光二极管控制引脚位定义发
44、光二极管控制引脚位定义voidINT0_srv(void)interrupt0using1/外部中断外部中断0处理程序处理程序p1_0=!p1_0;/二极管状态翻转二极管状态翻转voidmain()p1_0=0;IT0=1;/外部中断外部中断0为边沿触发方式为边沿触发方式EA=1;/中断允许中断允许EX0=1;/外部中断外部中断0允许允许while(1);5.3 中断系统的中断系统的C51编程编程 中断举例中断举例例例1:用按钮控制指示灯的:用按钮控制指示灯的“亮灭亮灭”状态。状态。仿真运行结果显示,每当用户按下按钮时,二极管出现一仿真运行结果显示,每当用户按下按钮时,二极管出现一次亮灭状态的
45、切换。次亮灭状态的切换。如果将上述程序中的如果将上述程序中的“IT0=1”语句修改为语句修改为“IT0=0”,则当按下按钮时,二极管会出现,则当按下按钮时,二极管会出现连续亮灭连续亮灭的状态切换现象。的状态切换现象。请读者独立思考其原因。请读者独立思考其原因。5.3 中断系统的中断系统的C51编程编程 中断举例中断举例例例2:如下图所示,:如下图所示,P0口连接了口连接了8个发光二极管,个发光二极管,INT1引脚上引脚上接了一个按键接了一个按键S1,要求每次按键动作时均能改变,要求每次按键动作时均能改变8个发光二级个发光二级管的亮灭状态。管的亮灭状态。5.3 中断系统的中断系统的C51编程编程
46、 中断举例中断举例例例2:C51程序如下。程序如下。#include#defineLEDP0sbitKEY=P33;bitflag=0;voiddelay(unsignedcharn)/延时子函数延时子函数;unsignedchara;for(a=0;an;a+);main(void)/主程序主程序IT1=1;/设置边沿触发方式设置边沿触发方式EA=1;EX1=1;LED=0xff;/发光二极管初值(全灭)发光二极管初值(全灭)5.3 中断系统的中断系统的C51编程编程 中断举例中断举例例例2:C51程序如下。程序如下。while(1)/主程序内部循环体主程序内部循环体if(flag=1)/有
47、外部中断的按键有外部中断的按键delay(100);/延迟一段时间,判断是否为抖动延迟一段时间,判断是否为抖动if(KEY=0)/还有按键,说明不是抖动还有按键,说明不是抖动while(!KEY);/等待按键松开等待按键松开LED=LED;/改变发光二级管的亮灭(全亮)改变发光二级管的亮灭(全亮)flag=0;/上次外部中断已经处理完毕,清除该变量上次外部中断已经处理完毕,清除该变量EX1=1;/再次开放外部中断再次开放外部中断5.3 中断系统的中断系统的C51编程编程 中断举例中断举例例例2:C51程序如下。程序如下。voidint1(void)interrupt2/外部中断外部中断1服务程
48、序服务程序flag=1;/有按键按下则设置中断标志变量有按键按下则设置中断标志变量flag为为1EX1=0;/屏蔽外部中断屏蔽外部中断1,暂时不允许再次产生外部中断,暂时不允许再次产生外部中断15.3 中断系统的中断系统的C51编程编程 利用查询法扩展外部中断源利用查询法扩展外部中断源在外部中断源比较多时,可以在在外部中断源比较多时,可以在51单片机的一个外部中断单片机的一个外部中断请求端请求端INT0(或或INT1),利用),利用“线与线与”的方式连接多个外部的方式连接多个外部中断,无论哪个中断源中断,无论哪个中断源发出中断请求发出中断请求(低电平有效),都会触(低电平有效),都会触发发IN
49、T0(或(或INT1)中断,这些中断源同时分别接到单片机输)中断,这些中断源同时分别接到单片机输入端口的各个引脚,然后在入端口的各个引脚,然后在INT0(或(或INT1)的中断服务程)的中断服务程序中采用序中采用查询法查询法顺序检索引起中断的中断源。当对应的中断源顺序检索引起中断的中断源。当对应的中断源被服务后(中断服务程序被执行),该中断源应撤销其中断请被服务后(中断服务程序被执行),该中断源应撤销其中断请求(将电平恢复为高电平)。求(将电平恢复为高电平)。注意:软件的注意:软件的查询顺序查询顺序决定了扩展的多个中断的决定了扩展的多个中断的优先级优先级顺顺序。序。5.4 外部中断的扩充外部中
50、断的扩充 利用查询法扩展外部中断源利用查询法扩展外部中断源例:例:使用使用按钮按钮来模拟来模拟外部中断源外部中断源。共扩展了。共扩展了4个外部中断,当个外部中断,当某个外部中断源有中断请求时,在中断服务程序中,会将与其某个外部中断源有中断请求时,在中断服务程序中,会将与其对应的发光二极管点亮。对应的发光二极管点亮。5.4 外部中断的扩充外部中断的扩充 利用查询法扩展外部中断源利用查询法扩展外部中断源例:例:使用使用按钮按钮来模拟来模拟外部中断源外部中断源。C51程序如下:程序如下:#include/头文件头文件sbitint0=P20; /扩展中断扩展中断1位定义位定义sbitint1=P21
51、;/扩展中断扩展中断2位定义位定义sbitint2=P22;/扩展中断扩展中断3位定义位定义sbitint3=P23;/扩展中断扩展中断4位定义位定义sbitled0=P10;/发光二极管发光二极管1位定义位定义sbitled1=P11;/发光二极管发光二极管2位定义位定义sbitled2=P12;/发光二极管发光二极管3位定义位定义sbitled3=P13;/发光二极管发光二极管4位定义位定义5.4 外部中断的扩充外部中断的扩充 利用查询法扩展外部中断源利用查询法扩展外部中断源例:例:使用使用按钮按钮来模拟来模拟外部中断源外部中断源。C51程序如下:程序如下:voidINT0_srv(voi
52、d)interrupt0using1/中断服务程序中断服务程序P1=0xff;/熄灭所有发光二极管熄灭所有发光二极管;if(int0=0)led0=0;/扩展中断扩展中断1处理处理if(int1=0)led1=0;/扩展中断扩展中断2处理处理if(int2=0)led2=0;/扩展中断扩展中断3处理处理if(int3=0)led3=0;/扩展中断扩展中断4处理处理voidmain()/主程序主程序IT0=1;/外部中断外部中断0为边沿触发为边沿触发EA=1;/开总中断开总中断EX0=1;/外部中断外部中断0允许允许while(1);5.4 外部中断的扩充外部中断的扩充 利用定时器扩展外部中断源
53、利用定时器扩展外部中断源方法:首先把定时器方法:首先把定时器/计数器设置成计数器设置成计数方式计数方式,并,并预置满值预置满值(再来一个脉冲则计数器溢出),然后把外部中断源输入到(再来一个脉冲则计数器溢出),然后把外部中断源输入到P3.4口或口或P3.5口(计数器外部脉冲输入端口(计数器外部脉冲输入端T0或或T1),这样),这样就可以利用定时器就可以利用定时器/计数器(内部中断源)作为单片机的外部中计数器(内部中断源)作为单片机的外部中断了。断了。注意:注意:这种方法的中断服务的入口地址为这种方法的中断服务的入口地址为000BH或或001BH。为了使每出现一个从高到低的脉冲都产生一个中断,。为
54、了使每出现一个从高到低的脉冲都产生一个中断,可以把定时器可以把定时器/计数器设置计数器设置为为8位自动重装位自动重装方式(方式方式(方式2),且),且其初值和重装值均设为其初值和重装值均设为0FFH。5.4 外部中断的扩充外部中断的扩充 利用定时器扩展外部中断源利用定时器扩展外部中断源C51程序如下:程序如下:#includevoidtimer0_int(void)interrupt1/T/C0中断处理程序中断处理程序.voidtimer1_int(void)interrupt3/T/C1中断处理程序中断处理程序.5.4 外部中断的扩充外部中断的扩充 利用定时器扩展外部中断源利用定时器扩展外部
55、中断源C51程序如下:程序如下:voidmain()/主程序主程序.TMOD=0x66; /两个定时两个定时/计数器都设置为计数器都设置为8位自动重装模式位自动重装模式TL0=0xFF;/设定重载初值设定重载初值TH0=0xFF;TL1=0xFF;TH1=0xFF;TCON=0x50;/开始计数开始计数IE=0x9F;/中断使能中断使能.5.4 外部中断的扩充外部中断的扩充 单片机的单片机的P0口接了口接了8个发光二极管,要求使用定个发光二极管,要求使用定时器时器T0中断实现流水灯控制,流水灯频率为每中断实现流水灯控制,流水灯频率为每0.5秒秒钟更替一次(假设单片机外接钟更替一次(假设单片机外
56、接11.0592MHz的晶振)。的晶振)。5.5 定时器中断编程实例定时器中断编程实例 单片机的单片机的P0口接了口接了8个发光二极管,要求使用定个发光二极管,要求使用定时器时器T0中断实现流水灯控制,流水灯频率为每中断实现流水灯控制,流水灯频率为每0.5秒秒钟更替一次(假设单片机外接钟更替一次(假设单片机外接11.0592MHz的晶振)。的晶振)。分析分析:使用定时器使用定时器T0中断初始化包括以下几个方面:中断初始化包括以下几个方面:(1)确定计数初值以及定时器工作方式,即配置)确定计数初值以及定时器工作方式,即配置TMOD;(2)开放定时器中断,即设定)开放定时器中断,即设定EA=1,E
57、T0=1;(3)启动定时器)启动定时器T0工作,即工作,即TR0=1;(4)由由于于定定时时器器/计计数数器器方方式式0或或方方式式1下下不不具具有有自自动动重重装装初初值值功能,所以每次中断后必须重新装载计数初值;功能,所以每次中断后必须重新装载计数初值;(5)计数值计数值计算:计算:0.510=0.05s=50ms=50000s50000( (111.059212)=40680考虑语句执行时间:考虑语句执行时间:40680+3=406835.5 定时器中断编程实例定时器中断编程实例 C51程序如下:程序如下:#includeunsignedcharcnt=0;/用于中断次数计数用于中断次数
58、计数unsignedcharled=0xfe;/初始化流水灯初始化流水灯intmain(void)TMOD=0x01; /16位定时方式位定时方式TH0=(65536-46083)/256;/初始化初始化T0的高的高8位位TL0=(65536-46083)%256;/初始化初始化T0的低的低8位位EA=1;/开中断开中断ET0=1;TR0=1;/启动启动T0工作工作while(1);5.5 定时器中断编程实例定时器中断编程实例 C51程序如下:程序如下:voidT0_int(void)interrupt1cnt+;if(cnt=10)/0.5秒钟的时间到了秒钟的时间到了cnt=0;/清除次数统计清除次数统计led=(led1)|1;/更新流水灯数据(末位补更新流水灯数据(末位补1)if(led=0xff)/第第8盏灯亮之后更改为第盏灯亮之后更改为第1盏灯亮盏灯亮led=0xfe;P0=led;/显示流水灯显示流水灯TH0=(65536-46083)/256;/初始化初始化T0的高的高8位位TL0=(65536-46083)%256;/初始化初始化T0的低的低8位位5.5 定时器中断编程实例定时器中断编程实例