您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第5章 定时器计数器和中断系统
第五章定时器/计数器和中断系统第5.1节定时/计数器5.1.1定时/计数器结构5.1.2定时/计数器工作方式5.1.3定时/计数器控制寄存器5.1.4定时/计数器常数的计算返回本章首页5.1.1定时/计数器结构是MCS一51单片机的重要功能模块之一。可实现定时控制、延时、对外部事件计数,还可用定时器产生毫秒宽的脉冲驱动步进电动机一类的电气机械。计数器主要用于外部事件的计数。8031/8051/8751单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能。可由程序选择作为定时器用或作为计数器用,定时时间或计数值也可由程序设置。T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。返回本节16位加法计数器功能作计数器用时:通过芯片引脚T0(P3.4)或T1(P3.5)加法计数器对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。作定时器用时:加法计数器对内部机器周期脉冲计数。由于机器周期是定值,所以对内部机器周期脉冲计数也就是定时,内部机器周期=1um,计数值100,相当于定时100um。5.1.2定时/计数器工作方式每个定时/计数器还有4种工作模式,也就是每个定时器可构成4种电路结构模式。在模式0、1和2,T0和T1的工作模式相同,在模式3,两个定时器的模式不同。下面以T1为例,分述各种工作模式的特点和用法。1.模式0图2-8定时/计数器T1(T0)工作模式013位定时器/计数器5位8位213=8192定时时间T=(8192-X)Tcy计数值N=8192-X从初值开始计数测引脚脉冲宽度2.模式1图5-2定时/计数器T1(T0)工作模式116位定时器/计数器定时时间T=(65536-X)Tcy计数值N=65536-X从初值开始计数3.模式2图5-3定时/计数器T1(T0)工作模式2自动重新装入初值8位定时/计数器8位加法计数器8位初值寄存器4.模式3定时/计数器T0工作模式3返回本节2个8位方式。工作方式3只适用于定时器T0,当定时器T1处于方式3时,相当于TR1=0,停止计数。当T0为工作方式3时,THo和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器;TH0只能用作定时器.通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。5.1.3定时/计数器控制寄存器定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON两个8位寄存器,设置各个定时器的操作模式和控制功能。1.工作模式控制寄存器—TMOD(89H)GATEC/TM10MGATEC/T1M0M控制T1控制T089H和T类同01M0M00011011方式方式0方式1方式2方式301定时器模式计数器模式01与INT无关00与INT有关图5-5定时器工作模式寄存器TMOD2.定时器控制寄存器—TCON(88H)TCON位地址0DD1D2D3D4D5D6D7IT0IE0IT11IETR0TF0TR1TF188898A8B8C8D8E8F见下一节{00:停T计数01:启T计数00:无T中断(硬件复位){1:有T溢出中断00:无T中断(硬件复位)10:停T计数{1:有T溢出中断1:启T计数{111图5-6定时器工作模式寄存器TCON返回本节5.1.4定时/计数器常数的计算1.计数器初值的计算把计数器计满为零所需要的计数值设定为C,计数初值设定为TC,由此可得到公式:TC=M-C式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。2.定时器初值的计算在定时器模式下,计数器由单片机主脉冲经12分频后计数。因此,定时器定时时间T的公式:T=(M-TC)T计数上式也可写成:TC=M-T/T计数式中,M为模值,和定时器的工作方式有关;T计数是单片机振荡周期TCLK的12倍;TC为定时器的定时初值。返回本节设T0(或T1)运行于计数器方式,要求计数X个外部脉冲后T0(或T1)回零,则计数初值C的求取方法如下:因为回零的含义是指加满到计数器的模值,即x十C=模所以C=模一x=模十(一x)=(x)求补由此可见,计数初值的大小等于需要计数的个数x求补运算后的结果3、求补算法例1:T0运行于计数器状态,工作于方式1(16位方式),要求外部引脚出现3个脉冲后,TH0,TL0全回零(以便申请中断)。求计数初值C。解:C=(0003H)求补=FFFDH例2:T0运行于定时器状态,时钟振荡周期为12MHZ,要求定时100us。求不同工作方式时的定时初值。解:因为机器周期MC=12/12MHZ=1us所以要计数的机器周期个数为64H。应注意定时器在工作方式0时的初值装入方法。由于方式0是13位定时/计数方式,对于T0而言,高8位初值装入TH0,低5位初值装入TL0的低5位(TL0的高3位无效)。所以对于上例,要装入1F9CH初值时,可安排成:在具体装入初值时,必须把11111100B装入TH0,而把***11100B装入TL0。用指令表示即:MOVTH0,#0FCH;#FCH=TH0MOVTL0,#1CH;#1CH=TL05.2中断系统结构及管理5.2.1中断概念及请求5.2.2中断系统的结构5.2.3中断控制5.2.4中断响应过程返回本章首页5.2.1有关中断的概念返回本节什么是中断?什么可能引起中断?中断源中断的嵌套与优先级处理中断的响应过程五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。3、执行中断处理程序。4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。5.2.2中断系统的结构1.外部中断源由P3.2端口线引入,低电平或下降沿引起。由P3.3端口线引入,低电平或下降沿引起。2.内部中断源T0:定时/计数器0中断,由T0回零溢出引起。T1:定时/计数器1中断,由T1回零溢出引起。TI/RI:串行I/O中断,完成一帧字符发送/接收引起。51单片机的中断系统基本特点是:有5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序;5个中断源有两级中断优先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设置的编程。中断系统的结构框图返回本节外部中断有下跳沿引起和低电平引起的选择;串行中断有发送(TI)与接收(R1)的区别;各个中断源打开与否,受中断自身的允许位和全局允许位的控制,并具有高优先级和低优先级的选择。5.2.3中断控制1.中断允许寄存器IE(A8H)字节地址A8H,位地址分别是A8H~AFH。IE控制CPU对中断源总的开放或禁止以及每个中断源是否允许中断。2.中断优先寄存器IP(B8H)字节地址为B8H,位地址分别是B8H~BFH,IP用来锁存各中断源优先级的控制位。0:关INT中断01:开INT中断00:关T中断1:开T中断001:开T中断0:关T中断0:关INT中断1:开INT中断11110:关T中断1:开T中断221:开所有中断0:关所有中断1:开串行口中断0:关串行口中断位地址IEEAAFADETACESABETAAEXA9ETA8EX00112中断允许寄存器IE中断优先寄存器IP返回本节优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定哪些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。五个中断源的自然优先级与中断服务入口地址外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口:0023H高级低级先高后低;停低转高;高不睬低;事先规定.3、定时器控制寄存器4、串行口SCON寄存器寄存器的地址为98H,其中各位都可以位寻址,位地址为98H-9FH。串行口的中断申请标志只占用SCON中的两位,分布如下:TI发送中断标志:当发送完一帧串行数据后置1,必须由软件清0。RI接收中断标志:当接收完一帧串行数据后置1,必须由软件清0。串行口的中断申请标志是由TI和RI相或以后产生的,并且串行口中断申请在得到CPU响应之后不会自动撤除。5.2.4中断响应过程1.响应条件单片机响应中断的条件是:中断源有请求、CPU允许所有中断源请求(EA=1)、中断允许寄存器IE相应位置1。2、中断响应过程单片机在每个机器周期的S5P2期间,顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在再下一个机器周期S1期间按优先级进行排队处理。中断得到响应后自动清除中断标志,由硬件将程序计数器PC内容压入堆栈保护,然后将对应的中断入口地址装入程序计数器PC,使程序转向中断入口地址单元中去执行相应的中断服务程序下列任何一种情况存在中断申请将被封锁:(1)CPU正在执行一个同级或高一级的中断服务程序。(2)当前正在执行的那条指令还未执行完。(3)当前正在执行的指令是RETI或对IE,IP寄存器进行读/写指令,执行这些指令后至少再执行一条指令才会响应中断。5.2.4中断请求的撤除中断过程有以下几点应注意:1.没有对现场进行保护(如PSW,RAM寄存器的内容)2.不能清除T1,R1标志.CPU响应中断请求后,在中断返回(执行RETI)前,必须撤除请求,否则会错误地再次引起中断过程。CPU响应中断后没有用硬件清除串口中断标志,必须由用户编制的中断服务程序来清除相应TI、RI。对于电平触发的外部中断,由于CPU对INT0、INT1脚没有控制作用,也没有相应的中断请求志位,因此需要外接电路来撤除中断请求信号。ANLP1,#0FEHORLP1,#01H5.2.5定时/计数器及中断系统综合应用【例】设MCS-51单片机系统时钟频率ФCLK为6MHZ,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序.返回本章首页(1)主程序任务:1)T0工作方式的设定:选择方式1(16位方式)(最大定时131ms)2)定时常数的设定:TC=216-100ms/2μs=15536=3CB0H即:TH0应装3CH,TL0应装B0H3)中断管理:允许T0中断,开放总中断即:IE应装10000010B。4)启动定时器T0:SETBTR05)设置软件计数器初值:(如使用R7)即R7应装0AH6)动态停机:SJMP$主程序如下:MAIN:MOVTMOD,#01H;设定T0为方式1MOVTH0,#3CH;装入定时常数高8位MOVTL0,#0B0H;装入定时常数低8位MOVIE,#82H;开放T0中断SETBTR0;启动T0MOVR7,#0AH;设置软件计数器SJMP$(2)中断服务程序任务:1)恢复T0常数;2)软件计数器减1;3)判断软件计数器是否为0。为0时,改变P1.0状态,并恢复软件计数器初值;不为0时中断返回。程序如下:TOINT:MOVTL0,#0B0H;恢复定时常数MOVTH0,#3CH;DJNZR7,NEXT;CPLP1.0;定时1到,P1.0取反MOVR7,#0AH;恢复软件计数器初值NEXT:RETI完整程序如下:ORG0000HAJMPMAINORG000BHAJMPTOINTORG0030HMAIN:MOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HMOVIE,#82HSETBTR0MOVR7,#0AHSJMP$TOINT:MOVTL
本文标题:第5章 定时器计数器和中断系统
链接地址:https://www.777doc.com/doc-6428099 .html