资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本章内容,定时,/,计数器,C,语言的函数,中断系统,第,4,章 定时与中断系统,定时,/,计数器,8051,单片机内部有两个,16,位的可编程定时,/,计数器,称为,T0,(,T0,)和,T1,(,T1,),定时,/,计数器,8051,定时器,/,计数器逻辑结构,定时,/,计数器,设置定时,/,计数器工作方式,通过对方式寄存器,TMOD,的设置,确定相应的定时,/,计数器是定时功能还是计数功能,工作方式以及启动方法。,定时,/,计数器工作方式有四种:方式,0,、方式,1,、方式,2,和方式,3,。,定时,/,计数器启动方式有两种:软件启动和硬软件共同启动。除了从控制寄存器,TCON,发出的软件启动信号外,还有外部启动信号引脚,这两个引脚也是单片机的外部中断输入引脚。,定时,/,计数器,设置计数初值,T0,、,T1,是,16,位加法计数器,分别由两个,8,位专用寄存器组成,,T0,由,TH0,和,TL0,组成,,T1,由,TH1,和,TL1,组成。,TL0,、,TL1,、,TH0,、,TH1,的访问地址依次为,8AH,8DH,,每个寄存器均可被单独访问,因此可以被设置为,8,位、,13,位或,16,位计数器使用。,在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加,1,计数器,当计到最大值时(对于,8,位计数器,当计数值从,255,再加,1,时,计数值变为,0,),产生溢出。,定时,/,计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。例如:对于,8,位计数器,当初值设为,100,时,再加,1,计数,156,个,计数器就产生溢出;当初值设为,200,时,再加,1,计数,56,个,计数器产生溢出。,定时,/,计数器,启动定时,/,计数器,根据设置的定时,/,计数器启动方式,启动定时,/,计数器。如果采用软件启动,则需要把控制寄存器中的,TR0,或,TR1,置,1,;如果采用硬软共同启动方式,不仅需要把控制寄存器中的,TR0,或,TR1,置,1,,还需要相应外部启动信号为高电平。,定时器的方式寄存器,TMOD,作用:,TMOD,用来确定两个定时器的工作方式。低半字节设置定时器,T0,,,高半字节设置定时器,T1,。,字节地址:,89H,,,不可以位寻址。,格式:,D7 D6 D5 D4 D3 D2 D1 D0,GATE C/T M1 M0 GATE C/T M1 M0,定时器,1,定时器,0,各位的含义:,C/T,:,功能选择位。,0,为定时器方式;,1,为计数器方式。,M1,,,M0,:,方式选择位。可以选择为四种工作方式,0,、,1,、,2,、,3,之,1,。,四种工作方式的区别后面讲解。,GATE,:,门控位。,0,:只要软件控制位,TR0,或,TR1,置,1,即可启动定时器开始工作;,1,:,只有,INT0,或,INT1,引脚为高电平,且,TR0,或,TR1,置,1,时,,才能启动相应的定时器开始工作。,返回,TF0,TH0,TL0,12,分频,OSC,中断,高,8,位,低,5,位,控制,+,T0(P3.4),TR0,GATE,INT0,(P3.2),C/T=0,C/T=1,例如:设定时器,T0,为定时工作方式,要求用软件启动,定时器,T0,工作,按方式,1,工作;定时器,T1,为计数,工作方式,要求软件启动,工作方式为方式,2,。,则根据,TMOD,各位的定义可知,其控制字为:,即控制字为,61H,,,其指令形式为:,MOV TMOD,,,#61H,格式:,D7 D6 D5 D4 D3 D2 D1 D0,GATE C/T M1 M0 GATE C/T M1 M0,0 1 1 0 0 0 0 1,定时器的控制寄存器,TCON,作用:,TMOD,用来控制两个定时器的启动、停止,表明定时器的溢出、中断情况,。,字节地址:,88H,,,可以位寻址。系统复位时,所有位均清零。,格式:,D7 D6 D5 D4 D3 D2 D1 D0,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,各位的含义:,TC,ON,中的低,4,位与中断有关,在中断章节中讨论。,TF1(8FH),:,定时器,1,溢出标志。计满后自动置,1,。,TR1(8EH),:,定时器,1,运行控制位。由软件清零关闭定时器,1,。,当,GATE=0,时,,TR1,软件置,1,即启动定时器,1,。(,SETB TR1,),当,GATE=1,时,且,INT1,为高电平时,,TR1,置,1,启动定时器,1,;,定时器的四种工作方式,方式的选择:根据,M1,,,M0,来选择。,00,:方式,0 01,:方式,1 10,:方式,2 11,:方式,3,主要特点:,方式,0,:,13,位定时器。,TH0,的,8,位,+TL0,的低,5,位,方式,1,:,16,位定时器。,TH0,的,8,位,+TL0,的,8,位,方式,2,:能重复置初始值的,8,位定时器,。,TL0,和,TH0,必须赋相同的值。,方式,3,:只适用于定时器,0,,,T0,被拆成两个独立的,8,位定时器,TL0,TH0,。,其中:,TL0,与方式,0,、,1,相同,可定时或计数,。用定时器,T0,的,GATE,、,C/T,、,TR0,、,TF0,、,T0,、和,INT0,控制。,TH0,只可用作简单的内部定时功能。,占用,T1,的控制位,TF1,、,TR1,和,INT1,,,启动关闭仅受,TR1,控制。,定时器的方式,0,、,1,示意图,返回,TF0,TH0,TL0,12,分频,OSC,中断,高,8,位,8,位或低,5,位,控制,+,T0(P3.4),TR0,GATE,INT0,(P3.2),C/T=0,C/T=1,定时器的方式,2,示意图,TH0,8,位,8,位,TL0,12,分频,OSC,控制,+,T0(P3.4),TR0,GATE,INT0,(P3.2),C/T=0,C/T=1,1,中断,TF0,0,溢出,定时器的初始值的计算,对于不同的工作方式,计数器位数不同,故最大计数值,M,也不同:,方式,0,:,M=2,13,=8192,方式,1,:,M=2,16,=65536,方式,2,:,M=2,8,=256,方式,3,:,定时器,0,分为,2,个,8,位计数器,每个,M,均为,256,。,因为定时,/,计数器是作加,1,计数,并在计满溢出时产生中断,因此初值,X,的计算如下:,X=M,计数值,计算出来的结果,X,转换为,16,进制数,后分别写入,TL0,(,TL1,)、,TH0,(,TH1,)。,注意!,方式,0,时初始值写入时,对于,TL,不用的高,3,位应填入,0,!,用,T1,、工作方式,0,实现,1,秒延时函数,晶振频率为,12MHz,。,方式,0,采用,13,位计数器,其最大定时时间为:,8192,1,s=8.192ms,,因此,定时时间不可能象任务,7,中一样选择,50ms,,可选择定时时间为,5ms,,再循环,200,次。,定时时间为,5ms,,则计数值为,5ms/1,s=5000,,,T1,的初值为:,X=M,计数值,=8192,5000=3192=C78H=0110001111000B,13,位计数器中,TL1,的高,3,位未用,填写,0,,,TH1,占高,8,位,所以,,X,的实际填写值应为:,X=01100011,000,11000B=6318H,举 例,1,用,T1,方式,0,实现任务,7,中,1,秒延时函数如下:,void delay1s(),unsigned char i;,TMOD=0 x00;/,置,T1,为工作方式,0,for(i,=0;i0 xc8;i+)/,设置,200,次循环次数,TH1=0 x63;/,设置定时器初值,TL1=0 x18;,TR1=1;/,启动,T1,while(!TF1);/,查询计数是否溢出,即定时,5ms,时间到,,TF1=1,TF1=0;/5ms,定时时间到,将定时器溢出标志位,TF1,清零,举 例,1,用,T1,、工作方式,2,实现,1,秒延时,晶振频率为,12MHz,。,因工作方式,2,是,8,位计数器,其最大定时时间为:,256,1,s=256,s,,为实现,1,秒延时,可选择定时时间为,250,s,,再循环,4000,次。定时时间选定后,可确定计数值为,250,,则,T1,的初值为:,X=M,计数值,=256,250=6=6H,。采用,T1,方式,2,工作,因此,,TMOD=0 x20,。,举 例,2,用定时器工作方式,2,实现的,1,秒延时函数如下:,void delay1s(),unsigned,int,i;/i,取值范围为,0,4000,,因此不能定义成,unsigned char,TMOD=0 x20;/,设置,T1,为方式,2,TH1=6;/,设置定时器初值,放在,for,循环之外,TL1=6;,for(i,=0;i4000;i+)/,设置,4000,次循环次数,TR1=1;/,启动,T1,while(!TF1);/,查询计数是否溢出,即定时,250,s,时间到,,TF1=1,TF1=0;/250,s,定时时间到,将定时器溢出标志位,TF1,清零,举 例,2,在,C,语言程序中,子程序的作用是由函数来实现的,函数是,C,语言的基本组成模块,一个,C,语言程序就是由若干个模块化的函数组成的。,C,程序都是由一个主函数,main(),和若干个子函数构成,有且只有一个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函数可以有多个。,C,语言的函数,1.,标准库函数,标准库函数是由,C51,的编译器提供的,用户不必定义这些函数,可以直接调用。,KEIL C51,编译器提供了,100,多个库函数供我们使用。常用的,C51,库函数包括一般,I/O,口函数、访问,SFR,地址函数等,在,C51,编译环境中,以头文件的形式给出。,2.,用户自定义函数,用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能被调用。,函数分类和定义,函数定义的一般形式是:,函数类型 函数名(形式参数表),形式参数说明,局部变量定义,函数体语句,其中,,“,函数类型,”,说明了自定义函数返回值的类型。,“,函数名,”,是自定义函数的名字。,“,形式参数表,”,给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。,ANSI C,标准允许在形式参数表中对形式参数的类型进行说明。如果定义的是无参数函数,可以没有形式参数表,但是圆括号不能省略。,“,局部变量定义,”,是对在函数内部使用的局部变量进行定义。,“,函数体语句,”,是为完成函数的特定功能而设置的语句。,函数分类和定义,函数调用就是在一个函数体中引用另外一个已经定义的函数,前者称为主调用函数,后者称为被调用函数,函数调用的一般格式为:,函数名(实际参数列表);,对于有参数类型的函数,若实际参数列表中有多个实参,则各参数之间用逗号隔开。实参与形参顺序对应,个数应相等,类型应一致。,函数调用,在一个函数中调用另一个函数需要具备如下条件:,(,1,)被调用函数必须是已经存在的函数(库函数或者用户自己已经定义的函数。,如果函数定义在调用之后,那么必须在调用之前(一般在程序头部)对函数进行声明。,(,2,)如果程序使用了库函数,则要在程序的开头用,include,预处理命令将调用函数所需要的信息包含在本文件中。如果不是在本文件中定义的函数,那么在程序开始要用,extern,修饰符进行函数原型说明。,函数调用,中断是指通过硬件来改变,CPU,的运行方向。计算机在执行程序的过程中,外部设备向,CPU,发出中断请求信号,要求,CPU,暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为,“,中断,”,。,什么是中断,(,1,)中断服务程序:,CPU,响应中断后,转去执行相应的处理程序,该处理程序通常称之为中断服务程序。,(,2,)主程序:原来正常运行的程序称为主程序。,(,3,)断点:主程序被断开的位置(或地址)称为断点。,(,4,)中断源:引起中断的原因,或能发出中断申请的来源,称为中断源。,(,5,)中断请求:中断源要求服务的请求称为中断请求(或中断申请。,中断基本概念,同步工作,异常处理,实时处理,中断特点,中断系统的结构,MCS-51,中断系统内部结构示意图,MCS-51,系列单片机中断源,序号,中断源,说 明,1,外部中断,0,请求,由,P3.2,引脚输入,通过,IT0,位(,TCON.0,)来决定是低电平有效还是下降沿有效。一旦输入信号有效,即向,CPU,申请中断,并建立,IE0,(,TCON.1,)中断标志。任务,9,中采用下降沿有效,由按键产生下降沿。,2,外部中断,1,请求,由,P3.3,引脚输入,通过,IT1,位(,TCON.2,)来决定是低电平有效还是下降沿有效。一旦输入信号有效,即向,CPU,申请中断,并建立,IE1,(,TCON.3,)中断标志。,3,TF0,T0,溢出中断请求,当,T0,产生溢出时,,T0,溢出中断标志位,TF0,(,TCON.5,)置位(由硬件自动执行),请求中断处理。,4,TF1,T1,溢出中断请求,当,T1,产生溢出时,,T1,溢出中断标志位,TF1,(,TCON.7,)置位(由硬件自动执行),请求中断处理。,5,RI,或,TI,串行口中断请求,当接收或发送完一个串行帧时,内部串行口中断请求标志位,RI,(,SCON.0,)或,TI,(,SCON.1,)置位(由硬件自动执行),请求中断。,中断标志,中断标志位,位名称,说 明,TF1,T1,溢出中断标志,TCON.7,T1,被启动计数后,从初值开始加,1,计数,计满溢出后由硬件置位,TF1,,同时向,CPU,发出中断请求,此标志一直保持到,CPU,响应中断后才由硬件自动清,0,。也可由软件查询该标志,并由软件清,0,。前述的定时器编程都是采用查询方式实现。,TF0,T0,溢出中断标志,TCON.5,T0,被启动计数后,从初值开始加,1,计数,计满溢出后由硬件置位,TF0,,同时向,CPU,发出中断请求,此标志一直保持到,CPU,响应中断后才由硬件自动清,0,。也可由软件查询该标志,并由软件清,0,。,IE1,中断标志,TCON.3,IE1=1,,外部中断,1,向,CPU,申请中断。,IT1,中断触发方式控制位,TCON.2,当,IT1=0,,外部中断,1,控制为电平触发方式;当,IT1=1,,外部中断,1,控制为边沿(下降沿)触发方式。,IE0,中断标志,TCON.1,IE0=1,,外部中断,0,向,CPU,申请中断。,IT0,中断触发方式控制位,TCON.0,当,IT0=0,,外部中断,0,控制为电平触发方式;当,IT0=1,,外部中断,0,控制为边沿(下降沿)触发方式。,TI,串行发送中断标志,SCON.1,CPU,将数据写入发送缓冲器,SBUF,时,启动发送,每发送完一个串行帧,硬件都使,TI,置位;但,CPU,响应中断时并不自动清除,TI,,必须由软件清除。,RI,串行接收中断标志,SCON.0,当串行口允许接收时,每接收完一个串行帧,硬件都使,RI,置位;同样,,CPU,在响应中断时不会自动清除,RI,,必须由软件清除。,中断的开放和禁止,MCS-51,系列单片机的,5,个中断源都是可屏蔽中断,中断系统内部设有一个专用寄存器,IE,,用于控制,CPU,对各中断源的开放或屏蔽。,IE,寄存器格式如下:,EA,ES,ET1,EX1,ET0,EX0,D7,D6,D5,D4,D3,D2,D1,D0,IE(A8H),中断的开放和禁止,中断允许位,位名称,说明,EA,总中断允许控制位,IE.7,EA=1,,开放所有中断,各中断源的允许和禁止可通过相应的中断允许位单独加以控制;,EA=0,,禁止所有中断。,ES,串行口中断允许位,IE.4,ES=1,,允许串行口中断;,ES=0,禁止串行口中断。,ET1,T1,中断允许位,IE.3,ET1=1,,允许,T1,中断;,ET1=0,,禁止,T1,中断。,EX1,)中断允许位,IE.2,EX1=1,,允许外部中断,1,中断;,EX1=0,,禁止外部中断,1,中断。,ET0,T0,中断允许位,IE.1,ET0=1,,允许,T0,中断;,ET0=0,,禁止,T0,中断。,EX0,)中断允许位,IE.0,EX0=1,,允许外部中断,0,中断;,EX0=0,,禁止外部中断,0,中断。,中断优先级,MCS-51,系列单片机有两个中断优先级:高优先级和低优先级。,每个中断源都可以通过设置中断优先级寄存器,IP,确定为高优先级中断或低优先级中断,实现二级嵌套。同一优先级别的中断源可能不止一个,因此,也需要进行优先权排队。同一优先级别的中断源采用自然优先级。,中断优先级寄存器,IP,,用于锁存各中断源优先级控制位。,IP,中的每一位均可由软件来置,1,或清,0,,,1,表示高优先级,,0,表示低优先级。,中断优先级,中断优先级控制位,位名称,说明,PS,串行口中断优先控制位,IP.4,PS=1,,设定串行口为高优先级中断;,PS=0,,设定串行口为低优先级中断。,PT1,定时器,T1,中断优先控制位,IP.3,PT1=1,,设定定时器,T1,为高优先级中断;,PT1=0,,设定定时器,T1,为低优先级中断。,PX1,外部中断,1,中断优先控制位,IP.2,PX1=1,,设定外部中断,1,为高优先级中断;,PX1=0,,设定外部中断,1,为低优先级中断。,PT0,T0,中断优先控制位,IP.1,PT0=1,,设定定时器,T0,为高优先级中断;,PT0=0,,设定定时器,T0,为低优先级中断。,PX0,外部中断,0,中断优先控制位,IP.0,PX0=1,,设定外部中断,0,为高优先级中断;,PX0=0,,设定外部中断,0,为低优先级中断。,中断处理过程,中断响应,中断响应是指,CPU,对中断源中断请求的响应。,CPU,并非任何时刻都能响应中断请求,而是在满足所有中断响应条件、且不存在任何一种中断阻断情况时才会响应。,CPU,响应中断的条件有:有中断源发出中断请求;中断总允许位,EA,置,1,;申请中断的中断源允许位置,1,。,CPU,响应中断的阻断情况有:,CPU,正在响应同级或更高优先级的中断;当前指令未执行完;正在执行中断返回或访问寄存器,IE,和,IP,。,中断处理过程,中断响应过程就是自动调用并执行中断函数的过程。,C51,编译器支持在,C,源程序中直接以函数形式编写中断服务程序。常用的中断函数定义语法如下:,void,函数名(),interrupt n,其中,n,为中断类型号,,C51,编译器允许,0,31,个中断,,n,取值范围,0,31,。下面给出了,8051,控制器所提供的,5,个中断源所对应的中断类型号和中断服务程序入口地址:,中断源,n,入口地址,外部中断,0 00003H,定时,/,计数器,0 1000BH,外部中断,1 20013H,定时,/,计数器,1 3 001BH,串行口,4 0023H,中断处理过程,中断响应时间,中断响应时间是指从中断请求标志位置位到,CPU,开始执行中断服务程序的第一条语句所需要的时间。,1,)中断请求不被阻断的情况,外部中断响应时间至少需要,3,个机器周期,这是最短的中断响应时间。一般来说,若系统中只有一个中断源,则中断响应时间为,3,8,个机器周期。,2,)中断请求被阻断的情况,如果系统不满足所有中断响应条件、或者存在任何一种中断阻断情况,那么中断请求将被阻断,中断响应时间将会延长。,
展开阅读全文