C51的中断系统及定时计数器-宋.ppt
第6章 80C51的中断系统及定时/计数器,6.1 中断概述6.2 中断处理过程6.3 80C51的中断系统及其控制6.4 80C51的中断源的扩展6.5 80C51的定时/计数器及其应用,6.1 中断概述,1.中断的概念CPU在正常执行程序过程中,由于一些突发事件或故障的产生,导致CPU暂时中止当前操作,而转去执行处理突发事件或故障的相应程序,并且在该程序执行完成之后,返回原程序继续执行,这样的过程叫做中断。,原来正常执行的程序称为主程序;用来处理突发事件或故障的程序称为中断处理子程序或中断服务子程序;导致中断产生的原因称为中断源;主程序被中断源打断,转去执行中断服务子程序的位置称为断点。,2.中断的作用用于实现突发事件和故障处理用于实现同步操作可用于实现实时处理用于操作系统对硬件的管理3.中断源的分类从中断执行过程的角度来看,可以分成两类:(1)处理器预先考虑的中断(2)处理器没有预先考虑而需要扩展的中断,6.2 中断处理过程,1.简单中断(只有一个中断源)(1)中断源识别和中断入口地址查找(2)保护断点 程序计数器或指令指针入栈,由硬件自动完成。(3)执行中断服务子程序保护现场,程序主体,恢复现场(4)中断返回,2.复杂中断的执行 系统中多个中断同时发生和发生时正在执行中断服务子程序,则出现了复杂中断管理的问题。(1)中断优先级 给不同的中断源设置不同优先权等级,多个中断源同时申请中断,处理器优先响应优先级高的中断。这就是处理器的中断排队原则。(2)中断嵌套 高级中断是否可以打断低级中断;低级中断是否可以打断高级中断;同级中断是否可以打断同级中断;,6.3 80C51的中断系统及其控制1.80C51的中断系统结构及中断源 有5个中断源 定时/计数器0(T0)和定时/计数器1(T1)中断 串行通信接口中断(TX,RX)外部中断0和外部中断1,2.中断源和中断申请标志位 复位后所有中断申请标志位清零,表示没有中断申请。每个标志位可以按位寻址。(1)TCONTCON的地址是88H,TF1:定时/计数器1(T1)中断申请标志位,当计数器计数溢出时,该位置为1。在中断被响应后,该位由硬件自动清除。在查询方式下由软件清除。TF0:定时/计数器0(T0)中断申请标志位。具体操作同TF1。IE1:外部中断1中断标志。在外部中断设为下降沿触发时,引脚的下降沿设置该位为1,中断被响应后,该位自动清零;在外部中断设为低电平触发时,该位的值与引脚的电平相反。IE0:外部中断0中断标志位。具体操作同IE1。IT1:外部中断1触发方式选择位。IT1=1,引脚为下降沿触发;IT1=0,引脚为低电平触发。IT0:外部中断0触发方式选择位。具体操作同IT1。,当定时/计数器计数溢出时,在最近机器周期的S5P2期间向中断标志位进位,从而设置中断标志位TF0或者TF1为1。中断标志位置1后,会一直保持到中断被响应,然后单片机内部硬件自动对它清零;查询方式下,即没有使用中断,只能用软件清零。外部中断:分别是从(P3.2)和(P3.3)引脚输入。当ITX=0时,外部中断X为低电平触发,ITX=1时为下降沿触发。(X=0,1),下降沿触发时:在每个机器周期的S5P2期间扫描外部中断输入引脚的电平状态。在连续两次扫描到高电平和低电平时,设置中断标志位IEx为1,表示外部有中断申请,该中断申请信号会一直保持到该外部中断被处理器响应后,由硬件自动清除。低电平触发时,引脚变为低电平时,IEx为1,表示有外部中断申请,并一直保持为1,直到外部中断引脚变为高电平,中断标志IEx位才清0。电平触发时,外部中断申请的电平必须保持外部中断输入引脚为低电平,直到中断被响应,而且必须在中断被响应后变成高电平,以撤销中断申请。若低电平时间太短,则可能导致中断不会被响应;若太长,在中断子程序执行完成后仍为低电平,IEx会保持为1不变,会被认为是新的中断申请,导致一次中断申请多次响应。,TI:串口发送完成中断标志。TI=1,表示一帧数据发送完毕。RI:串口接收数据中断标志。RI=1,表示串口接收到一帧新的数据。,(2)SCON中的标志位及串口中断 SCON的地址是98H,串口发送中断:把数据写入SBUF后,硬件自动逐位从TX引脚发出数据,最后一个数据发送完成后,在最近机器周期的S5P2期间,置位TI中断标志位,表示数据发送完毕。该标志位一直有效,且不会硬件自动清除,只能软件清除。,串口接收中断:当RX上有数据输入时,串行通信接口电路自动接收数据,在接收到完整的一帧数据后,在最近机器周期的S5P2期间,置位RI中断标志位,表示接收到新的串口数据。该标志位一直有效,且不会硬件自动清除,只能软件清除。,3中断控制中断使能寄存器IE的地址是A8H,EA:全局中断使能控制位。只有EA=1,所有中断才可能被响应;EA=0,所有中断都不能被响应。ES:串口中断使能控制位。ES=1,允许响应串口发送中断和接收中断;ES=0,禁止响应串口发送中断和接收中断。ET1:定时/计数器1中断使能控制位。ET1=1,允许响应定时/计数器1中断,ET1=0禁止响应定时/计数器1中断。EX1:外部中断1使能控制位。EX1=1,允许响应外部中断1,EX1=0禁止 响应外部中断1。ET0:定时/计数器0中断使能控制位。具体操作同ET1。EX0:外部中断0使能控制位。具体操作同EX1。,4中断优先权管理和中断嵌套原则 单片机有两个优先权等级,其中断优先处理的原则是:高级中断和低级中断同时申请中断时,优先响应高级中断;同级有多个中断同时发生时,按以下自然优先级顺序处理。,中断嵌套的原则是:高级中断可以打断低级中断,低级中断不能打断高级中断,同级中断不能打断同级中断。,中断优先级寄存器IP的地址是B8H,PS:串口中断优先权设置位。PS=1,串口中断设为高级中断;PS=0,串口中断设为低级中断。(下同)PT1:定时/计数器1中断优先权设置位。PX1:外部中断1优先权设置位。PT0:定时/计数器0中断优先权设置位。PX0:外部中断0优先权设置位。,5中断服务程序的执行 当前面所有的中断响应的条件都满足时,处理器会在结束当前指令后的下一个机器周期,由硬件执行一条LCALL指令。自动转到满足中断条件的中断源入口地址去执行中断服务程序。在80C51单片机中,中断程序的入口地址是固定的。,6.中断服务子程序的编写,ORG 0030H;地址由用户自己设定INT_EX0_HADLE:;此例中外部中断0子程序从地址0030H开始CLR EA;保护现场之前,关中断PUSHPSW;保护状态寄存器PSWPUSHACC;保护累加器PUSH;保护中断服务子程序中其他使用到的寄存器SETEA;保护现场完成后,开中断。;此处也可不写,表示不允许中断嵌套,;中断服务子程序的主体,由用户编写CLREA;恢复现场之前,关中断。;若前面没有开中断,则此句可不写POP;恢复现场POP ACCPOP PSWSETEA;中断完成后,开中断。RETI;中断返回,中断服务子程序结束。,7.中断撤销外部中断:下降沿触发的外部标志是在中断响应后硬件自动清除的;低电平触发的外部中断标志只能通过使外部信号变为1来撤销申请。定时/计数器:在中断响应后硬件自动清除的;在查询方式时需由软件清0。串口中断:均由软件清除。,8.中断响应时间处理器收到中断请求后,下一个机器周期是否转去执行中断服务子程序,还受到以下影响:若当前机器周期不是处理器正在执行的指令的最后一个机器周期,则需要等到指令执行完成。若正在执行RETI指令或者是其他读写与中断有关的寄存器IE、IP的指令,则需要在执行完该指令后,再执行一条指令,然后再转入中断服务子程序。中断返回后至少执行一条指令后才能响应新的中断。中断申请到执行第一条中断服务程序的最短时间是3个机器周期(优先权扫描1机器周期,LCALL指令2个机器周期)。若遇到不是执行指令的最后一个机器周期和正在执行RET、RETI或任何访问IE或IP寄存器指令时,则需要最长的等待时间不超过8个机器周期(3个最短周期,和5个最长等待周期。),9.中断系统的应用 初始化的内容包括打开全局中断、中断中断控制位、中断源的优先权。例:使用外部中断0,下降沿触发,定时器1中断,串口接收中断,其他中断关闭不用,串口中断具有最高优先级。MOVIE,#00011001B MOVIP,#00010000B SETBIT0 SETBEA,6.4 80C51的中断源的扩展,一种通过外部中断入口和并口结合扩展中断的方法。,ORG0000HAJMPMAIN_START ORG000BH AJMP INT_EX0_HANDLE ORG0030H INT_EX0_HANDLE:CLR EAPUSHPSW;保护状态寄存器PSWPUSHACC;保护累加器PUSHJNBP1.0,INT_EEX0;查询扩展外部中断0JNBP1.1,INT_EEX1;查询扩展外部中断1JNBP1.2,INT_EEX2;查询扩展外部中断2JNBP1.3,INT_EEX3;查询扩展外部中断3,END_INT_EX0_HANDLE:POP;恢复现场POP ACC;POP PSW;SET EA;中断完成后,开中断。RETI INT_EEX0:;扩张外部中断0处理AJMP END_INT_EX0_HANDLE:INT_EEX1:;扩张外部中断1处理AJMP END_INT_EX0_HANDLE:INT_EEX2:;扩张外部中断2处理AJMP END_INT_EX0_HANDLE:INT_EEX3:;扩张外部中断3处理AJMP END_INT_EX0_HANDLE:ORG 0100HMAIN_START:SETB EX0;打开外部中断0SETB EA;开全局中断,6.5 80C51的定时/计数器及其应用,计数器常用的实现方法:使用专门设计的硬件电路实现。使用软件来实现。使用可编程定时/计数器来实现。80C51系列单片机,集成了2个可编程16位定时/计数器。每个定时/计数器独立工作,可以工作在计数和定时两种模式,有4种工作方式。,1.定时/计数器的结构,2.定时/计数器的时钟源选择内部时钟时,时钟频率固定,常用作定时器;选择外部输入信号时,常用来对外部事件计数。(1)选择内部时钟 由80C51单片机主时钟的12分频产生的,如果选择12MHz的晶振或者外部输入12MHz时钟,则计数器时钟周期为:,(2)选择外部时钟由引脚T0(P3.4)、T1(P3.5)输入。计数时钟下降沿有效。由于采样一个下降沿需要两个机器周期,因此外部计数时钟的最高频率是fosc/24。使用外部时钟时,常用来对外部事件计数。设置计数初值为零,然后对外部事件计数,计数结束后,读取计数结果。,3.定时/计数器的控制寄存器和模式寄存器,(1)模式寄存器TMODTMOD地址是89H,GATE:计数器门控位。C/T:时钟选择控制位。M1M0:工作方式选择位。,(2)控制寄存器TCONTCON地址是88H,TF1:定时/计数器1中断申请标志位,当计数器计数溢出时,该位为1。在中断被响应后,该位由硬件自动清除。在查询方式下由软件清除。TR1:定时/计数器1的启动控制位。当GATE=0时,TR1=1启动计数器1计数,TR1=0,计数器1停止计数,保持原值;当GATE=1时,TR1=1且INT1=1时,启动计数器1计数,TR1=0或INT1=0,计数器1停止计数,保持原值。启动计数的指令为:SETB TR1,停止计数指令为:CLR TR1。TF0:定时/计数器0中断申请标志位。具体操作同TF1。TR0:定时/计数器0的启动控制位,具体操作同TR1。,4.定时/计数器的4种工作方式(1)方式1:16位定时/计数器,例:某80C51单片机系统的工作时钟为12MHz,定时时间为800us,使用定时器0的方式1工作,则计数初值,分开高8位,低8位,则TH0=0FCH,TL0=0DFH。,(2)方式0:13位定时/计数器 方式0使用了TH0的8个比特位,加上TL0的低5个比特位,构成了一个13位计数器。,例如,某80C51单片机系统的工作时钟为6MHz,定时时间为800us,使用定时器0的方式0工作,则计数初值为,在给T0设置初值时,要特别注意,分开高8位,低5位,此例中,TH01EH,TL070H,而是TH0=11110011=0F3H,TL0=10000=10H。,(3)方式2:自动重装的8位定时/计数器,例:某80C51单片机系统的工作时钟为3MHz,要求定时时间为800us,使用定时器0的方式2工作时,则计数初值为,设置TL0=38H,TH0=38H。,(4)方式3:,只有计数器T0可以工作在方式3。,T0方式3下的T1方式2结构,5.定时/计数器的初始化(1)设置中断使能寄存器IE。(2)设置计数器模式寄存器TMOD。(3)计算和设置计数初值(4)如果计数器工作在中断模式,则这时需要打开全局中断。(5)启动计数器工作。(6)编写计数器主体程序,6.定时/计数器的应用(1)通过定时器扩展外部中断源例:把外部中断源接到定时/计数器0的外部时钟输入脚T0(P3.4)。设置定时/计数器0为方式2自动重装方式,计数器模式,计数初值为0FFH,中断使能打开。当外部时钟输入产生下降沿时,计数溢出,TF0置位,产生中断。由于工作在方式2,所以自动重装初值0FFH,外部再次输入下降沿,则产生新的中断。由此就扩展了一个下降沿有效的外部中断源。,ORG 0000HAJMP MAIN_STARTORG 000BH AJMP INT_T0_EEX0_HANDLE ORG 0030HINT_T0_EEX0_HANDLE:CLR EA PUSH PSWPUSH ACCPUSH,;外部扩展中断源处理子程序POP POP ACCPOP PSWRETIORG 0100HMAIN_START:SETB ET0 MOV IP,#00HANL TMOD,#F0H ORL TMOD,#00000110BMOV TH0,#0FFHMOV TL0,#0FFHSETB TR0 SETB EA STOP:AJMP$,(2)定时器模式的应用例:设单片机的晶振频率为12MHz,现要求从P1.0输出周期为500us(频率为2kHz),占空比50%的方波。,晶振频率为12MHz,则计数器时钟周期为1us,由于周期为500us,占空比50%,则高低电平时间各为为250us,定时时间为250us。,方法一:使用计数器0,方式0,查询方式计数初值:设置TH0=11111000B=0F8H,TL0=00110B=06H。工作在方式字:TMOD=00000000B=00H。查询方式下,不需要初始化IE。初始化使P1.0=0,然后每次定时溢出时,使P1.0翻转即可。TF0需要在程序中软件清零。,ORG 0000HAJMP MAIN_STARTORG 0100HMAIN_START:MOV TMOD,#00H MOV TH0,#0F8H MOV TL0,#06HCLR P1.0SETB TR0 WAIT:JNB TF0,$CLR TF0MOV TH0,#0F8HMOV TL0,#06HCPL P1.0AJMP WAIT END,方法二:使用定时/计数器1,方式1,中断方式计数初值:,则TH1=0FFH,TL1=06H。工作方式字:定时器模式,软件启动,则TMOD=00010000B=10H。使用中断方式,设置ET1=1,允许定时/计数器1中断。其他使能位不变。在初始化最后打开全局中断使能位EA。初始化使P1.0=0。在中断服务子程序中,使P1.0翻转即可。,ORG 0000HAJMP MAIN_STARTORG 001BHAJMP INT_T1_HANDLEORG 0030HINT_T1_HANDLE:MOV TH1,#0FFHMOV TL1,#06HCPL P1.0RETI,ORG 0100HMAIN_START:MOV TMOD,#10H SETB ET1 MOV TH1,#0FFH MOV TL1,#06HCLR P1.0SETB EASETB TR1WAIT:AJMP$END,方法三:使用定时/计数器1,方式2,中断方式在方法一和方法二中,每次需要软件重转计数初值,因此实际产生的方波周期不是500ms。使用方式2就可以解决这个问题。方式2的计数初值为,则TL1=06H,TH1=06H。TMOD=00100000B=20H。使用中断方式,设ET1=1,在初始化最后打开全局中断使能位EA。初始化使P1.0=0。在中断服务子程序中,使P1.0翻转。,ORG 0000HAJMP MAIN_STARTORG 001BHAJMP INT_T1_HANDLEORG 0030HINT_T1_HANDLE:CPL P1.0RETI,ORG 0100H MAIN_START:MOV TMOD,#20H SETB ET1MOV TH1,#06H MOV TL1,#06HCLR P1.0SETB EA SETB TR1WAIT:AJMP$END,(3)计数器模式的应用例:在某个会场上,专门设置了人员入口和出口,为了安全需要,会场内只允许1000人同时在场。当人数到达1000人时,入口亮红灯,门卫阻止人员进入。使用定时/计数器0统计外部事件用作计数器,需要选择外部时钟,不需要使用中断;计数值最大为1000,使用方式1和方式0都可以,在此选用方式1。把人数统计的高8位放在30H,低8位放在31H。TMOD=00000101=05H,计数初值为0。,ORG 0000HAJMP MAIN_STARTORG 0100HMAIN_START:MOV TMOD,#05HMOV TH0,#0 MOV TL0,#0CLR P1.0SETB TR0,COUNT:MOV 30H,TH0MOV 31H,TL0MOV A,TH0CJNE A,30H,COUNTCHECK:CLR CSUBB A,#03HJC COUNT MOV A,31H SUBB A,#0E8HJC COUNT SETB P1.0STOP:AJMP STOPEND,本 章 小 结本章的内容由3个部分组成。第一部分:由突发事件的处理引出中断的概念;然后展开讨论中断的作用;对比正常程序和中断程序的差异,根据中断执行的过程不同对中断源进行了分类,读者需要仔细体会两种分类的差异,在微机原理部分还会讲到两种中断源的执行过程的不同;详细讨论了中断执行过程中的中断源识别、中断入口地址寻找、断点保护和接续、现场保护和恢复,以及中断返回。最后介绍了中断嵌套和中断优先级的意义。,第二部分:详细讨论了80C51单片机的中断系统。主要包括中断系统的结构图,图6.3包含了80C51中断系统的所有内容,读者需要认真仔细地分析该图的每处细节,结合该图进行后面的学习。此部分根据中断执行的过程,依次分析了中断源、中断标志位、中断使能控制、中断优先级设置、中断入口地址、中断服务子程序的编写方法和中断申请的撤销。讨论了中断执行的时间,介绍了通过中断实现单步操作的方法和中断扩展的方法。读者需要熟练掌握IE,IP,TCON,SCON中各比特位的作用和意义。,第三部分:分析了80C51单片机的定时/计数器的应用。介绍了定时/计数器的内部结构,分析了定时器和计数器两种模式的原理和区别;仔细分析了4种工作方式的工作原理、等效电路结构、定时时间计算方法;通过实例演示了各种工作方式的应用方法。在实际的系统设计中会经常使用到定时器,读者需要熟练掌握TMOD,TCON中各比特位的意义和作用,掌握中断方式和查询方式的编程方法,并多做实验提高实际编程能力。,END,