1单片机原理与接口技术韦必忠桂林电子科技大学建筑与交通工程学院Email:wbz@guet.edu.cnMCS-51单片机定时器/计数器35.1定时器/计数器概述软件定时:执行一个循环程序进行时间延迟。定时准确,不需要外加硬件电路,但增加CPU开销。硬件定时:通过硬件电路实现定时,不占用CPU时间,但使用不够方便。可编程定时器定时:通过对系统时钟脉冲的计数实现定时。计数值通过程序设定,定时准确,使用方便灵活。计数与定时:定时器/计数器实际上是加1计数器。当它对外部事件进行计数时,由于频率不固定,此时称之为计数器。当它对内部固定频率的机器周期进行计数时,称之为定时器。计数器容量:8051单片机有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成,即每个计数器都是16位的计数器,最大计数量是65536.定时/计数器的结构和工作原理(一)、定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。GATEC/TM1M0GATEC/TM1M0TH1TL1TH0TL0T1方式T0方式T1引脚T0引脚机器周期脉冲内部总线TMODTCON外部中断相关位TF1TR1TF0TR0(二)、定时/计数器的工作原理计数次数和时间之间的确十分相关;只要计数脉冲的间隔相等,则计数值就代表了时间的流逝;单片机的晶振经过12分频后获得一个脉冲源,如果晶振频率12MHZ,则每秒产生1M脉冲,一个脉冲就是1微秒,所以计数脉冲的间隔与晶振频率有关。(二)、定时/计数器的工作原理加1计数器输入的计数脉冲有两个来源:(1)由系统的时钟振荡器输出脉冲经12分频后送来;(2)另一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。设置为定时器模式时:加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。所以:计数值N乘以机器周期Tcy就是定时时间t。一旦振荡周期确定,机器周期亦确定。设置为计数器模式时:外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。最高计数频率是晶振频率的1/24。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2s。11定时器/计数器的定时和计数功能MCS-51系列单片机有两个可编程定时器/计数器:T0、T1,16位寄存器,加法计数结构,地址为:T0(TH0,TL0):8CH,8AHT1(TH1,TL1):8DH,8BH特殊功能寄存器每个寄存器(T0,T1)都具有定时和计数功能12MCS-51定时/计数器核心是一个16位计数器(寄存器)。加1信号来源:外部计数脉冲、内部时钟脉冲。信号来源方式:由特殊功能寄存器TMOD设置位确定。,计数方式(外部);,定时方式(内部)。0T/C1T/CT/CT/C80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD:用于设置其工作方式;TCON:用于控制其启动和中断申请。5.2MCS-51定时/计数器控制与状态寄存器14工作方式控制寄存器TMOD(状态寄存器)GATETC/1M0M0M1MTC/GATE0计数器定时/1计数器定时/76543210字节地址89H(不可以位寻址)15M1M0为操作方式选择位111001003210方式方式方式方式无效位计数器,分成两个位计数器自动再装入位计数器位计数器1T80T816130M1M操作方式功能说明:选择定时/计数器模式,计数模式;,定时模式GATE:选通控制GATE=0,选通,通过TRX启动定时器。GATE=1,端口高电平,通过TRX启动定时器。XINT0T/C1T/CT/C16启停与中断控制寄存器TCON(控制寄存器)字节地址88HTCON由定时/计数器和中断系统合用。TR0:定时/计数器0启停控制位由软件控制定时/计数器0的启动/停止。TR1:定时/计数器1启停控制位由软件控制定时/计数器1的启动/停止。17TF0:定时/计数器0中断请求标志位当定时/计数器0计数回0时,由内部硬件置位TF0(TF0=1),请求中断。中断服务程序一旦执行,硬件自动清0(TF0=0)。TF1:定时/计数器1中断请求标志位当定时/计数器1计数回0时,由内部硬件置位TF1(TF1=1),请求中断。中断服务程序一旦执行,硬件自动清0(TF1=0)。18IE0:外部中断0中断请求标志IT0=1,负跳变触发中断,硬件置IE0=1,当转向中断服务程序后,硬件自动清IE0=0。IT0=0,低电平触发中断。硬件置IE0=1,当转向中断服务程序后,硬件自动清IE0=0。IE1:外部中断1中断请求标志IT1=1,负跳变触发中断,硬件置IE1=1,当转向中断服务程序后,硬件自动清IE1=0。IT1=0,低电平触发中断。硬件置IE1=1,当转向中断服务程序后,硬件自动清IE1=0。0INT0INT1INT1INT19IT0:外部中断0触发方式控制位软件设置。IT0=1,外部中断,发生10跳变,产生中断请求,向主机申请中断。IT0=0,则端口低电平触发中断。IT1:外部中断1触发方式控制位软件设置。IT1=1,外部中断,发生10跳变,产生中断请求,向主机申请中断。IT1=0,则端口低电平触发中断。以上后四项用于中断系统。TCON可位寻址,其位地址为88H—8FH。1INT0INT0INT1INT205.3定时/计数器的工作方式(工作模式)设置(TMOD寄存器)选择定时模式还是计数模式;对M1M0的设置,用于选择T0、T1的四种操作(工作)方式。四种工作模式:即模式0、模式1、模式2、模式3。TL0、TH0,TL1、TH1两对定时/计数器T/C21(1)定时/计数方式0(13位计数器)以定时/计数器0(T0)为例TH0全部8位,TL0低5位构成13位定时/计数器。当时(定时方式),开关接至振荡12分频输出;当时(计数方式),开关接通T0(P3.4)当计数脉冲发生负跳变计数器加1。0T/C1T/C22)(bit80TH)(bit50TL0TF&1≥1分频120=TC/1=TC/).(43P0T0TRGATE0INT).(23POSC控制中断请求计数示意图方式位定时/130GATE:看图,选择了定时或计数工作方式后,定时/计数脉冲不一定能到达计数器端,中间还有一个开关,如果这个开关不合上,计数脉冲就没法过去。那开关什么时候合上呢?有两种情况:GATE=0时,GATE非后是1,进入或门,或门总是输出1(与或门的另一个输入端INT0无关),在这种情况下,开关打开或者合上只取决于TR0,只要TR0=1,开关就合上,计数脉冲就得以畅通无阻,如TR0=0则开关打开,计数脉冲无法通过。因此,定时/计数器是否工作,只取决于TR0。GATE=1时,计数脉冲通路上的开关不仅要由TR0来控制,而且还要受到INT0引脚的控制,只有TR0=1,且INT0引脚也是高电平,开关才合上,计数脉冲才能通过。2324定时/计数方式1(16位计数器)逻辑结构和方式0完全一样,只是TL是8位计数器。计数范围1—65536如晶振6MHz,最小定时时间为:2s(机器周期)最大定时时间为:131ms(大约)。该模式对应的是一个16位的定时器/计数器,如图5-5所示。其结构与操作几乎与模式0完全相同,惟一的差别是:在模式1中,寄存器TH0和TL0是以全部16位参与操作。用于定时工作方式时,定时时间为t=(216-T0初值)×振荡周期×12用于计数工作方式时,计数最大长度为216=65536个外部脉冲。图5-5定时器/计数器T0工作模式1逻辑结构框图26定时/计数方式2(自动再装入8位计数器)THx,TLx相互独立(x=0,1)。TLx作为8位计数器,THx是初值寄存器。TLx溢出后,置TFx申请中断。THx初值重新装入TLx。只需通过软件设置一次,启动后无限次定时/计数运行。(自动进行下一次)模式2把TL0(或TL1)设置成一个可以自动重装载的8位定时器/计数器,如图5-6所示。TL0计数溢出时,不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。这时,16位计数器被拆成两个,TL0用作8位计数器,TH0用以保存初值。用于定时工作方式时,其定时时间(TF0溢出周期)为t=(28-TH0初值)×振荡周期×12用于计数工作方式时,最大计数长度为28=256个外部脉冲。图5-6定时器/计数器T0工作模式2逻辑结构框图28定时/计数方式3(T0分成两个8位计数器,T1无效)将T0分成两个独立的8位计数器。TL0组成完整的8位定时/计数器;既能定时,又能计数。TH0只能组成8位定时器(内部脉冲)。只能定时。TL0占用T0全部控制信号及中断请求标志位(TR0、TF0等)TH0只能借用TR1和TF1。P3.5口(T1外部计数脉冲输入口)不能占用。工作模式3对T0和T1大不相同。若将T0设置为模式3,TL0和TH0被分成为两个相互独立的8位计数器,如图5-7所示。图5-7定时器/计数器T0工作模式3逻辑结构框图305.4定时/计数器应用基本步骤:工作方式控制字(TMOD)的设置;计数初值的计算并装入THx、TLx;中断允许位ETx、EA的设置,使主机开放中断;启/停位TRx的设置。31计数初值的确定在方式0下,当为计数方式时,计数值范围1—8192(213)在方式1下,当为计数方式时,计数值范围1—65536(216)在方式2下,当为计数方式时,计数值范围1—256(28)32当计数时,采用预置数的方法,比如我们需要计数100次,那就先放入65436,再来100个脉冲,就到65536了。定时时间:(2n–计数初值)*机器周期晶振机器周期12机器周期定时时间计数初值-n2=33在方式0下最小定时时间为:2s最大定时时间为:16384s(8192*2)在方式1下最小定时时间为:2s最大定时时间为:131ms(65536*2)如晶振周期6MHz,机器周期为2s。思路:需要采用软件计数器的概念,先用定时/计数器做一个(比如50毫秒)的定时器,定时时间到了以后不要立即执行相关操作(比如输出),而是将软件计数器中的值加1,如果软件计数器计到了20,那定时时间就是20*50=1000毫秒了。34如何实现定时1S或者其它定时时间?35例题:生成周期为500s的等宽正方波。机器晶振6MHz。使用T1以方式0工作,由P1.0输出500s机器周期:2s。定时时间250s。以250s为周期在P1.0端交替输出高低电平。36机器周期定时时间计数初值-n2=8067125819222502X138067-4096=397113971-2048=192311923-1024=8991899-512=3871387-256=1311131-128=316403201608040二进制表示:1111110000011H035FCH8位低位高H031TL,H035FCH1TH,FCH8位低位高37程序设计(查询方式):MOVTMOD,#00H;设置T1MOVTH1,#0FCH;计数初值MOVTL1,#03H;MOVIE,#00H;禁止中断SETBTR1;启动定