第6章中断系统与定时计数器模块_第1页
第6章中断系统与定时计数器模块_第2页
第6章中断系统与定时计数器模块_第3页
第6章中断系统与定时计数器模块_第4页
第6章中断系统与定时计数器模块_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 中断系统与定时计数器模块 中断是51单片机程序运行的一种方式。计算机在执行正常程序的过程中,当出现某些紧急情况、异常事件或其他请求时,处理器暂时中断正在运行的程序,转而执行紧急情况或其他请求的操作处理。处理完成以后,处理器回到被中断程序的断点处继续执行,这个过程称为中断。 在CPU与外设之间的传送数据时,根据外设本身工作速度的差异,通常有四种不同的控制方式:无条件传送方式、查询方式、中断方式和DMA方式。1、中断定义和作用、中断定义和作用6.1 中断的概念及中断系统中断的概念及中断系统 外设要求CPU为其服务,可在CPU工作的中间打断它,要求CPU及时服务的一种数据交换方式。优点:外设

2、服务及时,CPU效率高,可用于实时控制中缺点:多级中断发生时易丢数据2、中断源、中断源:引起中断的原因或是能发出中断申请的来源。(1)外部设备中断源 外部设备主要为微型计算机输入和输出数据,故它是最原始和最广泛的中断源。(2)控制对象中断源在计算机用作实时控制时,被控对象常常被用作中断源,用于产生中断请求信号,要求CPU及时采集系统的控制参量、越限参数以及要求发送和接收的数据。(3)故障中断源故障中断源是产生故障信息的源泉,把它作为中断源是要CPU以中断方式对已发生的故障进行分析处理。(4)定时脉冲中断源定时脉冲中断源又称为定时器中断源,实际上是一种定时脉冲电路或定时器。3、中断的分类:、中断

3、的分类:1)屏蔽中断:有时直接称为中断,是最常见的一种中断方式。 “屏蔽”实际是一种工作方式,指可以通过指令来设置使CPU或者允许接受屏蔽的中断申请,或者不接受这种申请。 屏蔽中断是一种CPU可用指令将中断屏蔽,从而不与受理的中断申请。 图6-1-1 Z80 CPU对和中断的输入2)非屏蔽中断:是CPU必须要处理的一种中断,并不可以用指令将这种中断申请屏蔽掉。 一般一些紧急的情况,如掉电中断申请,就可安排这种中断方式,以保证紧急情况下一定能得到处理。 并不是所有的微处理器都有这种中断,MCS-51的中断系统就没有非屏蔽中断。 3)软件中断:可以由程序员编写相应的中断指令使CPU响应中断,CPU

4、只要执行这种指令就可以转入相应中断服务程序执行,以完成相应的中断功能。4、中断嵌套 中断嵌套的条件:只有中断级别比已经在服务的中断源级别更高的中断源,才可以打断现在的中断服务。 中断嵌套深度:中断过程再嵌套中断的层次,是中断系统的性能指标之一5中断系统的功能中断系统的功能通常有如下几条:(1)进行中断优先权排队(2)实现中断嵌套(3)自动响应中断(4)实现中断返回6.1.2 中断系统1、MCS-51的中断源和中断标志 引起中断原因的设备或部件,或是发出中断请求信号的源泉,称为中断源。51单片机51子系列具有5个中断源(52子系列有6个中断源),分别是外部中断两个、定时中断两个和串行中断一个,即

5、:外部中断0-INT0,由P3.2提供,外部中断1INT1,由P3.3提供,T0溢出中断; 由片内定时/计数器0提供T1溢出中断; 由片内定时/计数器1提供串行口中断RI/TI; 由片内串行口提供 8051系统在检测或收到申请以后,会将检测的结果存放于TCON和SCON寄存器中,即使某些它们的中断标志位置位。 中断标志位的设置由硬件自动完成,只要检测到中断申请,响应的标志位就会置位。然后8051系统就通过检测这些中断标志位来决定是否有相应的中断申请。若某个中断位被置位,就认为存在着相应的中断申请,需要进行中断响应。 注意:在中断处理结束之后,必须使中断标志复位,以便可以接收新的中断申请,但复位

