收藏 分销(赏)

第7章-定时器计数器.ppt

上传人:精*** 文档编号:9250016 上传时间:2025-03-18 格式:PPT 页数:110 大小:1.40MB 下载积分:20 金币
下载 相关 举报
第7章-定时器计数器.ppt_第1页
第1页 / 共110页
第7章-定时器计数器.ppt_第2页
第2页 / 共110页


点击查看更多>>
资源描述
*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,7,章 定时器,/,计数器的工 作原理及应用,1,7.1,定时器,/,计数器的结构,AT89S51,定时器,/,计数器结构,见,图,7-1,,定时器,/,计数器,T0,由特殊功能寄存器,TH0,、,TL0,构成,,T1,由特殊功能寄存器,TH1,、,TL1,构成。,2,图,7-1,定时器,/,计数器结构框图,T0,、,T1,都有,定时器,和,计数器,两种工作模式,,,两种,模式实质都是对脉冲信号进行计数,只不过计数信号来源不同。,计数器模式,是对加在,T0,(,P3.4,),和,T1,(,P3.5,),两个引脚上的外部脉冲进行计数(见图,7-1,);,定时器模式,是对系统时钟信号经,12,分频后的内部脉冲信号(机器周期)计数。由于系统时钟频率是定值,可根据计数值计算出定时时间。两个定时器,/,计数器属于,增,1,计数器,,即每计一个脉冲,计数器增,1,。,T0,、,T1,具有,4,种工作方式,(方式,0,、,1,、,2,和,3,)。,3,图,7-1,特殊功能寄存器,TMOD,用于选择定时器,/,计数器,T0,、,T1,的工作模式和工作方式。特殊功能寄存器,TCON,用于控制,T0,、,T1,的启动和停止计数,同时包含了,T0,、,T1,状态。,计数器起始计数从初值开始。单片机,复位,时计数器初值为,0,,也可给计数器装入,1,个新的初值。,7.1.1,工作方式控制寄存器,TMOD,TMOD,用于选择定时器,/,计数器的工作模式和工作方式,字节地址为,89H,,不能位寻址,格式,见,图,7-2,。,4,8,位分两组,,高,4,位,控制,T1,,,低,4,位,控制,T0,。,TMOD,各位说明,如下,。,(,1,),GATE,门控位,GATE=0,,定时器是否计数,由控制位,TRx,(,x=0,,,1,)来控制。,5,图,7-2,寄存器,TMOD,格式,GATE=1,,定时器是否计数,由外中断引脚,I,NTx,*,上的电平与运行控制位,TRx,共同控制。,(,2,),M1,、,M0,工作方式选择位,M1,、,M0 4,种编码,对应于,4,种工作方式,的选择,,见,表,7-1,。,表,7-1M1,、,M0,工作方式选择,6,(,3,),C/T*,计数器模式和定时器,模式选择位,C/T*=0,,定时器模式,对系统时钟,12,分频后的脉冲进行计数。,C/T*=1,,计数器模式,计数器对外部输入引脚,T0,(,P3.4,)或,T1,(,P3.5,)的外部脉冲(负跳变)计数。,7.1.2,定时器,/,计数器控制寄存器,TCON,TCON,字节地址,88H,,位地址为,88H,8FH,。格式,见,图,7-3,。,7,图,7-3,TCON,格式,第,6,章已介绍与外中断有关的低,4,位。这里仅介绍高,4,位功能。,(,1,),TF1,、,TF0,计数溢出标志位,当计数器计数溢出时,该位置“,1,”。使用查询方式时,此位可供,CPU,查询,但应注意查询后,用软件及时将该位清“,0,”。使用中断方式时,作为中断请求标志位,进入中断服务程序后由硬件自动清“,0,”。,(,2,),TR1,、,TR0,计数运行控制位,TR1,位(或,TR0,),=1,,启动计数器计数的必要条件。,TR1,位(或,TR0,),=0,,停止计数器计数。,该位可由软件置“,1,”或清“,0,”。,8,9,7.2,定时器,/,计数器的,4,种工作方式,4,种工作方式,分别介绍如下。,7.2.1,方式,0,当,M1,、,M0,=,00,,设置为方式,0,,定时器,/,计数器等效逻辑结构,见,图,7-4,(以,T1,为例,,TMOD.5,、,TMOD.4=00,)。,10,图,7-4,定时器,/,计数器方式,0,的逻辑结构框图,方式,0,为,13,位计数器,,由,TL,x,(,x,=0,,,1,)的低,5,位和,TH,x,的高,8,位构成。,TL,x,低,5,位溢出则向,TH,x,进位,,TH,x,计数溢出则把,TCON,中的溢出标志位,TF,x,置“,1,”。,图,7-2,中,,C/T*,位控制电子开关决定,2,种工作模式。,(,1,),C/T*=0,,电子开关打在上面,,T1,(或,T0,)为定时器工作模式,系统时钟,12,分频后的脉冲作为计数信号。,(,2,),C/T*=1,,电子开关打在下面,,T1,(或,T0,)为计数器工作模式,对,P3.5,(或,P3.4,)引脚上的外部输入脉冲计数,当引脚上发生负跳变时,计数器加,1,。,GATE,位状态决定定时器,/,计数器运行控制取决于,TRx,一个条件,还是取决于,TRx,和,I,NTx,*,引脚状态两个条件。,11,(,1,),GATE=0,时,,A,点(见图,7-4,)电位恒为,1,,,B,点电位仅取决于,TRx,状态。,TRx,=1,,,B,点为高电平,控制端控制电子开关闭合,允许,T1,(或,T0,)对脉冲计数。,TRx,=0,,,B,点为低电平,电子开关断开,禁止,T1,(或,T0,)计数。,(,2,),GATE=1,时,,B,点电位由,I,NTx,*,(,x,=0,,,1,)的电平和,TR,x,的状态两个条件来确定。当,TR,x,=1,,且,I,NTx,*=1,时,,B,点才为,1,,电子开关闭合,允许,T1,(或,T0,)计数。故这种情况下计数器是否计数是由,TR,x,和,I,NTx,*,两个条件来共同控制的。,7.2.2,方式,1,当,M1,、,M0,=,01,时,工作于方式,1,,等效电路逻辑结构,见,图,7-5,。,12,13,图,7-5,方式,1,的逻辑结构框图,方式,1,和方式,0,差别仅仅在于计数器的位数不同,方式,1,为,16,位计数器,由,THx,高,8,位和,TLx,低,8,位构成(,x=0,,,1,),方式,0,则为,13,位计数器,有关控制状态位含义(,GATE,、,C/T*,、,TFx,、,TRx,)与方式,0,相同。,7.2.3,方式,2,方式,0,和方式,1,最大特点是计数溢出后,计数器为全,0,。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题,这会影响定时精度,方式,2,就是为解决此问题而设置的。,当,M1,、,M0=10,时,工作方式,2,,等效逻辑结构,见,图,7-6,(以,T1,为例,,x=1,)。,工作方式,2,为,自动恢复初值(初值自动装入),的,8,位定时器,/,计数器,,TLx,(,x=0,,,1,)作为常数缓冲器,当,TLx,计数溢出时,在溢出标志,TFx,置“,1,”的同时,还自动将,THx,中的初值送至,TLx,,使,TLx,从初值开始重新计数。定时器,/,计数器方式,2,工作过程,见,图,7-7,。,14,15,图,7-6,方式,2,逻辑结构框图,16,图,7-7,方式,2,工作过程,方式,2,可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可相当精确地定时。,17,7.2.4,方式,3,方式,3,是为增加一个附加的,8,位定时器,/,计数器而设置的,从而使,AT89S51,具有,3,个定时器,/,计数器。,方式,3,只适用于,T0,,,T1,不能工作在方式,3,。,T1,方式,3,时相当于,TR1=0,,停止计数(此时,T1,可作为串口波特率产生器)。,1,工作方式,3,下的,T0,当,TMOD,的低,2,位为,11,时,,T0,被选为方式,3,,各引脚与,T0,的逻辑关系,见,图,7-8,。,T0,分为两个独立的,8,位计数器,TL0,和,TH0,,,TL0,使用,T0,的状态控制位,C/T*,、,GATE,、,TR0,,而,TH0,被固定为一个,8,位定时器(不能作为外部计数模式),并使用定时器,T1,的状态控制位,TR1,,同时占用定时器,T1,的中断请求源,TF1,。,18,2,T0,工作在方式,3,时,T1,的各种工作方式,一般情况下,当,T1,用作串口波特率发生器时,,T0,才工作在方式,3,。,T0,方式,3,时,,T1,可为方式,0,、,1,、,2,,作为串口波特率发生器,或不需要中断的场合。,19,图,7-8,T0,方式,3,的逻辑结构框图,20,(,1,),T1,工作在方式,0,T1,的控制字中,M1,、,M0=00,时,,T1,工作在方式,0,,工作示意图如,图,7-9,所示。,(,2,),T1,工作在方式,1,当,T1,的控制字中,M1,、,M0=01,时,,T1,工作在方式,1,,工作示意,见,图,7-10,。,21,图,7-9,T0,方式,3,时,T1,为方式,0,工作示意图,(,3,),T1,工作在方式,2,当,T1,控制字中,M1,、,M0=10,时,,T1,为方式,2,,工作示意如,图,7-11,所示。,22,图,7-10,T0,方式,3,时,T1,为方式,1,工作示意图,图,7-11,T0,方式,3,时,T1,为方式,2,工作示意图,(,4,),T1,设置在方式,3,T0,方式,3,时,再把,T1,也设置成方式,3,,此时,T1,停止计数。,23,7.3,对外部输入的计数信号的要求,计数器模式时,计数脉冲来自外部输入引脚,T0,或,T1,。当输入信号产生负跳变时,计数值增,1,。每个机器周期,S5P2,期间,都对外部输入引脚,T0,或,T1,进行采样。如在第,1,个机器周期中采得值为,1,,而在下一个机器周期中采得的值为,0,,则在紧跟着的再下一个机器周期,S3P1,期间,计数器加,1,。,由于确认一次负跳变要花,2,个,机器周期,即,24,个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率,1/24,。,24,如选用,6MHz,晶体,,允许输入脉冲频率最高为,250kHz,。如选用,12MHz,频率晶体,则可输入最高频率,500kHz,外部脉冲。对外输入信号占空比没有限制,但为确保某一给定电平在变化前能被采样,1,次,则,该,电平至少保持,1,个机器周期,。故对外部输入信号要求,见,图,7-12,,图中,T,cy,为机器周期。,图,7-12,对外部计数输入信号的要求,25,26,27,7.4,定时器,/,计数器的编程和应用,4,种工作方式中,方式,0,与方式,1,基本相同,只是计数位数不同。方式,0,为,13,位,方式,1,为,16,位。由于方式,0,是为兼容,MCS-48,而设,计数初值计算复杂,所以在实际应用中,一般不用方式,0,,常采用方式,1,。,7.4.1 P1,口控制,8,只,LED,每,0.5s,闪亮一次,【例,7-1,】,在,AT89S51,的,P1,口上接有,8,只,LED,,原理电路见,图,7-13,。采用,T0,方式,1,的定时中断方式,使,P1,口外接的,8,只,LED,每,0.5s,闪亮一次,。,28,图,7-13,方式,1,定时中断控制,LED,闪亮,(,1,)设置,TMOD,寄存器,T0,工作在方式,1,,应使,TMOD,寄存器的,M1,、,M0=01,;应设置,C/T*=0,,为定时器模式;对,T0,的,运行控制仅由,TR0,来控制,,应使相应的,GATE,位为,0,。定时器,T1,不使用,各相关位均设为,0,。所以,,TMOD,寄存器应初始化为,0 x01,。,(,2,)计算,T0,的计数初值,设定时时间,5ms,(即,5000s,),设,T0,计数,初值为,X,,假设晶振的频率为,11.0592MHz,,则定时时间为:,29,定时时间,=(2,16,X),12/,晶振频率,则,5000,=(2,16,X),12/11.0592,得,X=60928,转换成十六进制,:,0 xee00,,其中,0 xee,装入,TH0,,,0 x00,装入,TL0,。,(,3,)设置,IE,寄存器,本例由于采用定时器,T0,中断,因此需将,IE,寄存器中的,EA,、,ET0,位置,1,。,30,(,4,)启动和停止定时器,T0,将定时器控制寄存器,TCON,中的,TR0=1,,则启动定时器,T0,;,TR0=0,,则停止定时器,T0,定时。,参考程序:,#include,char i=100;,void main(),TMOD,=0 x01;/,定时器,T0,为,方式,1,TH0,=0 xee;/,设置定时器初值,TL0,=0 x00;,31,P1=0 x00,;/P1,口,8,个,LED,点亮,EA=1;/,总中断开,ET0=1;/,开,T0,中断,TR0=1;/,启动,T0,while(1);/,循环等待,;,void timer0()interrupt 1/,T0,中断程序,TH0,=0 xee;/,重新赋初值,TL0,=0 x00;,32,i-;/,循环次数减,1,if(i,0;i-)/,变量,i,由实际参数传入一个值,/,因此,i,不能赋初值,for(j,=0;j125;j+),;/,空函数,void main()/,主函数,TMOD,=0 x50;/,设置定时器,T1,为方式,1,计数,TH1,=0 xff;/,向,TH1,写入,初值的,高,8,位,TL1,=0 xfc;/,向,TL1,写入,初值的,低,8,位,EA,=1;/,总中断允许,39,40,ET1=1;/,定时器,T1,中断允许,TR1=1;/,启动定时器,T1,while(1);,/,无穷循环,等待计数中断,void T1_int(void)interrupt 3 /T1,中断函数,for(;)/,无限循环,P1=0 xff,;/,8,位,LED,全灭,Delay(500);/,延时,500ms,P1=0,;/,8,位,LED,全亮,Delay(500);/,延时,500ms,41,42,7.4.3,控制,P1.0,产生周期为,2ms,的方波,【例,7-3,】,假设系统时钟为,12MHz,,设计电路并编写程序实现从,P1.0,引脚上输出一个,周期为,2ms,的方波,,,见,图,7-15,。,要在,P1.0,上产生,周期为,2ms,的,方波,,,定时器应产生,1ms,的定时中断,,定时时间到则在中断服务程序中,对,P1.0,求,反,。使用定时器,T0,,方式,1,定时中断,,GATE,不起作用。,本例的原理电路,见,图,7-16,。,其中在,P1.0,引脚接有,虚拟示波器,,用来观察产生的周期,2ms,的方波。,图,7-15,定时器控制,P1.0,输出一个周期,2ms,方波,43,44,图,7-16,定时器控制,P1.0,输出周期,2ms,的方波的原理电路,45,下面来,计算,T0,初值,X,:,设,T0,的初值为,X,,有,(2,16,X,),1,10,6,=1,10,3,即,65,536,X,=1,000,得,X,=64 536,,化为,16,进制数就是,0 xfc18,。将,高,8,位,0 xfc,装入,TH0,,,低,8,位,0 x18,装入,TL0,。,参考程序如下:,#include /,头文件,reg51.h,sbit,P1_0=P10;/,定义特殊功能寄存器,P1,的位变量,P1_0,void,main(void,)/,主程序,TMOD=0 x01;/,设置,T0,为方式,1,TR0=1;/,接通,T0,while(1),/,无限循环,46,TH0=0 xfc;,/,置,T0,高,8,位初值,TL0=0 x18;,/,置,T0,低,8,位初值,dowhile(!TF0);,/,TF0,为,0,原地循环,,,为,1,则,T0,溢出,往下执行,P1_0=!P1_0;/P1.0,状态求反,TF0=0;/TF0,标志清零,仿真时,右键单击虚拟数字示波器,出现下拉菜单,点击,“,Digital oscilloscope,”,选项,就会在数字示波器上显示,P1.0,引脚输出,周期为,2ms,方波,,,如,图,7-17,所示。,47,图,7-17,虚拟数字示波器显示的,2ms,的方波波形,48,7.4.4,利用,T1,控制发出,1kHz,的音频信号,【例,7-4,】,利用,T1,的中断控制,P1.7,引脚,输出频率为,1kHz,方波音频信号,驱动蜂鸣器发声。系统时钟为,12MHz,。,方波音频信号周期,1ms,,因此,T1,的,定时中断时间为,0.5 ms,,进入中断服务程序后,对,P1.7,求反。电路,见,图,7-18,。,先计算,T1,初值,系统时钟为,12MHz,,则,机器,周期,为,1s,。,1kHz,音频信号周期为,1ms,,要定时计数的,脉冲数为,a,。则,T1,初值,:,TH1,=(65536,a,)/256,;,TL1,=(65536,a,)%256,49,50,图,7-18,控制蜂鸣器发出,1kHz,的音频信号,参考程序如下:,#include /,包含头文件,sbit,sound=P17;/,将,sound,位定义为,P1.7,脚,#define,f1(a),(65536-a)/256,/,定义装入,定时器高,8,位时间常数,#define,f2(a),(65536-a)%256,/,定义装入,定时器低,8,位时间常数,unsigned,int,i=500;,unsigned,int,j=0;,void,main(void,),EA=1;/,开总中断,.,ET1=1;/,允许定时器,T1,中断,.,TMOD=0 x10;/TMOD=0001 000B,,使用,T1,的方式,1,定时,TH1=f1(i);,/,给,T1,高,8,位赋初值,.,TL1=f2(i);,/,给,T1,低,8,位赋初值,.,TR1=1;/,启动,T1,while(1),51,52,/,循环等待,i=460;,while(j,2000);,j=0;,i=360;,while(j,0;x-),65,for(y,=110;y0;y-);,void,display(uint,a,uint,b,uint,c,uint,d,uint,e,uint,f),/,显示函数,P2=0 xfe,;,P0=,tablef,;,delay(2);,P2=0 xfd;,P0=,tablee,;,delay(2);,P2=0 xfb;,P0=,tabled,;,66,delay(2);,P2=0 xf7;,P0=,tablec,;,delay(2);,P2=0 xef;,P0=,tableb,;,delay(2);,P2=0 xdf;,P0=,tablea,;,delay(2);,void,read_count,(),/,读取计数寄存器内容,函数,67,68,do,count_high,=TH1;/,读高字节,count_low,=TL1;/,读低字节,while,(,count_high,!=TH1);,num=,count_high,*256+count_low;,/*,可将两字节的机器周期数进行显示处理,*,/,void main(),while(1),flag=0;,TMOD,=0 x90;,/,设置定时器,T1,为方式,1,定时,TH1=0;/,向定时器,T1,写入计数初值,TL1=0;,while(P3_3=1);,/,等待,I,NT1*,变低,TR1=1;/,如果,I,NT1*,为低,启动,T1,(未真正开始计数),while(P3_3=0);,/,等待,I,NT1*,变高,变高后,T1,真正开始计数,while(P3_3=1);,/,等待,I,NT1*,变低,变低后,T1,停止计数,TR1=0;,read_count,();/,读计数寄存器内容的函数,shiwan,=num/100000;,wan=num%100000/10000;,qian,=num%10000/1000;,bai,=num%1000/100;,shi=num%100/10;,69,ge,=num%10;,while(flag,!=100),/,减小刷新频率,flag+;,display(ge,shi,bai,qian,wan,shiwan,);,执行上述程序仿真,把,I,NT1*,引脚上出现的,正脉冲宽度,显示在,LED,数码管显示器上,。晶振频率为,12MHz,,如果默认信号源输出频率为,1kHz,的方波,则,数码管显示为,500,。,注意:在仿真时,偶尔显示,501,是因为信号源的问题,若将信号源换成频率固定的激励源则不会出现此问题。,70,71,72,7.4.7 LCD,时钟的设计,【例,7-7,】,使用定时器实现一个,LCD,显示时钟。采用,LCD 1602,,具体见第,5,章的绍。,LCD,时钟的原理电路,见,图,7-22,。,最小计时单位是秒,,如何获得,1s,的定时?,可将,T0,定时时间定为,50ms,,采用中断方式进行溢出次数累计,满,20,次,则秒计数变量,second,加,1,;若秒计满,60,,则分计数变量,minute,加,1,,同时将秒计数变量,second,清,0,;若分钟计满,60,,则小时计数变量,hour,加,1,;若小时计数变量满,24,,则将小时计数变量,hour,清,0,。,图,7-22,LCD,时钟的原理电路,73,先将定时器以及各计数变量设定完毕,然后调用时间显示子程序。秒计时由,T0,中断服务子程序来实现,。,参考程序如下:,#include,#include,#define,uchar,unsigned char,#define,uint,unsigned,int,uchar,int_time,;/,定义中断次数计数变量,uchar,second;/,秒计数变量,74,uchar,minute;/,分钟计数变量,uchar,hour;/,小时计数变量,uchar,code date=,H.I.T.CHINA,;/,LCD,第,1,行,显示的内容,uchar,code time=,TIME 23:59:55,;/,LCD,第,2,行,显示的内容,uchar,second=55,minute=59,hour=23;,void,clock_init,(),uchar,i,j,;,for(i,=0;i16;i+),write_data(datei,);,write_com(0 x80+0 x40);,75,for(j,=0;j16;j+),write_data(timej,);,void,clock_write,(,uint,s,uint,m,uint,h),write_sfm(0 x47,h);,write_sfm(0 x4a,m);,write_sfm(0 x4d,s);,void main(),init1602();,/LCD,初始化,clock_init,();,/,时钟初始化,76,TMOD=0 x01;/,设置定时器,T0,为方式,1,定时,EA=1;/,总中断开,ET0=1;/,允许,T0,中断,TH0=(65536-46483)/256;,/,给,T0,装初值,TL0=(65536-46483)%256;,TR0=1;,int_time,=0;/,中断次数、秒、分、时单元清,0,second=55;,minute=59;,hour=23;,while(1),clock_write(second,minute,hour);,77,void T0_interserve(void)interrupt 1 using 1,/T0,中断服务子程序,int_time,+;,/,中断次数加,1,if(int_time,=20),/,若,中断次数,计满,20,次,int_time,=0;,/,中断次数变量清,0,second+;,/,秒计数变量加,1,if(second,=60),/,若,计满,60s,second=0;,/,秒计数变量清,0,minute+;,/,分计数变量加,1,78,if(minute,=60),/,若计满,60,分,minute=0;/,分计数变量清,0,hour+;/,小时计数变量加,1,if(hour,=24),hour=0;/,小时计数计满,24,,将小时计数变量清,0,TH0,=(65536-46083)/256;,/,定时器,T0,重新赋值,TL0,=(65536-46083)%256;,执行上述程序仿真运行,就会在,LCD,上,显示实时时间。,79,80,7.5 AT89S52,新增定时器,/,计数器,T2,简介,AT89S52,与,AT89S51,相比,新增加了一个,16,位定时器,/,计数器,T2,(可简写为,T2,)。,与,T2,相关的特殊功能寄存器共有,2,个,:,T2CON,和,T2MOD,。,7.5.1 T2,的特殊功能寄存器,T2CON,和,T2MOD,1.,特殊功能寄存器,T2CON,T2,有,3,种工作方式,:自动重装载(递增或递减计数)、捕捉和波特率发生器,由特殊功能寄存器中的控制寄存器,T2CON,中的相关位来进行选择。,T2CON,的字节地址为,C8H,,可,位寻址,,位地址,C8H,CFH,,格式见,图,7-23,。,81,图,7-23,TCON,格式,T2CON,寄存器,各位的定义,如下:,TF2,(,D7,):,T2,计数溢出中断请求标志位。当,T2,计数溢出时,由内部硬件置位,TF2,,向,CPU,发出中断请求。但是当,RCLK,位或,TCLK,位为,1,时将不予置位。本标志位必须由软件清,0,。,82,EXF2,(,D6,):,T2,外部中断请求标志位。当由引脚,T2EX,上的负跳变引起“捕捉”或“自动重装载”且,EXEN2,位为,1,,则置位,EXF2,标志位,并向,CPU,发出中断请求。该标志位必须由软件清,0,。,RCLK,(,D5,):,串行口接收时钟标志位。当,RCLK,位为,1,时,串行通信端使用,T2,的溢出信号作为串行通信方式,1,和方式,3,的接收时钟;当,RCLK,位为,0,时,使用,T1,的溢出信号作为串行通信方式,1,和方式,3,的接收时钟。,TCLK,(,D4,):,串行发送时钟标志位。当,TCLK,位为,1,时,串行通信端使用,T2,的溢出信号作为串行通信方式,1,和方式,3,的发送时钟;当,TCLK,位为,0,时,串行通信端使用,T1,的溢出信号作为串行通信方式,1,和方式,3,的发送时钟;,83,EXEN2,(,D3,):,T2,外部采样允许标志位。当,EXEN2,位,=1,时,如果,T2,不是正工作在串行口的时钟,则在,T2EX,引脚(,P1.1,)上的负跳变将触发“捕捉”或“自动重装载”操作;当,EXEN2,位,=0,时,在,T2EX,引脚(,P1.1,)上的负跳变对,T2,不起作用。,TR2,(,D2,):,T2,启动,/,停止控制位。当软件置位,TR2,时,即,TR2=1,,则启动,T2,开始计数,当软件清,TR2,位时,即,TR2=0,,则,T2,停止计数。,84,C/,T2*,(,D1,):,T2,的计数或定时方式选择位,当设置,C/T2*,=1,时,为对外部事件计数方式;,C/T2*,=0,时,为定时方式。,CP/RL2,(,D0,):,T2,捕捉,/,自动重装载选择位。当设置,CP/RL2=1,时,如果,EXEN2,为,1,,则在,T2EX,引脚(,P1.1,)上的负跳变将触发“捕捉”操作;当设置,CP/RL2=0,时,如果,EXEN2,为,1,,则,T2,计数溢出或,T2EX,引脚上的负跳变都将引起自动重装载操作;当,RCLK,位为,1,或,TCLK,位为,1,,,CP/RL2,标志位不起作用。,T2,计数溢出时,将迫使,T2,进行自动重装载操作。,85,通过软件编程对,T2CON,中的相关位进行设置来,选择,T2,的,3,种,工作方式,:,16,位自动重装载(递增或递减计数)、捕捉和波特率发生器,如,表,7-2,所示。,86,2.,特殊功能寄存器,T2MOD,与,T2,相关的另一个特殊功能寄存器为,T2MOD,。,T2MOD,寄存器的格式见,图,7-24,。,图,7-24,T2MOD,的格式,87,T2MOD,寄存器,各位的定义,如下:,T2OE,(,D1,):,T2,输出的启动位。,DCEN,(,D0,):,置位为,1,时允许,T2,增,1/,减,1,计数,并由,T2EX,引脚(,P1.1,)上的逻辑电平决定是增,1,还是减,1,计数。,:,保留位。,当单片机复位时,,DCEN,为,0,,默认,T2,为增,1,计数方式;当把,DCEN,置,1,时,将由,T2EX,引脚(,P1.1,)上的逻辑电平决定,T2,是增,1,还是减,1,计数。,88,89,7.5.2 T2,的,16,位自动重装载方式,工作方式见,图,7-25,。,图中,RCAP2L,为陷阱寄存器,低字节,,字节地址为,CAH,;,RCAP2H,为陷阱寄存器,高字节,,字节地址为,CBH,。,T2,引脚为,P1.0,,,T2EX,引脚为,P1.1,,因此当使用,T2,时,,P1.0,和,P1.1,就不能作,I/O,口用了。,另外有两个中断请求,通过一个“或”门输出。因此当单片机响应中断后,在中断服务程序中应该用软件识别是哪一个中断请求,分别进行处理,该中断请求标志位必须用软件清“,0”,。,(,1,),当设置,T2MOD,寄存器的,DCEN,位为,0,(或上电复位为,0,)时,,T2,为增,1,型自动重新装载方式,此时根据,T2CON,寄存器中的,EXEN2,位的状态,可选择两种操作方式:,90,图,7-25,T2,的自动重装载方式的工作示意图,91,当,EXEN2,标志位清,0,,,T2,计满溢出回,0,,一方面使中断请求标志位,TF2,置,1,,同时又将陷阱寄存器,RCAP2L,、,RCAP2H,中预置的,16,位计数初值自动重装入计数器,TL2,、,TH2,中,自动进行下一轮的计数操作,其功能与,T0,、,T1,的方式,2,(自动装载)相同,只是本计数方式为,16,位,计数范围大。,RCAP2L,、,RCAP2H,寄存器的计数初值由软件预置。,当设置,EXEN2,标志位为,1,,,T2,仍具有上述的功能,并增加了新的特性。当外部输入引脚,T2EX,(,P1.1,)产生负跳变时,能触发三态门将,RCAP2L,、,RCAP2H,陷阱寄存器中的计数初值自动装载到,TH2,和,TL2,中,重新开始计数,并置位,EXF2,为,1,,发出中断请求。,(,2,),当,T2MOD,寄存器的,DCEN,位置为,1,时,可以使,T2,既可以增,1,计数,也可实现减,1,计数,,增,1,还是,减,1,取决于,T2EX,引脚,上的逻辑电平,。,图,7-26,为,T2,增,1/,减,1,计数方式的结构示意图。,92,图,7-26,T2,的增,1/,减,1,计数的工作示意图,93,由图,7-26,可见,当设置,DCEN,位为,1,时,可以使,T2,具有增,1/,减,1,计数功能。,当,T2EX,(,P1.1,)引脚为“,1”,时,,T2,执行增,1,计数功能。当不断加,1,计满溢出回,0,时,一方面置位,TF2,为,1,,发出中断请求,另一方面,溢出信号触发三态门,将存放在陷阱寄存器,RCAP2L,、,RCAP2H,中的计数初值自动装载到,TL2,和,TH2,计数器中继续进行加,1,计数。,当,T2EX,(,P1.1,)引脚为“,0”,时,,,T2,执行减,1,计数功能。当,TL2,和,TH2,计数器中的值等于陷阱寄存器,RCAP2L,、,RCAP2H,中的值时,产生向下溢出,一方面置位,TF2,为,1,,发出中断请求,另一方面,下溢信号触发三态门,将,0FFFFH,装入,TL2,和,TH2,计数器中,继续进行减,1,计数。,中断请求标志位,TF2,和,EXF2,位必须用软件清,0,。,94,【,例,7-8】,利用,T2,实现,1,秒定时并控制,P1.0,引脚上的,LED 1,秒闪灭,1,次,晶振频率为,12MHz,。,编程思想:,将,T2,设置为,1/16,秒的定时,定时中断,16,次,即为,1,秒,,1,秒时间到后,把,P1.0,的状态求反。,定时初值,x,计算,:每秒中断,16,次,则每次溢出为,1000000/16=62500,个机器周期。,因此,:65536-x=62500,初值,x=3036=0BDCH,。,95,96,说明:,在中断函数中用到了,静态变量,“,static,uint,i”,。静态变量的特点是语句执行后,其,占用的的存储单元不释放,,在下一次执行该语句时,该变量仍为上一次的值,它只需赋一次初值。也就是说,只有在第一次进中断时“,uint,i=0”,,才对,i,赋值,以后再进入中断时,不会再对,i,赋值。,97,98,7.5.3 T2,的捕捉方式,捕捉方式就是及时“捕捉”住输入信号发生的跳变及有关信息。常用于精确测量输入信号的变化如脉宽等等。捕捉方式的工作示意结构见,图,7-27,。,根据,T2CON,寄存器中,EXEN2,位的不同设置,“,捕捉,”方式有,两种选择,。,(,1,)当,EXEN2,位,=0,时,,T2,是一个,16,位的定时器,/,计数器。当设置,C/,位为,1,时,选择外部计数方式,即对,T2,引脚(,P1.0,)上的负跳变信号进行计数。计数器计满溢出时置,1,中断请求标志,TF2,,发出中断请求信号。,CPU,响应中断进入该中断服务程序后,必须用软件将标志位,TF2,清,0,。其他操作均与,T0,和,T1,的工作方式,1,相同。,(,2,)当,EXEN2,位,=1,时,,T2,除上述功能外,还可增加“捕捉”功能。当外部,T2EX,引脚(,P1.1,)上的信号发生负跳变,将选通三态门控制端(见图,7-27“,捕捉”处),把计数器,TH2,和,TL2,中的当前计数值分别“捕捉”进,RCAP2L,和,RCAP2H,中,同时,T2EX,引脚(,P1.1,)上的信号负跳变将置位,T2CON,的的,EXF2,标志位,向,CPU,请求中断。,99,图,7-27,T2,的捕捉方式结构示意图,100,7.5.4 T2,的,波特率发生器,方式及,可编程时钟,输出,T2,可工作于波特率发生器方式,还可作为可编程时钟输出。,1.,波特率发生器方式,T2,具有专用的“波特率发生器”(波特率发生器就是控制串行口接收,/,发送数字信号的时钟发生器)的工作方式。通过软件置位,T2CON,寄存器中的,RCLK,和,/,或,TCLK,,可将,T2,设置为波特率发生器。需要注意的是,如果,T2,用于波特率发生器和,T1,用于别的功能,则这个接收,/,发送波特率可能是不同的。,当置位,RCLK,和,/,或,TCLK,,,T2,进入波特率发生器模式,如,图,7-28,所示。由,图,7-28,,当设置,T2CON,寄存器中的,C/,为,0,,设置,RCLK,和,/,或,TCLK,为,1,时,输出,16,分频的接收,/,发送波特率。,101,图,7-28,T2,作为串行通信波特率发生器示意图,102,另外通过对,T2EX,引脚(,P1.1,)跳变信号的检测,并置位,EXF2,中断请求标志位,向,CPU,请求中断。需要注意的是,图,7-28,中的主振频率,f,osc,是经过,2,分频,而不是,12,分频。,T2,工作在波特率发生器方式,属于,16,位自动重装载的定时模式。串行通信方式,1,和方式,3,(见第,8,章的介绍)的波特率计算公式为:,方式,1,和,方式,3,的波特率,=,定时器,T2,的溢出率,/16,103,T2,的波特率发生器可选择定时模式或计数模式,一般都选择定时模式。注意,在选择定时器使用时,是主振频率,f,osc,经,12,分频为一个机器周期作为加,1,计数信号,而作为波特率发生器使用时是以每个时钟状态,S,(,2,分频主振频率)作为加,1,计数信号。,因此,串行通信方式,1,和方式,3,的波特率计算公式,为:,方式,1,和,方式,3,的波特率,(,b/s,)=(,f,osc/32)65536-(RCAP2H RCAP2L),(,7-1,),104,式(,7-1,)中“,RCAP2H RCAP2L”,为,T2,的初值。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服