好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机的定时计数器实用教案.ppt

49页
  • 卖家[上传人]:M****1
  • 文档编号:589643923
  • 上传时间:2024-09-11
  • 文档格式:PPT
  • 文档大小:1.56MB
  • / 49 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    •           8051单片机有2个16位的可编程定时/计数器:定时器0(T0)和定时器1(T1)可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变可用于定时控制、延时、对外部事件计数和检测(jiǎn cè)等场合        在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(定时器控制与中断方式控制寄存器TCON和方式控制寄存器TMOD)第1页/共48页第一页,共49页       16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成其访问地址依次为8AH-8DH每个寄存器均可单独(dāndú)访问      这些寄存器是用于存放定时或计数初值的 启动第2页/共48页第二页,共49页       TMOD主要是用于选定(xuǎn dìnɡ)定时器的工作方式;      TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志      当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1(P3.5)输入启动第3页/共48页第三页,共49页。

      一一 定时定时(dìnɡ shí)/(dìnɡ shí)/计数器的功能计数器的功能 在特殊功能在特殊功能(gōngnéng)(gōngnéng)寄存器寄存器TMODTMOD中,有一个控制位(中,有一个控制位(C C//T T),分别用于控制定时),分别用于控制定时/ /计数器工作在定时器方式还是计计数器工作在定时器方式还是计数器方式数器方式1. 定时功能----计数输入信号是内部时钟脉冲,每个机器(jī qì)周期计数器的值加12. 计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5 定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 第4页/共48页第四页,共49页 定时(dìnɡ shí)/计数器的工作原理        加1计数器输入的计数脉冲(màichōng)有两个来源,一个是由系统的时钟振荡器输出脉冲(màichōng)经12分频后送来;一个是T0或T1引脚输入的外部脉冲(màichōng)源每来一个脉冲(màichōng)计数器加1,当加到计数器为全1时,再输入一个脉冲(màichōng)就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。

      如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满       可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值    第5页/共48页第五页,共49页 v设置为定时器模式时,加1计数器是对内部机器(jī qì)周期计数(1个机器(jī qì)周期等于12个振荡周期,即计数频率为晶振频率的1/12)计数值N乘以机器(jī qì)周期Tcy就是定时时间t v设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器在每个机器周期的S5P2期间采样T0、T1引脚电平当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值(shùzí)在下一个机器周期的S3P1期间装入计数器由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 s 第6页/共48页第六页,共49页 二、定时器/计数器的特殊(tèshū)功能寄存器 与定时器/计数器有关的特殊(tèshū)功能寄存器有:1 1.定时器控制与中断.定时器控制与中断(zhōngduàn)(zhōngduàn)触发方式控制寄存器触发方式控制寄存器TCONTCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0中断请求标志触发方式选择触发方式选择启动定时/计数器0 低电平低电平1 下降沿下降沿0 停止1 启动第7页/共48页第七页,共49页。

      二、定时器/计数器的特殊(tèshū)功能寄存器 2.工作方式(fāngshì)控制寄存器TMODT1控制(kòngzhì)T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE—门控位C/T—计数/定时选择M1 M0—工作方式选择第8页/共48页第八页,共49页 二、定时器/计数器的特殊(tèshū)功能寄存器 2.工作方式(fāngshì)控制寄存器TMODM0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE—门控位若GATE=1,则T×(T0或T1)计数器受引脚(或)和TR×(TR0或TR1)共同(gòngtóng)控制当和TR×都是1时,T×计数,否则T×停止计数 若GATE=0,则T0和T1不受INT0(或INTl)引脚控制而只受TR×控制,此时,TR×为1,T×计数,TR×为0,停止计数可用于测量在INTx端出现的正脉冲的宽度第9页/共48页第九页,共49页 二、定时器/计数器的特殊(tèshū)功能寄存器 2.工作(gōngzuò)方式控制寄存器TMODM0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7C/T—计数/定时选择若C/=0,则T0(或T1)为定时器方式,以内部振荡频率的1/12为计数信号;=1,为计数方式,以引脚T0(P3.4)和T1(P3.5)的脉冲为计数脉冲。

      若C/第10页/共48页第十页,共49页 ￿M1、、M0——工作模式工作模式(móshì)选择位定时器定时器/计数器的工作模式计数器的工作模式M1M0工作模式工作模式功功 能能00模式模式013位定时器位定时器/计数器计数器 01模式模式116位定时器位定时器/计数器计数器10模式模式28位自动重置定时器位自动重置定时器/计数器计数器11模式模式3定时器定时器0::TL0为为8位定时器位定时器/计数器,计数器,TH0为为8位定时器位定时器定时器定时器1:无此方式:无此方式M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7二、定时器/计数器的特殊(tèshū)功能寄存器 2.工作方式(fāngshì)控制寄存器TMOD第11页/共48页第十一页,共49页 定时器计数器13位       方式(fāngshì)0是13位计数结构的工作方式(fāngshì),其计数器由TH0全部8位和TL0的低5位构成当TL0的低5位计数溢出时,向TH0进位,而全部13位计数溢出时,则向计数溢出标志位TF0进位,并向CPU申请中断1. 方式(fāngshì)0—13位方式(fāngshì) 计数脉冲(màichōng)输入C/T为定时/计数选择C/T=0,T0为定时器,定时信号为振荡周期12分频后的脉冲;C/T=l,T0为计数器,计数信号来自引脚T1的外部信号。

      第12页/共48页第十二页,共49页 1. 方式(fāngshì)0—13位方式(fāngshì) 13位定时器T0能否启动工作,还受到了TR0、GATE和引脚信号INT0的控制当GATE=0时,只要TR0=1就可打开(dǎ kāi)控制门,使定时器工作;当GATE=1时,只有TR0=1且INT0=1,才可打开(dǎ kāi)控制门GATE,TR0,C/T的状态选择由定时器的控制寄存器TMOD,TCON中相应位状态确定(quèdìng),INT0则是外部引脚上的信号第13页/共48页第十三页,共49页 1. 方式(fāngshì)0—13位方式(fāngshì)       定时器启动后,定时或计数脉冲加到TL0的低5位,从预先设置的初值(时间常数)开始不断增1TL0计满后,向TH0进位当TL0和TH0都计满之后,置位T0的定时器回零标志TF0,以此表明(biǎomíng)定时时间或计数次数已到,以供查询或在打开中断的条件下,可向CPU请求中断如需进一步定时/计数,需用指令重置时间常数 第14页/共48页第十四页,共49页 1. 方式(fāngshì)0—13位方式(fāngshì) 13位       在一般的应用(yìngyòng)中,通常使GATE=0,从而由TR0的状态控制T0的开闭:TR0=1,打开T0;TR0=0,关闭T0。

      第15页/共48页第十五页,共49页 1. 方式(fāngshì)0—13位方式(fāngshì)         在特殊的应用场合,例如利用定时器测量接于INT0引脚上的外部脉冲高电平的宽度时,可使GATE=1,TR0=1当外部脉冲出现上升沿,亦即INT0由0变1电平时,启动T0定时,测量开始;一旦外部脉冲出现下降(xiàjiàng)沿,亦即INT0由l变0时就关闭了T0第16页/共48页第十六页,共49页 1. 方式(fāngshì)0—13位方式(fāngshì) 13位在方式(fāngshì)0下,当为计数工作方式(fāngshì)时,计数值的范围是:                              1~8192(213) 当为定时工作方式(fāngshì)时,定时时间的计算公式为:           (213-计数初值)×晶振周期×12      或  (213-计数初值)×机器周期                          第17页/共48页第十七页,共49页 1. 方式(fāngshì)0—13位方式(fāngshì) 例:当某单片机系统(xìtǒng)的外接晶振频率为6MHz,该系统(xìtǒng)的最小定时时间为:        [213-(213-1)]×[1/(6×106)]×12=2×10-6=2(s) 最大定时时间为:   (213-0)×[1/(6×106)]×12=16384×10-6=16384(s) 或:最小定时单位×213=16384(s) 第18页/共48页第十八页,共49页。

      816位       与工作方式0基本相同,区别仅在于工作方式1的计数器TL1和TH1组成16位计数器,从而(cóng ér)比工作方式0有更宽的定时/计数范围当为计数工作方式时,计数值的范围是:1~65536(216)当为定时工作方式时,定时时间计算公式为:             (216-计数初值)×晶振周期×12     或    (216-计数初值)×机器周期2. 方式(fāngshì)1—16位方式(fāngshì) 计数器由TH0全部(quánbù)8位和TL0全部(quánbù)8位构成第19页/共48页第十九页,共49页 3. 方式(fāngshì)2—8位自动装入时间常数方式(fāngshì) 定时器T0能否启动工作,还受到了TR0、GATE和引脚信号INT0的控制当GATE=0时,只要(zhǐyào)TR0=1就可打开控制门,使定时器工作;当GATE=1时,只有TR0=1且INT0=1,才可打开控制门第20页/共48页第二十页,共49页 3. 方式(fāngshì)2—8位自动装入时间常数方式(fāngshì)  T0的结构:    TL0:8位的定时器/计数器;    TH0:8位预置寄存器,用于保存初值。

         工作过程:当TL0计满溢出时,TF0置1,向CPU发出中断请求;同时引起(yǐnqǐ)重装操作(TH0的计数初值送到TL0),进行新一轮计数工作方式2是一种(yī zhǒnɡ)自动装入时间常数的8位计数器方式第21页/共48页第二十一页,共49页 3. 方式2—8位自动(zìdòng)装入时间常数方式        由于这种方式省去了用户程序中的重装指令 ,因而操作方便,在允许的条件下,应尽量使用这种工作方式当然,这种方式的定时/计数范围(fànwéi)要小于方式0和方式1,最大只能到255        这种自动重新加载工作方式非常适用于循环(xúnhuán)定时或循环(xúnhuán)计数应用,例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用第22页/共48页第二十二页,共49页 4. 方式(fāngshì)3—双8位方式(fāngshì)        工作方式3只适用(shìyòng)于定时器0如果使定时器1为工作方式3,则定时器1将处于关闭状态第23页/共48页第二十三页,共49页 4. 方式(fāngshì)3—双8位方式(fāngshì)       TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志(biāozhì)和中断源。

           TH0只能作8位定时器使用T1所有的资源(中断向量、中断控制ET1、PT1)和控制位(TR1、TF1)       当T0为工作方式3时,TH0和TL0分成(fēn chénɡ)2个独立的8位计数器第24页/共48页第二十四页,共49页 4. 方式(fāngshì)3—双8位方式(fāngshì) 这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器所以,方式3是为了使单片机有1个独立(dúlì)的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的这时,可把定时器l用于工作方式2,把定时器0用于工作方式3 通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求(yāoqiú)中断的条件下才可能使用第25页/共48页第二十五页,共49页 1.计数器初值的计算 设计数器的最大计数值为M(根据不同工作方式(fāngshì),M可以是213、216或28),则计算初值X的公式如下: X=M-要求的计数值 四、定时四、定时(dìnɡ shí)/(dìnɡ shí)/计数器常数的计计数器常数的计算算2.定时器初值的计算   在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数。

      因此,定时器定时初值计算公式:              X=M-(要求的定时值(shí zhí))/(12/fosc)   式中,M为定时器模值(根据不同工作方式,M可以是213、216或28)第26页/共48页第二十六页,共49页 应用应用(yìngyòng)举例举例可编程器件在使用(shǐyòng)前需要进行初始化:①确定(quèdìng)TMOD控制字:编程时将控制字送TMOD; ②计算计数器的计数初值:  编程时将计数初值送THi、TLi; ③ 开中断(如果使用中断方式): 编程实置位EA、ETi④ TRi位置位控制定时器的启动和停止第27页/共48页第二十七页,共49页 例:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期(zhōuqī)为500μs的方波脉冲,并由P1.0 输出试以中断方式实现8051P1.0P1.0500μs第28页/共48页第二十八页,共49页 ① TMOD确定(quèdìng)T1控制(kòngzhì)T0控制(kòngzhì)XXXX1000M0M1C/TGATEM0M1C/TGATE控制字10H 要产生500μs的方波脉冲,只需在P1.0端以250μs为间隔,交替输出高低电平即可实现。

      为此,定时间应为250μs使用6MHz晶振,则一个机器周期为2μs,设待求定时器初值为X,则:② 计算定时器的初值;      需要产生周期信号时,选择定时方式定时时间到了对输出端进行周期性的输出即可第29页/共48页第二十九页,共49页 (216–X)×2×10 -6 =250×10 -6 即216–X=125 X=216-125=10000H-7DH =0FF83H所以(suǒyǐ),初值为: TH1=0FFH,TL1=83H③ 采用中断方式:编程时打开(dǎ kāi)全局和局部中断④ 由定时器控制寄存器TCON中的TR1位控制定时器的启动(qǐdòng)和停止 TR1=1,启动(qǐdòng); TR1=0,停止 第30页/共48页第三十页,共49页 C语言程序:语言程序:#include //包含特殊功能寄存器库包含特殊功能寄存器库sbitP1_0=P1^0; //进行位定义进行位定义void main( ){ TMOD=0x10; //T1做定时器,模式做定时器,模式(móshì)1TL1=0x83;TH0=0xFF;//设置定时器的初值设置定时器的初值ET1=1; //允许允许T1中断中断 EA=1; //允许允许CPU中断中断TR1=1; //启动定时器启动定时器while(1); //等待中断等待中断 }第31页/共48页第三十一页,共49页。

      void time0_int(void) interrupt 3{//中断中断(zhōngduàn)服服务程序务程序 TL1=0x83;TH0=0xFF; //定时器重赋初值定时器重赋初值P1_0=~P1_0; //P1.0取反,输出方波取反,输出方波} 第32页/共48页第三十二页,共49页 例:假设单片机的振荡(zhèndàng)频率fosc=6MHz,现要求产生1ms的定时,试分别计算定时器T1在方式0、方式1和方式2时的初值 方式方式0:最大计数值为:最大计数值为M=213,因此定时器的初值应为,因此定时器的初值应为X = 213-(1×10-3)/(12/(6×10-6) = 7692D= 1111000001100B其中高其中高8位为位为TH1的初值,即的初值,即F0H,,低低5位为位为TL1的初值这里的初值这里(zhèlǐ),,TL1的初值应为的初值应为00001100B即即0CH,而不是,而不是60H,因为在方式0时,,因为在方式0时,TL1的的高高3位是不用的,应都设为位是不用的,应都设为0第33页/共48页第三十三页,共49页 方式方式1:最大计数值为:最大计数值为M=216,因此,因此(yīncǐ)定时器的初值应定时器的初值应为为X￿=￿216-(1×10-3)/(2×10-6)￿=￿65036D=￿1111111000001100B￿=￿FE0CH此时高此时高8位位TH1的初值为的初值为FEH,低,低8位位TL1的初值为的初值为0CH。

      方式2:最大计数值为M=28,因此定时器的初值应为 X = 28-(1×10-3)/(2×10-6) = 256-500= -254计算得到的初值为负值(fù zhí),说明当fosc=6MHz时,不能采用方式2(即常数自动装入)来产生1ms的定时,除非把单片机的时钟频率降得很低第34页/共48页第三十四页,共49页 例例￿￿利用定时器利用定时器T1的模式的模式2对外部信号进行计数,要求对外部信号进行计数,要求每计满每计满100次,将次,将P1.0端取反分析:分析:T1工作在计数方式工作在计数方式(fāngshì)脉冲数100模式模式2,模式字,模式字TMOD=0110××××b1、初值计数:、初值计数:在模式在模式2下:下:X=￿28-100=156D=9CH2、、C语言程序:语言程序:#include￿sbit￿p1_0=p1^0;//进行位定义进行位定义第35页/共48页第三十五页,共49页 void￿main￿(￿￿){TMOD=0x60;//T1工作在模式工作在模式2,计数,计数TL1=0x9c;//装入计数(重装)初值装入计数(重装)初值TH1=0x9c;ET1=1;//允许允许(yǔnxǔ)定时器定时器1中断中断EA=1;//开中断开中断TR1=1￿;//启动定时器启动定时器1while(1);}void  time0_int(void)  interrupt 3  //中断(zhōngduàn)服务程序{P1_0=~P1_0;//取反,产生方波} 第36页/共48页第三十六页,共49页。

      ￿例例￿某一应用系统某一应用系统(xìtǒng)需要对需要对INT0引脚的正引脚的正脉冲测试其脉冲宽度脉冲测试其脉冲宽度分析:可以设置定时器分析:可以设置定时器/计数器计数器0为定时方式,工为定时方式,工作在模式作在模式1,且置位,且置位GATE位为位为1,将外部需测试的,将外部需测试的脉冲从脉冲从INT0引脚输入,设机器周期为引脚输入,设机器周期为1µs第37页/共48页第三十七页,共49页 C语言程序语言程序(chéngxù)::计算脉宽和处理程序计算脉宽和处理程序(chéngxù)略include￿sbit￿P3_2=P3^2;unsigned￿int_test(￿){TMOD=0x09;TL0=0x00;TH0=0x00;while(P3_2);TR0=1;第38页/共48页第三十八页,共49页 while(!P3_2);while(P3_2);TR0=￿0;return￿￿(TH0*256+TL0);}￿第39页/共48页第三十九页,共49页 ￿￿￿￿￿￿某应用系统要求通过某应用系统要求通过P1.0和和P1.1口分别输出脉冲周期为口分别输出脉冲周期为200µs和和400µs的方的方波,波,fosc=6MHz。

      ￿￿￿￿分析:需要两个定时器可以选择使用定时器分析:需要两个定时器可以选择使用定时器/计数器计数器0,设置为定时模式,工,设置为定时模式,工作模式作模式3,分成,分成(fēn￿chénɡ)两个两个8位的定时器位的定时器1、计算定时初值计算定时初值t=((256￿-X))×12/fosc初值分别为初值分别为0CEH和和9CH第40页/共48页第四十页,共49页 2、、C语言程序:语言程序:#￿include￿￿￿sbitP1_0=P1^0;//进行位定义进行位定义(dìngyì)sbitP1_1=P1^1;void￿￿main(￿){TMOD=0x03;//设置设置T0定时,工作在模式定时,工作在模式3TL0=0xce;//设置设置TL0计数初值,产生计数初值,产生￿￿200µs方波方波TH0=0x9c;//设置设置TH0计数初值,产生计数初值,产生￿￿400µs方波方波ET0=1;//设置定时器设置定时器0中断允许位中断允许位第41页/共48页第四十一页,共49页 ET1=1;//设置定时器设置定时器/计数计数//器器1中断允许位中断允许位EA=1;//设置总中断允许位设置总中断允许位TR0=1;//启动定时器启动定时器T0TR1=1;//启动定时器启动定时器T1while(1);￿￿￿￿//等待溢出等待溢出(yì￿chū)}void￿￿time0L_int(void)￿￿interrupt￿1{//T0中断服务程序中断服务程序TL0=0xce;//定时器重赋初值定时器重赋初值P1_0=~P1_0;//产生方波产生方波}第42页/共48页第四十二页,共49页。

      void￿￿time0H_int(void)￿￿interrupt￿3{￿//T1中断中断(zhōngduàn)服务程序服务程序TH0=0x9c;//定时器重赋初值定时器重赋初值P1_1=~P1_1;//产生方波产生方波}第43页/共48页第四十三页,共49页 例例￿￿￿￿￿利用定时器精确定时利用定时器精确定时1s控制控制LED以秒为单位闪烁以秒为单位闪烁(shǎn￿shuò)已知知fosc=12MHz分析:定时器分析:定时器/计数器在定时方式下,各个模式最大定时时间分别为:计数器在定时方式下,各个模式最大定时时间分别为:定时器0=(8192-0)×12/fosc=8.192ms 定时器1=(65536-0)×12/fosc=65.536ms 定时器2=(256-0)×12/fosc=0.256ms第44页/共48页第四十四页,共49页 ￿￿￿选择模式选择模式1定时时间为定时时间为10ms,当,当10ms的定时时间到,的定时时间到,TF1=1,连续定,连续定时时100次,调用亮灯函数;再连续定时次,调用亮灯函数;再连续定时100次,调用灭灯函数循环次,调用灭灯函数循环(xúnhuán)工作,即达到工作,即达到1s闪烁闪烁1次的效果。

      次的效果1、初值计算:、初值计算:((256-X))×12/fosc=10ms初值初值X=55536=0D8F0H第45页/共48页第四十五页,共49页 2、程序、程序(chéngxù)设计:设计:C语言程序语言程序(chéngxù)::#include￿sbit￿LED=P1^0;unsigned￿char￿i;void￿main(){LED=0;//定义灯的初始状态为灭定义灯的初始状态为灭TMOD=0x10;//设置定时器设置定时器1工作在模式工作在模式1TL1=0xf0;TH1=0xd8;//设置定时初值设置定时初值TR1=1;￿￿//启动定时器启动定时器1第46页/共48页第四十六页,共49页 ET1=1;//允许定时器允许定时器1中断中断(zhōngduàn)EA=1;while(1);￿}void￿timer1_int()￿interrupt￿3{TL1=0xf0;//定时器重装初值定时器重装初值TH1=0xd8;￿if(++i==100){LED=~LED;i=0;￿}}第47页/共48页第四十七页,共49页 感谢您的观赏(guānshǎng)第48页/共48页第四十八页,共49页。

      内容(nèiróng)总结8051单片机有2个16位的可编程定时/计数器:定时器0(T0)和定时器1(T1)第2页/共48页第6页/共48页第8页/共48页M1、M0——工作模式选择位C/T为定时/计数选择第12页/共48页定时时间到了对输出端进行周期性的输出即可例 某一应用(yìngyòng)系统需要对INT0引脚的正脉冲测试其脉冲宽度{LED=~LED第47页/共48页感谢您的观赏第四十九页,共49页。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.