6、并不都是自动完成的,使用者必须用指令来清除不能自动复位的中断标志。 TCON寄存器可以用来存放外部中断和定时/计数器中断的中断标志;可以用来选择是外部中断请求是电平方式还是边沿方式;还可作为定时器控制寄存器。IE0:为外部中断INT0的请求标志位。当INT0引脚上出现中断请求信号(低电平或脉冲下降沿)时,硬件自动将IE0置“1”(硬件复位),产生中断请求标志。IT0:外部中断INT0触发方式控制位。由软件来置“1”或清“0”,以控制外部中断INT0的触发方式。 当IT0=1 时,外部中断INT0为边沿触发。 即外部中断INT0出现下降沿时, 触发IE0,使其为“1”; 当IT0=0时,外部中断

7、INT0为电平触发。即外部中断INT0出现低电平时,触发IE0,使其为“1”。IT1:选择外部中断请求1为边沿触发方式的控制位, 与IT0类似。IE1:外部边沿触发中断1请求标志,和IE0类似。 外部中断输入信号和中断申请标志IEx及外部中断申 请触发方式控制位ITx三者关系如图6-2所示。 TR0:定时/计数器0的运行控制位,由软件置位/清除来控制其开启/关闭。 TF0:定时计数器0的溢出中断申请标志,在启动T0计数后,定时计数器0从初值开始加1计数,当最高位产生溢出时,由硬件置位TF0,向CPU申请中断,CPU响应TF0中断时清零该标志位,TF0也可以用软件清零(查询方式)。 TR1:定时

8、计数器1的运行控制位。由软件置位清除来控制其开启关闭。 TF1:定时计数器1的溢出中断申请标志,与TF0类似。SCON的低二位锁存串行口的接收中断和发送中断标志(80C51复位后,SCON被清0), TI或者RI被置位,CPU就认为存在串行口中断申请。TI:串行口发送中断标志,当发送完一帧数据后置位,必须用软件清除必须用软件清除;RI:串行口接受中断标志,当接收完一帧数据后置位,必须用软件清除。必须用软件清除。2、 中断的控制 MCS-51可通过指令使IE的某些位置“1”或者置“0”来控制中断的开和关。 IE在特殊功能寄存器中,字节地址A8H,位地址分别是A8HAFH。IE对于中断的开放或关闭

9、实现两级控制,即:控制CPU对中断源总的开放或禁止,以及每个中断源是否允许中断。其格式如下图所示:0: 关 INT 中 断01: 开 INT 中 断00: 关 T 中 断1: 开 T 中 断001: 开 T 中 断0: 关 T 中 断0: 关 INT 中 断1: 开 INT 中 断11110: 关 T 中 断1: 开 T 中 断221: 开 所 有 中 断0: 关 所 有 中 断1: 开 串 行 口 中 断0: 关 串 行 口 中 断位 地 址IEEAAFADETACESABETAAEXA9ETA8EX00112CPU中断允许控制位串行口中断允许位T1的溢出中断允许位T0的溢出中断允许位外部中

10、断1中断允许位外部中断0中断允许位中断优先级别由中断优先级寄存器IP来管理。 串行口中断优先级控制位定时/计数器中断优先级控制位外部中断优先级控制位外部中断优先级控制位定时/计数器中断优先级控制位单片机复位后,IE和IP均被清0。用户可根据自己的需要来置位或清零。整个中断系统结构如图6-4所示。80C51单片机对中断优先级的处理原则如下。(1)不同级的中断源同时申请中断时,首先响应优先级别最高的中断请求。(2)正在进行的低优先级中断服务,能被高优先级中断请求所中断。(3)正在进行的中断过程不能被新的同级或低优先级的中断请求中断。(4)同一级的中断源同时申请中断时:事先预定。(5)对于同一优先级

11、,单片机对其中断次序如表6-5所示。中 断 源中 断 标 志自然优先级顺序外部中断0IE0高定时/计数器0TF0外部中断1IE1定时器/计数器1TF1串行口RI或TI低3. 中断响应中断响应 1)中断响应的条件:)中断响应的条件: 无同级或高级正在服务。无同级或高级正在服务。 现行指令执行到最后一个机器周期且已结束。现行指令执行到最后一个机器周期且已结束。 若现行指令为若现行指令为RETI或需访问特殊功能寄存器或需访问特殊功能寄存器IE或或IP的指的指令时,执行完该指令且其紧接着的指令也已执行完。令时,执行完该指令且其紧接着的指令也已执行完。 2)CPU不是在任何情况下都对中断请求予以响应,不

