1学习情境二AT89S52单片机中断与定时学习目标:了解中断的基本概念、中断的作用及中断请求方式掌握AT89S52单片机中断结构、AT89S52单片机6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法掌握定时/计数器4种工作方式的初始化编程方法学会使用定时器/计数器编写计数、定时应用程序的方法技能目标:会编写中断和定时/计数器初始化程序会计算定时/计数器初值根据项目要求,能够灵活应用中断和定时/计数器的资源任务一中断控制的流水灯第一部分项目要求采用中断方法控制灯的亮灭,由中断服务程序控制I/O口置高,置低,即可控制灯的全亮和全灭。外部中断INT1接按键(KEY),作为中断申请信号,开机后8个发光二极管从左到右流水,产生中断后,8个发光管全亮、全灭,延时一定时间后,再循环。在该项目中,控制发光二极管全亮、全灭,即可采用查询的方法,也可采用申请中断的方法。为了提高CPU的工作效率,采用中断的方法实现以上功能。单片机如何实现中断,中断矢量是什么,这些问题将在相关知识中介绍。第二部分相关知识一、中断的概念为了提高CPU的工作效率以及对实时系统的快速响应,产生了中断控制方式的信息交换。在日常生活中广泛存在着“中断”的例子。例如一个人正在看书,这时电话铃响了,于是他将书放下去接电话。为了在接完电话后继续看书,他必须记下当时的页号,接完电话后,将书取回,从刚才被打断的位置继续往下阅读。由此可见,中断是一个过程。2计算机是这样处理的,当有随机中断请求后,CPU暂停执行现行程序,转去执行中断处理程序,为相应的随机事件服务,处理完毕后CPU恢复执行被暂停的现行程序。在这个过程中,应注意如下几方面:外部或内部的中断请求是随机的,若当前程序允许处理应立即响应;在内存中必须有处理该中断的处理程序;系统怎样能正确地由现行程序转去执行中断处理程序;当中断处理程序执行完毕后怎样能正确地返回。现在再从另一方面分析,整个中断的处理过程就像子程序调用,但是本质的差异是调用的时间是随机的,调用的形式是不同的。因此,是否可以认为处理中断的过程是一种特殊的子程序调用。如图2.1和图2.2所示。中断有两个重要特征:程序切换(控制权的转移)和随机性。图2.1子程序调用过程图2.2中断的执行过程二、AT89S52中断源与中断向量地址中断源就是向CPU发出中断请求的来源。AT89S52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。如图2.3所示。(一)外部中断外部中断包括外部中断0和外部中断1。它们的中断请求信号分别由单片机引脚0INT/P3.2和1INT/P3.3输入。外部中断请求有两种信号方式:电平方式和脉冲方式。电平方式的中断请求信号是低电平有效,即只要在0INT或1INT引脚上出现低电平时,就激活外部中断标志。脉冲方式的中断请求信号则是脉冲的负跳变有效。在这种方式下,在两个相邻机器周期内,0INT或1INT引脚电平状态发生变化,即在第一个机器周期内位为高电平,第二个机器周期内为低电平,就激活外部中断标志。3(二)内部定时和外部计数中断单片机芯片内部有三个定时器/计数器,对脉冲信号进行计数。若脉冲信号为内部振荡器输出的脉冲(机器周期信号),则计数脉冲的个数反映了时间的长短,称为定时方式。若脉冲信号为来自T0/P3.4、T1/P3.5、T2/P1.0的外部脉冲信号,则计数脉冲的个数仅仅反映外部脉冲输入的多少,称为计数方式。当定时器/计数器发生溢出(计算器状态由FFFFH再加1,变为0000H状态),CPU查询到单片机内部硬件自动设置的一个溢出标志位为1时,便激活中断。定时方式中断由单片机芯片内部发生,不需要在芯片外部设置引入端。计数方式中断外部输入脉冲(负跳变)引起,脉冲加在引脚T0/P3.4、T1/P3.5、T2/P1.0端。(三)串行中断图2.3AT89S52的6个中断源串行中断是为串行通信的而需要设置的。当串行口发送完或接收完一帧信息时,单片机内部硬件便自动串行发送或接收中断标志位置1。当CPU查询到这些标志位为1时,便激活串行中断。串行中断是由单片机内部自动发生的,不需要在芯片外设置引入脚。(四)中断矢量地址中断源发出请求,CPU响应中断后便转向中断服务程序。中断源引起的中断服务程序入口地址即为中断矢量地址。中断向量地址是固定的,用户不可改变。中断服务入口地址如表2.1所示。由于两个相邻的中断服务程序入口地址间隔仅为8字节,一般的中断服务程序是容纳不下的。通常是在相应的中断服务程序入口地址中放一条长跳转指令LJMP,这样就可4以转到64KB的任何可用区域了。若在2KB范围内转移,则可存放AJMP指令。由于0003H~002BH是中断矢量地址区,因此,单片机应在程序入口地址0000H处放一条无条件转移指令(如LJMPXXXXH),转到指定的主程序地址。表2.1中断源及其对应的矢量地址中断源中断标志位中断矢量地址外部中断0(0INT)IE00003H定时器0(T0)中断TF0000BH外部中断1(1INT)IE10013H定时器1(T1)中断TF1001BH串行口中断发送中断TI0023H接收中断RI定时器1(T1)中断T2溢出中断TF2002BHT2EX中断EXF2三、中断标志与控制要实现中断,首先中断源要提出中断申请,而中断请求的过程是单片机内部特殊功能寄存器TCON和SCON相关状态位—中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。(一)定时器/计数器控制寄存器TCONTCON主要用于寄存外部中断请求标志、定时器溢出标志、和外部中断触发方式的选择。该寄存器的字节地址是88H,可以位寻址;位地址是88H~8FH。其格式如下:位序D7D6D5D4D3D2D1D0位标志TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H其中与中断有关的控制位共6位:IE0和IE1:外部中断中断请求标志。当CPU采样到0INT(或1INT)端出现有效中断请求(低电平或脉冲下降沿)时,IE0(或IE1)位由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。IT0和ITl:外部中断请求信号触发方式控制标志。IT0(或IT1)=1,0INT(或1INT)信号为脉冲触发方式,脉冲负跳沿5有效;IT0(或IT1)=0,0INT(或1INT)信号电平触发方式,低电平有效。IT0(或IT1)位可由用户软件置1或清0TF0和TFl:定时器/计数器溢出中断请求标志。当定时器0(或定时器1)产生计数溢出时,TF0(或TF1)由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。该标志位也可用于查询方式,即用户程序查询该位状态,判断是否应转向对应的处理程序段。待转如处理程序后,必须由软件清0。(二)串行口控制寄存器SCONSCON的字节地址是98H,可以位寻址;位地址是98H~9FH。其格式如下:位序D7D6D5D4D3D2D1D0位标志SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H其中与中断有关的控制位共2位:TI:串行口发送中断请求标志。当串行口发送完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。RI:串行口接收中断请求标志。当串行口接收完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除RI,必须在中断服务程序中由软件对其清0。应当指出,AT89S52系统复位后,TCON和SCON中各位被复位成“0”状态,应用时要注意各位的初始状态。(三)中断允许控制寄存器IECPU对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器IE控制。中断允许控制寄存器IE对中断的开放和关闭实行两级控制。即有一个总中断位EA。5个中断源还有各自的控制位进行控制。IE寄存器的字节地址是A8H,可以位寻址;位地址是A8H~AFH。其格式如下:位序D7D6D5D4D3D2D1D0位标志EA—ET2ESET1EX1ET0EX0位地址AFAEHADHACHABHAAHA9HA8H6其中与中断有关的控制位共7位:EA:中断允许总控制位。EA=0时,中断总禁止,禁止一切中断;EA=1时,中断总允许,而每个中断源允许与禁止,分别由各自的允许位确定。EX0和EX1:外部中断允许控制位。EX0(或EX1)=0,禁止外部中断0INT(或1INT);EX0(或EX1)=1,允许外部中断0INT(或1INT)。ET0和ET1:定时器中断允许控制位。ET0(ET1)=0,禁止定时器0(或定时器1)中断;ET0(ET1)=1,允许定时器0(或定时器1)中断。ES:串行中断允许控制位。ES=0,禁止串行(TI或RI)中断;ES=1,允许串行(TI或RI)中断。ET2:定时器2中断允许控制位。ET2=0,禁止定时器2(TF2或EXF2)中断;ET2=0,禁止定时器2(TF2或EXF2)中断;在单片机复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。所以,在单片机复位以后,用户必须通过程序中的指令来开放所需中断。(四)中断优先级控制寄存器IPAT89S52单片机具有高、低2个中断优先级。高优先级用“1”表示,低优先级用“0”表示。各中断源的优先级由中断优先级寄存器IP进行设定。IP寄存器字节地址为B8H,可以位寻址;位地址为0BFH~0B8H。寄存器的内容及位地址表示如下:位序D7D6D5D4D3D2D1D0位标志——PT2PSPT1PX1PT0PX0位地址BFBEHBDHBCHBBHBAHB9HB8H其中与中断有关的控制位共6位:PX0:外部中断0(0INT)中断优先级控制位;PT0:定时器0(T0)中断优先级控制位;PX1:外部中断1(1INT)中断优先级控制位;PT1:定时器1(T1)中断优先级控制位;PS:串行口中断优先级控制位;7PT2:定时器2(T2)中断优先级控制位。各中断优先级的设定,可用软件对IP的各位置1或清0,为1时是高优先级,为0时是低优先级。当系统复位后,IP各位均为0,所有中断源设置为低优先级中断。【例2.1】CPU开中断可由以下两条指令来实现:SETB0AFH;EA置1或0RLIE,#80H;按位“或”,EA置1CPU关中断可由以下两条指令来实现:CLR0AFH;EA清0或ANLIE,#7FH;按位“与”,EA清0【例2.2】又如设置外部中断源0INT为高优先级,外部中断源1INT为低优先级,可由下面指令来实现:SETB0B8H;PX0置1CLR0BAH;PXl清0或MOVIP,#000××0×1B;PX0置1,PXl清0四、优先级结构中断优先级只有高低两级,所以在工作过程中必然会有两个或两个以上中断源处于同一中断优先级。若出现这种情况,内部中断系统对各中断源的处理遵循以下两条基本原则:1.低优先级中断可以被高优先级中断所中断,反之不能;2.一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。当CPU同时收到几个同一优先级的中断请求时,CPU将按自然优先级顺序确定应该响应哪个中断请求。其自然优先级排列如下:中断源同级自然优先级外部中断0最高级定时器0中断外部中断1定时器1中断串行口中断定时器2中断最低级【例2.3】设AT89S52的片外中断为高优先级,片内中断为低优先级。试设置IP相应值。解:(1)用字节操作指令MOVIP,#05H或MOV0B8H,#05H8(2)用位操作指令SETBPX0SETBPX1CLRPSCLRPT0CLRPT1五、中断系统的初始化及应用(一)中断系统的初始化AT89S52中断系统是可以通过4个与中断有关的特殊功能寄存器TCON、SCON、IE和IP进行统一管理的。中断系统初始化是指用户对这些特殊功能寄存器中的各控制位进行赋值。中断系统初始化步骤如下:(1)CPU开中断或关中断;(2)某中断源中断请求的允许或禁止