12、是在任何情况下都对中断请求予以响应,而且不同的情况下对中断响应的时间也是不同的。而且不同的情况下对中断响应的时间也是不同的。 若系统中只有一个中断源,则响应时间在若系统中只有一个中断源,则响应时间在38个个机器周期之间。机器周期之间。3)中断响应任务 中断系统硬件自动完成下列任务,以实现响应:将相应触发器置1(以阻断后来的同级或低级的中断请求)。执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保护,再将相应的中断服务的入口地址送入。 80C51中断源的中断服务入口地址是由硬件设计人员规定好的,如下表6-6所示。在编写中断服务程序时应注意如下问题。(1)在中断服务程序中,用户应注意用

13、软件保护现场,以免中断返回后丢失原寄存器、累加器中的信息。(2)若要在执行当前中断程序时禁止更高优先级中断,可以先用软件关闭CPU中断或禁止某中断源中断,在中断返回前再开放中断。4、中断响应的时间响应时间响应时间-从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。中断的响应时间在一般情况下不考虑,但在某些精确的定时场合,则需对基本时间进行估计,以保证准确的定时控制。(1)最快响应时间(最短时间) 以外部中断的电平触发为最快。 当CPU查询中断标志的周期正好是执行一条指令的最后一个机器周期,则不需等待就可进行响应,那么,从查询中断请求信号到中断服务程序需要三个机器周期: 1个周期(查询

14、)2个周期(长调用LCALL)(2)最长时间 若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令(周期数最长的指令)发生, 则最长为8个周期: 2个周期执行当前指令(其中含有1个周期查询)4个周期乘除指令2个周期长调用8个周期。 一般可认为响应时间在三至八个机器周期之间。 若来的是同级或者低级中断的申请,那么就得等当前的中断结束后才能响应,那么时间就更长了。5、 中断请求的撤除 来了申请,就得响应,响应时TCON和SCON的相应位置1,响应之后,就得撤除,否则连续响应。中断响应后, 可通过硬件使标志位TF0和TF1自动复0: 如定时器0,当给它装进一个数后,定时器0自动加1计

15、数,溢出后,TF0=1,产生中断请求,CPU接到这个请求后,转去服务前,从硬件上时它们自动归零。也可以用户自己加上:CLR TF0对于外中断IE0、IE1,响应后,有的自动归零,有的不能归零: 8051的外部中断有两种触发方式:电平和边沿方式。则:脉冲边沿型:一见到有脉冲,CPU就将它们写成1,响应后,脉冲边沿也结束了,将它们改写成0,问题不大;低电平型的,响应后改写成0,由于单片机没有信号通知外设结束中断申请,外部低电平并不撤消,又填为1,相当于又来了新的中断申请,所以必须由用户自行解决:3. 对于串行口的中断申请标志TI和RI,中断系统不予自动撤除,因为这两个标志在中断响应之后还要用作判断

16、是接收还是发送操作的标志位,所以在使用完毕后用指令来使之复位,6、MCS-51中断系统的初始化MCS-51 中断系统由若干个SFR管理,故中断系统的初始化就是对这些寄存器的各控制位的赋值,以完成如下操作:开中断确定各中断源的优先级若为外部中断,则规定是电平触发还是边沿中断例:规定外部中断0为电平方式,高优先级,其中断有关的初始化程序为: SETB EA SETBEX0 SETBPX0CLRIT0如果用字节操作指令:MOVIE,#81HORLIP,#01HANLTCON,#0FEH7.中断服务函数在C51中,编译器提供定义特定8051系列成员的寄存器头文件。8051的头文件为reg51.h。中断

17、的C语言编程可如下所示:# include /*52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义*/void service_int1() interrupt2 当有中断请求时,程序运行转移到标记有“interrupt”关键字的函数内进行相关中断的处理。中断请求的处理过程是以函数的方式来实现的,即中断服务函数,它的格式如下:void 函数名(void) interrupt 中断号 using 工作组中断服务函数内容; P0.08031 P0.7 ALED0 Q0 D7 Q4 锁 存 器 Q5 Q6 Q7G 8 Y0译码器 Y15 打印机DB0DB78# include# inclu

18、de /*可使用其中定义的宏来访问绝对地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD*/# define uchar unsigned char /*将unsigned char定义为uchar,简化输写,提高编程速度*/# define PP5 XBYTE0 x00F0 /*打印机地址*/void printw(uchar *p) interrupt0 /*打印字符串中断函数*/ p+;while(*p != /0 ) PP5=*p; /*输出字符*/p+; /*指向下一个字符*/ viod main(void) uchar idat

19、a prn=”WELCOM”; /*设一测试用字符串*/IP=0 x01; /*令INT0为高优先级*/ IE=0 x84; /*开INT0中断,CPU开中断*/ if(*p != /0 ) PP5=*p; /*输出第一个字符*/6.2 定时/计数器 在单片机应用系统中,常常会有定时需求,如定时输出、定时检测、定时扫描等;也经常对外部事件进行计数。80C51单片机片内集成有两个可编程的定时/计数器:T0和T1。它们既可以工作于定时模式,也可以工作与外部事件技术模式。此外,T1还可以作为串行口的波特率发生器。 1. 定时/计数器的基本结构2. 定时/计数器的工作原理 当定时/计数器作为定时器工作

20、时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因为一个机器周期等于12个振荡周期,所以计数频率fcfosc/12。例如,当晶振为12MHz时,则计数周期为1s,这是最短的定时周期。若要改变定时时间,则需通过改变定时器的初值及设置合适的工作方式来实现。与状态寄存器2 2)C/TC/T:定时器:定时器/ /计数器方式选择位计数器方式选择位C/T=0C/T=0,设置为定时方式,对机器周期进行计数;,设置为定时方式,对机器周期进行计数;C/T=1C/T=1,设定为计数方式,对外部信号进行计数,外部信号,设定

21、为计数方式,对外部信号进行计数,外部信号接至接至T0T0(P3.4P3.4)或)或T1T1(P3.5P3.5)引脚。)引脚。3) GATE:3) GATE:门控位门控位GATE=0GATE=0时,只要用软件使时,只要用软件使TR0TR0(或(或TR1TR1)置)置1 1就能启动定时器就能启动定时器T0T0(或(或T1T1););GATE=1GATE=1时,只有在时,只有在INT0INT0(或(或INT1INT1)引脚为高电平的情况下,)引脚为高电平的情况下,且由软件使且由软件使TR0TR0(或(或TR1TR1)置)置1 1时,才能启动定时器时,才能启动定时器T0T0(或(或T1T1)工)工作。

22、作。1、 方式013位计数方式 定时器/计数器工作在方式0时,16位计数器只用了13位,即TH的高8位和TL的低5位,组成一个13位定时器/计数器。2、 工作方式1:16位计数方式定时器工作方式1与工作方式0类同,差别在于其中的计数器的位数。工作方式0以13位计数器参与计数,工作方式1则以16位计数器参与计数。 注意:当定时器T0工作在方式3时,定时器T1只能工作在方式02,并且工作在不需要中断的场合。6.2.3 定时/计数器的初始设置 1. 初值计算80C51定时/计数初值X(也称时间常数)计算公式: X2n定时时间机器周期时间其中,n与工作方式有关。方式0时,n13;方式1时,n16;方式

23、2时,n8;方式3时,n8。机器周期时间与主振频率有关。因此,机器周期时间12/fosc。2. 定时计数器应用步骤(1)确定工作方式,写入TMOD定时/计数器工作方式寄存器。(2)计算机定时/计数初值,装入THx及TLx。(3)置位TRx以启动计数。(4)置位ETx以允许定时/计数器x中断(不需要可省略)。(5)置位EA以使CPU开放中断,即接收中断信号。3. 定时/计数器应用举例【例】设T0选择定时工作方式0,定时时间为1ms,晶振频率fosc6MHz。试确定T0初值,并编程实现单片机的P1.2端口产生周期为2ms的方波。解:工作方式0为13位定时/计数器,最大计数值为2138192。晶振频

24、率fosc6MHz时,每个机器周期为2s,现需定时1ms,则计数值为1ms/2s500,初始值X8 1925007692,转换成二进制数为1111000001100,即:T0的高8位(TH0):11110000B0F0HT0的低5位(TL0):01100B0CH要产生周期为2ms的方波,只需P1.2端口每隔1ms取反一次,即会产生高低高低的电平,其控制程序如下: ORG0000H JMP START ORG000BHMOVTL0,#0CH ;重新装入初始值,保证每次定时时间相同 MOVTH0,#0F0H CPL P1.0 ;取反,以输出方波RETISTART:MOVTMOD,#00H ;T0设

25、为定时工作方式0MOVTL0,#0CH ;置定时初始值 MOVTH0,#0F0H SETBET0 ;允许T0溢出中断 SETBEA SETBTR0 ;启动定时器T0SJMP$ ;等待 END 【例】用定时器T1产生一个50Hz的方波,由P1.1输出,已知fosc12MHz。解:方波周期1/50Hz0.02s20ms,则只需定时10ms即可。而机器周期为1s,计数值为10ms/1s10 000。所以,T1的初始值X65 53610 00055 536D8F0H。程序如下:ORG 00HJMP SRARTORG 50HSTART:MOVTMOD,#10H ;T1设为定时工作方式1SETBTR1 ;

26、启动定时器T1LOOP: MOVTH1,#0D8H ;置定时初始值MOVTL1,#0F0HJNB TF1,$ ;没有溢出,等待CLR TF1 ;产生溢出,清标志位CPL P1.1 SJMP LOOPEND【例】当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500s的同步脉冲,请编程实现该功能。假设单片机的晶振频率为6MHz。解:首先对定时/计数的工作方式进行选择。开始时T0应为计数工作方式2,对外部事件进行计数。当P3.4引脚上的电平发生负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为定时工作方式,定时时间为500s,并使P1.0输出由高电平变为低电平。T0定时时间到,使P

27、1.0引脚恢复输出高电平,同时T0又恢复外部事件计数方式。其波形图如图6-12所示。 接下来计算初始值。T0开始为计数工作方式2,要求加1后计数器溢出,其初始值应为0FFH。T0为定时工作方式2时,要求定时500s,由于晶振频率为6MHz,机器周期为2s,故计数值为250,其初始值应设置为X28250606H。程序如下:ORG0000HJMP STARTORG 0050HSTART:MOV TMOD,#06H ;T0设置为计数方式2MOV TH0,#0FFH ;赋计数初始值MOV TL0,#0FFHSETB TR0 ;启动T0计数LOOP1:JBC TF0,NEXT;查询T0溢出中断标志SJM

28、P LOOP1 ;继续等待T0溢出中断NEXT:CLR TR0 ;停止计数MOV TMOD,#02H ;T0重新设为定时方式2MOV TH0,#06H ;赋定时初始值MOV TL0,#06HCLR P1.0 ;P1.0改为低电平SETB TR0 ;启动T0定时LOOP2: JBC TF0,NEXT1 ;查询T0溢出中断标志SJMP LOOP2 ;继续等待T0溢出中断NEXT1: SETB P1.0 ;P1.0恢复高电平CLR TR0 ;停止定时SJMPSTARTEND【例】试编写C程序,以不断地从P1.7引脚取得数据的单个位,并将它发送到P1.0,同时在引脚P2.5上产生周期为200us的方波

29、。假设XTAL11.0592MHz。解:周期为200us的方波应为每100us变化一次信号的幅度,故定时值为100us。在时钟频率为11.0592MHz的情况下,可使用定时器0模式2(自动重新加载)。按照计算定时器初值的公式,计算过程为:81002 216411.0592)nX定时时间 机器周期时间12 (1/ 或A4HC语言编程如下:# includesbitSW= P1 7;sbitIND= P1 0;sbitWAVE= P2 5;voidtimer0(void)interrupt1WAVE = WAVE; /1号为定时器0中断;定时时间到后,取反,输出方波。voidmain()SW = 1;/输入开关状态TMOD = 0 x02; /对定时器0设置为定时方式2TH0 = 0 xA4;/赋定时器0的初值TL0 = 0 xA4;IE = 0 x82;/开中断TR0 = 1;/启动T0定时While(1)IND = SW; /输出开关状态【例】试编写C程序,以在主程序中不断地从P1.7引脚取得数据的单个位,并将它发送到P1.0,同时要求实现:(1)在引脚P2.5上产生周期为200us的方波(2)将字母“A”发送到串行端口。使用定时器0产生方波,假设XTAL11.0592MHz。使用9600波特率。解:使用定时器0模式2(自动重新加载),初值计算与上例相同。C语言编程如下:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论