欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    单片机原理及应用教程(C语言版) 第6章 MCS 51单片机的定时器计数器ppt课件.ppt

    • 资源ID:1405783       资源大小:1.28MB        全文页数:100页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机原理及应用教程(C语言版) 第6章 MCS 51单片机的定时器计数器ppt课件.ppt

    单片机原理及应用教程 (C语言版)第6章 MCS-51单片机定时器/计数器,主 编:周国运中国水利水电出版社,第6章 MCS-51单片机定时器/计数器,目 录6.1 单片机定时器/计数器的结构及原理6.2 定时器/计数器T0、T16.3 定时器/计数器T26.4 定时器/计数器应用举例,定时器/计数器应用极其广泛。本章主要讨论MCS-51单片机定时器/计数器T0、T1、T2的逻辑结构、工作原理、使用方法和应用。本章为单片机的主要内容,也是学习第七章串行口的基础。,第6章 MCS-51单片机的定时器/计数器,6.1 单片机定时器/计数器的结构及原理,主要内容6.1.1 单片机定时器/计数器的结构6.1.2 单片机定时器/计数器的工作原理,6.1.1 单片机定时器/计数器的结构,MCS-51单片机定时器/计数器的原理结构图,6.1.1 MCS-51单片机定时器/计数器的结构,MCS-51主要由如下构成:三个16位的可编程定时器/计数器:定时器/计数器0、1和2。每个定时器有两部分构成:THx和TLx特殊功能寄存器TMOD和TCON ,主要对T0和T1进行控制。特殊功能寄存器T2MOD和T2CON ,主要对T2进行控制,RCAP2H、RCAP2L为T2服务。引脚P3.4、P3.5、P1.0,为计数脉冲输入。定时器T0、T1和T2有中断功能,计数器溢出或被触发(T2),向CPU 发出中断请求。,6.1.2 单片机定时器/计数器的工作原理,定时器/计数器T0、T1、T2 的内部结构简图如下图所示。,做定时器,做计数器,6.1.2 MCS-51单片机定时器/计数器的工作原理,从上图可以看出: 定时器的实质是一个加1计数器。C/T =0 ,为定时器计数频率:fosc/12计数信号由片内振荡电路提供,振荡脉冲n分频送给计数器,每个机器周期计数器值增1。 C/T =1 ,为计数器计数信号由Tx引脚(P3.4、P3.5和P1.0)输入,每输入一有效信号,相应的计数器中的内容进行加1计数器的最高计数频率为:fosc/24 1)每1个输入脉冲的下降沿使计数器计1个数 2)每1个机器周期对引脚采样1次,当上1个机器周期采样为高、本机器周期采样为低为1个下降沿。,6.1.2 MCS-51单片机定时器/计数器的工作原理,控制信号TRx=1时,定时器启动。当定时器由全1加到全0时计满溢出,TFx=1,向CPU申请中断;同时,定时器从0开始继续计数。,6.2 定时器/计数器T0、T1,主要内容6.2.1 T0、T1的特殊功能寄存器6.2.2 T0、T1的工作模式6.2.3 T0、T1的使用方法,6.2.1 T0、T1的特殊功能寄存器,1. T0、T1 模式寄存器TMOD 功能:确定定时器的工作模式。其格式为:,GATE外部门控制位。GATE1,使用外部控制门,且TRx=1当P3.2(P3.3)为高时启动定时器, P3.2(P3.3)为T0、T1运行外部控制引脚。,6.2.1 T0、T1的特殊功能寄存器,GATE0,禁止外部信号控制定时器/计数器。C/T定时或计数方式选择位 C/T0,为定时器;C/T1,为计数器 计数采样:CPU在每机器周期的S5P2期间,对计数脉冲输入引脚进行采样。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,即下降沿计数。,6.2.1 T0、T1的特殊功能寄存器,M1、M0工作模式选择位。,6.2.1 T0、T1的特殊功能寄存器,2. T0、T1控制寄存器TCON,TF1、TF0:T1、T0的溢出标志位 计数溢出,TFx=1。 中断方式:自动清零; 查询方式:软件清零。,6.2.1 T0、T1的特殊功能寄存器,TR1、TR0:T1、T0启停控制位。 置1,启动定时器; 清0,关闭定时器。注意: GATE=1 ,TRx与P3.2(P3.3)的配合控制。IE1、IE0:外部中断1、0请求标志位IT1、IT0:外部中断1、0触发方式选择位,6.2.2 T0、T1的工作模式,MCS-51的T0、T1共有4种工作模式,前三种模式下两个定时器/计数器工作原理是相同的,只有模式3下两者才有差别。以下主要以T0为例进行介绍,T1类似。,模式0与模式1 的区别仅仅是计数器的位数不同,前者是13位,后者是16位,其它完全相同,现在一般都不使用模式0,故不讲。 当设置M1M001时,选择模式1,为16位定时器/计数器。模式1原理结构模式1原理结构由4部分构成(下页图):信号源运行控制计数器溢出标志,1模式1,6.2.2 T0、T1的工作模式,6.2.2 T0、T1的工作模式,图6-6 T0模式1原理结构,6.2.2 T0、T1的工作模式,信号源C/T设为1,为计数器,用P3.4引脚脉冲C/T设为0,为定时器,用内部脉冲运行控制GATE=1,由外部信号控制运行此时应该设置TR0=1P3.2引脚为高电平,T0运行GATE=0,由内部控制运行TR0设置为1,T0运行,6.2.2 T0、T1的工作模式,计数部件由TL0、TH0组成,是一个16位的加法计数器,对送来的脉冲进行计数,计数溢出后输出由低变高,设置溢出标志。溢出标志:TF0。当计数部件溢出后对其置1,向CPU 请求中断。模式1定时时间的计算公式如下:定时时间=计数值机器周期 =(216 - 定时初值)振荡周期12最大定时时间(初值为0时)为: 216 振荡周期 12。,2模式2,6.2.2 T0、T1的工作模式,M1 M0 10时,选择模式2,为8位定时器/计数器,且初值自动重装。模式2原理结构原理结构如下页图所示,由4部分构成:信号源运行控制计数器溢出标志在能够满足计数要求时,尽可能地选择模式2。,图6-7 T0(T1)模式2原理结构8位初值自动重装,6.2.2 T0、T1的工作模式,M1 M0 11,选择模式3。逻辑结构如图6-8和6-9所示: 结构: TL0、TH0分为两个独立的8位计数器 TL0: 8位定时器/计数器使用T0所有的资源和控制位 TH0:8位定时器使用T1所有的资源(中断向量、中断控制ET1、PT1)和控制位(TR1、TF1),6.2.2 T0、T1的工作模式,3模式3,图6-8 模式3下T0的原理结构图,6.2.2 T0、T1的工作模式,T0模式3时T1的工作模式T1可以模式0模式2工作。T1的结构如图6-9所示由于TF1及中断矢量被TH0占用,所以T1仅用作波特率发生器或其它不用中断的地方。T1作波特率发生器,其计数溢出直接送至串行口。设置好工作方式,串行口波特率发生器开始自动运行。 TMOD中T1的M1M0=11,T1停止工作,因为T1没有模式3。,6.2.2 T0、T1的工作模式,图6-9 T0模式3时T1的原理结构,6.2.2 T0、T1的工作模式,6.2.3 T0、T1的使用方法,T0、T1各有两种功能(定时/计数)、4种或3种工作模式,如何选择其功能和工作模式,是使用T0、T1编写程序需要首先解决的问题。1.选择定时和计数概念如果需要对单片机外部输入的脉冲进行计量,则选择计数功能(如统计产品数量、轮子转到周数(每周产生的脉冲数目一定)、液滴的数目等);否则选择定时功能(如定时启动/停止机器运转、定时打开/关闭阀门、产生方波、产生某种频率的声音等)。,6.2.3 T0、T1的使用方法,2.选择工作模式(1)计算计数值N1)计数情况需要计的数N往往是给定的,如计100个数、200个数等。2)定时情况在这种情况下往往给出的是定时的时间t根据定时器每个机器周期计1个数的规律,则计数值N与定时时间t、机器周期TMC、晶振频率fosc的关系如下:t = N TMC 、 TMC = 12/fosc N = t / TMC = t fosc /12 (公式6-1),6.2.3 T0、T1的使用方法,(2)确定工作模式如果N256,则选择模式1;否则选择模式2,或者选择模式3。首选模式2。3计数初值X的计算计数初值X = 最大计数值 - 计数值N (公式6-2)计数初值和工作模式有关,即与计数位数有关:模式1:16位计数,N=65536,(216)模式2:8位计数,N=256,(28)模式3:8位计数,N=256,(28),6.2.3 T0、T1的使用方法,4什么情况下选择模式3模式3是在系统既需要波特率发生器,又需要多个定时器/计数器,而且计数值都比较小(N256)的情况下使用。这时定时器/计数器T1作为波特率发生器,定时器/计数器T0分为两个8位定时器,或者分成的两个其中一个作8位定时器、另一个8位计数器使用。,6.2.3 T0、T1的使用方法,5使用T0、T1编程的方法步骤 计算计数值N。 确定工作模式。 计算定时或计数的初值X。 编写初始化程序:设置TMOD,设置TLx和THx,(需要时开T0、T1中断和总中断),设置TRx启动运行。 编写T0、T1的应用程序。前3项为编写初始化程序的准备,称之为初始化准备。,6.2.3 T0、T1的使用方法,6在运行中读取TLx、THx的方法在T0、T1运行情况下,TLx和THx中的值在变化,读的期间有可能进位,读出的数据不正确。正确的读取方法如下:doxh=THx;xl=TLx;while(xh!=THx);程序中的xl、xh为已经定义过的无符号字符型变量。,6.2.3 T0、T1的使用方法,例6-1 对89C52单片机编程,使用定时器/计数器T0以模式1定时,以中断方式实现从P1.0引脚产生周期为1000s的方波。设单片机的振荡频率为12MHz。分析与计算(1)方波产生原理 将T0设为定时器,计算出合适的初值,定时到了之后对P1.0引脚取反即可。(2)选择工作模式计算计数值N,P1.0,6.2.3 T0、T1的使用方法,定时时间t:周期为1000s的方波要求t =周期/2 = 1000/2 = 500(s)对应计数值:N = t/机器周期 = 500/1 = 500N=500256,所以选择模式1。 模式字:TMOD=0000 0001B = 0 x01(3)计算初值X X = 65536 N = 65036 = 0 xfe0c,方波周期T,定时时间t,6.2.3 T0、T1的使用方法,C语言程序:#include /包含特殊功能寄存器库sbitP1_0=P10; /定义位变量void main( ) TMOD=0 x01; /T0用模式1、定时TL0=0 x0c;TH0=0 xfe;/设置定时器的初值ET0=1; /允许T0中断 EA=1; /允许CPU中断TR0=1; /启动定时器while(1); /等待中断 ,6.2.3 T0、T1的使用方法,void time0_int(void) interrupt 1/中断服务程序TL0=0 x0c;TH0=0 xfe;/定时器重赋初值P1_0=P1_0;/P1.0取反,输出方波汇编语言程序:ORG0000HSJMPMAINORG000BH;T0中断入口地址LJMPINT_T0,6.2.3 T0、T1的使用方法,MAIN: ;主程序MOV SP,#0DFH;设置堆栈指针MOV TMOD,#01H;T0模式1定时MOVTL0,#0CH;设置定时初值MOVTH0,#0FEH SETBET0;T0开中断SETBEA;CPU开中断SETBTR0;启动T0SJMP$;等待T0中断INT_T0: ;中断服务程序MOV TL0,#0CHMOVTH0,#0FEH;重装定时初值CPLP1.0 ;P1.0取反RETI ;中断返回END,6.2.3 T0、T1的使用方法,例6-2 设单片机的振荡频率为12MHz,用T1编程实现从P1.0输出频率为2KHz的方波。1、分析与计算(1)选择工作模式要求输出方波频率为2KHz,则周期为500s,只需对P1.0每250s取反一次即可,即定时时间t为250s。需要计算计数值N计算计数值N:N= t/ TMC = t fosc/12 =25012M/12=250N=250256,所以选择模式2。,6.2.3 T0、T1的使用方法,模式字:TMOD=0010 0000 B = 0 x20(2)初值X计算 X=256N X=6则TH1=TL1=6 2、采用中断处理方式的程序,6.2.3 T0、T1的使用方法,(1)中断方式C语言程序# include /包含特殊功能寄存器库sbit P1_0=P10;voidmain( )TMOD=0 x20; /设置工作模式TL1=0 x06;TH1=0 x06; /为定时器赋初值ET1=1; /允许定时1中断EA=1;TR1=1;/启动定时器1while(1);/等待中断void time0_int(void) interrupt 3 P1_0=P1_0;,6.2.3 T0、T1的使用方法,(2)中断方式汇编语言程序ORG0000HLJMPMAIN ORG001BH;中断处理程序CPLP1.0RETIORG 0030H;主程序MAIN:MOV SP,#0DFHMOV TMOD,#20H MOV TL1,#06HMOV TH1,#06HSETB ET1;允许定时器1中断SETB EA;允许CPU中断SETB TR1;启动定时器1SJMP $;等待中断END,6.2.3 T0、T1的使用方法,3、采用查询方式程序(1)查询方式C语言程序# include sbitP1_0=P10;void main()TMOD=0 x02;TL0=0 x06;TH0=0 x06; TR0=1;while (1)while(!TF0) ;/查询计数溢出TF0=0;P1_0=P1_0; ,6.2.3 T0、T1的使用方法,(2)查询方式汇编语言程序MAIN:;主程序MOV TMOD,#02HMOVTL0,#06HMOVTH0,#06HSETBTR0LOOP:JNBTF0,$;查询计数溢出CLRTF0CPLP1.0 SJMPLOOPEND,6.3 定时器/计数器T2,主要内容6.3.1 T2的特殊功能寄存器6.3.2 T2的工作方式,定时器/计数器T2的功能结构图,定时器T2概述,1、 T2的功能:89C52中的T2是一个16位的、具有自动重装载和捕获功能的定时器/计数器。2、T2的结构:除TL2、TH2和控制寄存器T2CON及T2MOD之外,还增加了捕获寄存器RCAP2L(低字节)和RCAP2H(高字节)。 3、T2的时钟源:有两个。一个是内部机器周期,另一个是由T2端输入的外部计数脉冲。4、T2的工作方式:有4种。自动重装、捕获、波特率发生器、可编程时钟输出。 5、 T2的专用引脚:增加了两个引脚,T2(P1.0)、T2EX(P1.1),分别称为时钟I/O和外部触发引脚。,6.3.1 T2的特殊功能寄存器,TF2:T2溢出中断标志位 T2溢出时置位,申请中断。软件清零。波特率发生器方式下(RCLK1或TCLK1),T2溢出不对TF2进行置位。,1. T2控制寄存器T2CON 可位寻址和字节寻址 功能:选择T2的工作方式和工作模式。格式如下,EXF2:T2外部触发中断标志位 当EXEN21,且T2EX引脚上有负跳变 触发捕获或重装操作时,EXF2置1,向CPU发出中断请求。 需软件清0。RCLK:串行口接收时钟允许位RCLK=1时,T2溢出信号分频后做串行口工作在模式1和3的接收时钟。RCLK=0时,T1溢出信号分频信后做串行口接收时钟。,6.3.1 T2的特殊功能寄存器,6.3.1 T2的特殊功能寄存器,TCLK:串行口发送时钟允许位TCLK=1时,T2溢出信号分频后做串行口工作在模式1和3的发送时钟。TCLK=0时,T1溢出信号分频后做串行口的发送时钟。EXEN2:T2外部触发允许位EXEN2=1,T2未做串口时钟时,T2EX引脚(P1.1)的负跳变将触发“捕获”或“重装”。 EXEN2=0,T2EX引脚上的负跳变对T2不起作用。,TR2 :T2运行控制位TR2=1,启动T2;TR2=0,T2停止。C/T2:T2的定时或计数方式选择位 C/T2=1,T2为计数器。从T2(P1.0)引脚输入计数脉冲行(下降沿计数)。 C/T2=0,T2为定时器。用机器周期计数,6.3.1 T2的特殊功能寄存器,CP/RL2:捕获和重装载方式选择位 CP/RL2=1,且EXEN2=1,T2EX(P1.1)的负跳变将触发捕获操作。 CP/RL2=0,且EXEN2=1,T2EX的负跳变或T2计满溢出时,触发自动重装操作。RCLK=1或TCLK=1时,T2做串口的时钟发生器,这时CP/RL2的设置不起作用,并且T2溢出时会自动装载。,6.3.1 T2的特殊功能寄存器,T2OE:T2输出允许位T2OE1,可编程时钟输出方式,输出方波信号至T2(P1.0)引脚。DCEN:T2增/减计数控制位DCEN l,T2递减计数DCEN0,T2递增计数,2. T2模式寄存器T2MOD,6.3.1 T2的特殊功能寄存器,3. 计数寄存器TL2、TH24. 捕获寄存器RCAP2L、RCAP2H有两个作用:(1)捕获计数器中的值。在捕获方式,P1.1引脚触发时,将TL2、TH2中的数装入RCAP2L、RCAP2H中;(2)作为初值装入计数器。在重装计数方式,计数溢出后,将RCAP2L、RCAP2H中的数装入TL2、TH2中,6.3.1 T2的特殊功能寄存器,6.3.2 T2的工作方式,定时器T2是一个16位的定时器/计数器,具有四种工作方式:16位自动重装方式捕获方式波特率发生器方式可编程时钟输出方式,表6-2 定时器T2的四种工作方式,6.3.2 T2的工作方式,一、自动重装方式(定时或计数)1、递增定时、计数CP/RL20,DCEN=0时,自动重装方式。有两种情况引起重装,结构如下页图所示。(1)计数溢出重装 TF2置1,产生溢出中断请求; 将RCAP2L和RCAP2H的数装入TL2和TH2中。(2)外部触发重装当EXEN21,并且T2EX(P1.1)有负跳变时 EXF2置1,外部触发中断请求; 将RCAP2L和RCAP2H的数装入TL2和TH2中,图6-12 重装方式原理图,6.3.2 T2的工作方式,2、外部控制递减、递增定时或计数CP/RL20,DCEN=1,T2由外部引脚T2EX(P1.1) 控制递减、递增定时或计数。(1)外部控制递增定时、计数条件:T2EX(P1.1)引脚为高电平计满溢出时:TF2置1,请求中断;将RCAP2L和RCAP2H中的数装入TL2和TH2中。,决定于C/T2,6.3.2 T2的工作方式,递增、递减计数重装控制,递减计数重装值,递增计数重装值,控制递增、递减计数重装高:递增计数重装,RCAP2L,RCAP2H,TF2,TL2,TH2,EXF2,T2,TR2,振荡器,12,C/T2=0,C/T2=1,0,FFH,0,FFH,中断请求,TEX2,(P1.1),(P1.0),6.3.2 T2的工作方式,(2)外部控制递减定时、计数条件: T2EX(P1.1)引脚为低电平计数溢出时:TF2置1,请求中断;将0 xffff装入TL2和TH2中。递减计数的溢出: TL2和TH2与RCAP2L和RCAP2H的值相等,6.3.2 T2的工作方式,二、捕获方式 (可定时、计数)当CP/RL2l,选择捕获方式。有以下两种情况。T2捕获方式结构如下页图所示。1、捕获定时、计数(1)条件与触发捕获条件:EXEN=1;触发捕获:T2EX(P1.1)端的信号有负跳变时(2)捕获将TL2和TH2的内容装入RCAP2L和RCAP2H中 (3)EXF2置1,产生触发中断请求,6.3.2 T2的工作方式,2、一般定时、计数(非捕获时不会自动重装)设置EXEN=0计数溢出TF2置1,产生溢出中断请求,6.3.2 T2的工作方式,三、波特率发生器方式 RCLK=1或TCLK 1时,选择波特率发生器方式。结构如下页图所示。具有两个功能。1、功能一为串行口提供时钟波特率=fosc(32(65536 - (RCAP2H,RCAP2L)特点: 1)计数满后自动将RCAP2L、RCAP2H中的值装入TL2、TH2中; 2)不产生溢出中断。,6.3.2 T2的工作方式,波特率=fosc(32(65536 - (RCAP2H,RCAP2L),6.3.2 T2的工作方式,2、功能二外部中断源条件: EXEN2=1;中断请求输入引脚:P1.1触发方式:下降沿中断请求标志:EXF2, P1.1出现下降沿, EXF2置1。,6.3.2 T2的工作方式,定时器/计数器T2作为波特率发生器使用时的编程方法:RCAP2H=0 x30;/设置波特率RCAP2L=0 x38;TCLK=1;/选择定时器2的溢出脉冲/作为串口发送波特率发生器 注意:在波特率发生器工作方式下,在 T2计数过程中不能再读/写 TH2和TL2的内容。,6.3.2 T2的工作方式,四、可编程时钟输出方式 当T2OE=1,且C/T2=0时,T2工作于时钟输出方式。结构如下页图所示。具有两个功能。1、功能一时钟输出1)输出引脚:P1.02)输出方波频率:f=fosc(4(65536 - (RCAP2H,RCAP2L)(RCAP2H,RCAP2L)= 65536 -foscf43)特点:自动重装初值 计数满后,将RCAP2L和RCAP2H的值自动装入TL2和TH2;不产生溢出中断。,6.3.2 T2的工作方式,四、可编程时钟输出方式 当T2OE=1,且C/T2=0时,T2工作于时钟输出方式。结构如下页图所示。具有两个功能。2、功能二外部中断源条件: EXEN2=1;中断请求输入引脚:P1.1触发方式:下降沿中断请求标志:EXF2, P1.1出现下降沿, EXF2置1。,6.3.2 T2的工作方式,6.3.2 T2的工作方式,例6-3 对单片机编程,使用T2时钟输出方式,从P1.0输出周期为1ms的方波。设单片机的振荡频率为12MHz。(1)分析与计算T2的时钟输出方式可直接输出方波。输出方波周期为1ms,则频率fout为1KHz。根据公式6-6可知,计数初值x=65536-fosc/ (4fout) =62536。,6.3.2 T2的工作方式,(2)C语言程序清单# include void main()C_T2=0;/设置T2作定时器使用CP_RL2=0;/设置T2初值自动重装T2MOD=0 x02;/设置T2输出时钟TL2=62536%256; /为T2赋初值TH2=62536/256; RCAP2L=62536%256; /重装寄存器赋初值RCAP2H=62536/256; TR2=1;/启动T2while(1);/CPU保持运行状态T2在工作,6.3.2 T2的工作方式,(3)汇编语言程序清单T2MOD EQU 0C9H;定义T2模式寄存器TL2 EQU 0CCH;定义T2计数低8位寄存器TH2 EQU 0CDHRCAP2L EQU 0CAH;定义重装低8位寄存器RCAP2H EQU 0CBHCP_RL2 BIT 0C8H;定义T2捕获/重装控制位C_T2 BIT 0C9H;定义T2计数/定时控制位TR2 BIT 0CAH;定义T2运行控制位,6.3.2 T2的工作方式,MAIN:CLR C_T2;设置T2作定时器CLR CP_RL2;设置T2初值自动重装MOV T2MOD,#02H;设置T2输出时钟MOV TL2,#48H;为定时器赋初值MOV TH2,#0F4HMOV RCAP2L,#48H;重装寄存器赋初值MOV RCAP2H,#0F4HSETB TR2;启动T2SJMP $ ; CPU保持运行状态T2在工作,6.3.2 T2的工作方式,6.4 定时器/计数器应用举例,6.4 定时器应用举例,例6-4 用89C52单片机设计一程序,测量脉冲信号的宽度。设单片机晶振频率为12MHz。分析:如图6-16所示,设置GATE0位为1,在P3.2引脚为低电平时设置TR0=1,当GATE信号为高时自动启动计数,当GATE信号变低时自动结束计数,这时设置TR0=0,读取计数值便可计算出脉冲宽度,单位为s,机器周期为1s。,6.4 定时器应用举例,C语言程序清单:#include sbit P3_2=P32;unsigned int_test( )TMOD=0 x09;/T0以模式1定时,用外部门TL0=0;TH0=0;/设置初值为0while(P3_2);/引脚为高等待变低TR0=1;/开T0内控开关由外部门控制while(!P3_2);/检测脉冲是否来到while(P3_2);/检测脉冲是否结束TR0= 0;/脉冲已结束,T0内控开关return (TH0*256+TL0);/返回计数值,6.4 定时器应用举例,汇编语言程序清单:TEST:MOV TMOD,#09H;置T0模式1定时用外部门MOV TL0,#00H;设置初值为0MOV TH0,#00HJB P3.2,$ ;引脚为高等待测量下一个正脉冲SETB TR0 ; 开T0内控开关,由外部控制行JNBP3.2,$;检测脉冲是否来到JBP3.2,$;检测脉冲是否结束CLR TR0;脉冲已结束,关内控开关MOV R7,TL0;计数器TL0的值送R7MOV R6,TH0;计数器TH0的值送R6RET,6.4 定时器应用举例,例6-5 设某单片机系统使用定时器较多,T1作串行口的波特率发生器,T2作时钟信号输出产生多种较复杂的报警声;另外需要对产品包装进行计数,每计120件使阴极接在P3.7引脚的LED亮2s,并且发出报警声音响2s。试编写程序,实现对产品的计数和声光报警,不用考虑串行通信和声音的具体产生程序。设单片机的晶振频率fosc=6MHz。,6.4 定时器应用举例,分析:(1)关于定时器及工作模式的选择T1、T2都已经被使用,仅剩下T0,还需要计数和定时,可以考虑把T0设置为模式3,TL0计数,TH0定时。由于计数仅120,虽然要求定时2s,但可以用多次中断能够满足要求。,6.4 定时器应用举例,(2)关于声光报警的实现当TL0计数120后产生中断,在中断服务程序中开声、光,开TH0运行开始计时。设置TR2=1便有声音信号输出,对P3.7输出0便使LED点亮。设置TH0计数250,由于机器周期为2s,则定时2s需要中断的次数为2000000/(2502)=4000TH0中断4000次后,设置TR2=0便关闭声音信号输出,对P3.7输出1便使LED熄灭。TL0的计数初值为256-120=136;TH0的定时初值为256-250=6。,6.4 定时器应用举例,C语言程序清单:# include unsigned int num=0;/定义TH0中断次数变量sbit P3_7=P37;/定义控制LED发光引脚void main( )/主函数TMOD=0 x27;/T0模式3计数,T1模式2定时TL0=136;/设置TL0初值,计数TH0=6;/设置TH0初值,定时ET0=1;/开T0中断ET1=1;/开T1中断EA=1;/开总中断TR0=1;/启动T0计数while(1);/停留于此,保存程序运行状态,6.4 定时器应用举例,void TL0_int(void) interrupt 1 /TL0(T0)中断服务程序TL0=136;/定时器重赋初值P3_7=0;/开LEDTR1=1;/启动定时器TH0TR2=1;/启动T2产生声音信号void TH0_int(void) interrupt 3/TH0(T1)中断服务程序TH0=6;/定时器重赋初值num+;/中断次数加1If(num3999)P3_7=1; /关LEDTR1=0;/关闭TH0TR2=0;/关声音num=0;/中断次数设置为0 ,6.4 定时器应用举例,例6-6 对89C52单片机的定时器T0编程,设计一产生时分秒的时钟。设晶振频率为12MHz。分析:设置T0为定时功能,定时10ms产生中断,中断100次为1秒,秒加1,有了秒时间后,按照时钟的时分秒规律,对保存时分秒的变量进行相应的累加,便产生了时分秒时间。电路设计:本例用6位数码管显示出时间,其电路和模拟运行如图6-17所示。图中的排电阻RESPACK8为数码管各段的驱动限流电阻,可以设200左右,数码管的各位在实际中也需要驱动,如使用74LS245,在Proteus中模拟可以省略。,6.4 定时器应用举例,数码管显示在第9章才讲,在这里并不要求掌握,可以先了解一下,主要是便于在Proteus中模拟运行。选择工作模式、计算初值:根据定时器/计数器使用的方法步骤,初始化准备如下:这里定时时间t为10ms=10000s计算计数值N:N= t/TMC= tfosc/12=1000012M/12=10000选择模式1,因为N256计算初值X:X=216-N=65536-10000=55536,6.4 定时器应用举例,6.4 定时器应用举例,C语言程序清单如下#include #define codport P0 /显示段码输出口#define sitport P2/显示位码输出口unsigned char code ledcode= /*显示09的代码*/0 x3f,6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,7,0 x7f,0 x6f; unsigned char data hou,min,sec,num; /时分秒中断数unsigned char data disbuf=0,0,0,0,0,0;,6.4 定时器应用举例,void display()/显示函数unsigned int j;/j用于循环unsigned char i,scan;/scan为扫描码scan=0 x01;for(i=0;i6;i+)codport=0;/先清屏,显示错乱codport=ledcodedisbufi; /输出显示数的段码sitport=scan;/输出位码scan=(scan1); /指向下一个数位for(j=0;j500;j+);/延时,void time0() interrupt 1/定时器0中断函数TL0=55536%256; /给T0赋初值TH0=55536/256;num=num+1;/百分之一秒加1if(num99) num=0; sec+;/秒加1 if(sec59) sec=0; min+; /分加1if(min59) min=0;hou+; /时加1 if(hou23)hou=0; /把时间变量分离成要显示的各位 disbuf0=hou/10; disbuf1=hou%10; disbuf2=min/10;disbuf3=min%10; disbuf4=sec/10;disbuf5=sec%10;,6.4 定时器应用举例,void main()/主函数TMOD=0 x01;/设置T0以模式1定时TL0=55536%256; /设置T0定时10ms初值TH0=55536/256;ET0=1; /开T0中断EA=1;/开总中断TR0=1;/定时器0开运行hou=9;min=25; /时间初始化sec=30;num=0;while(1)/循环,并随时处理中断 display();/调用数码管进行扫描显示,6.4 定时器应用举例,例6-7 某89C52单片机应用系统的晶振频率为12MHz,通过编程实现以下和频率计的功能:(1)从T1输入脉冲计数,实现计数器功能;(2)用T0定时1s,计算脉冲信号的频率,实现频率计的功能。通过接在P3.7引脚的按钮选择计数器和频率计功能。,6.4 定时器应用举例,分析:用T0定时10ms,中断100次为1s。对计数功能,每中断一次读一次T1的计数值,计数值不累加,计数溢出后再从0开始计,则最大数是65535。对频率计功能,则1s读一次T1计数值,其值就是频率,理论上最大频率值是500000。其值都在数码管上显示出来。在Proteus画的电路图如图6-18所示,所截的图为计数器功能,最高位C表示计数。,6.4 定时器应用举例,6.4 定时器应用举例,C语言程序清单#include #define codport P0/显示段码输出口#define sitport P2/显示位码输出口unsigned char code ledcode=/*09的显示代码*/0 x3f,6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,7,0 x7f,0 x6f,0,0 x39;unsigned char disbuf6; /显示数组,0元素为高位数unsigned char data int0=0, int1=0;/T0、T1中断次数unsigned long data freq;/存放读取的计数值,6.4 定时器应用举例,void display()/显示函数unsigned long data j;/j用于循环延时unsigned char data i,scan;/scan为扫描码scan=0 x01;for(i=0;i6;i+)codport=0;/清屏,防止显示混乱codport=ledcodedisbufi;/送显示段码sitport=scan;/送位码scan=(scan1); /指向下一数位for(j=0;j500;j+);/延时3ms,6.4 定时器应用举例,void calculat()/将freq各位分离存于disbufunsigned char data i; for(i=0;i5;i+)/让高位的0不显示disbufi=10;do/将freq各位分离存于disbufdisbufi-= freq%10; freq = freq/10; while(freq); void t1_int() interrupt 3/T1中断函数/计数超过65536溢出中断的次数int1+;/计数溢出次数加1,6.4 定时器应用举例,void t0_int() interrupt 1/T0中断函数,间隔10ms TL0=55536/显示freq频率值,6.4 定时器应用举例,void main()/主函数unsigned char data xl,xh;TMOD=0 x51;/设置T0模式1定时,计数TL0=55536%256;/T0定时10ms赋初值TH0=55536/256;TL1=0 x00; /T1计数赋初值TH1=0 x00;ET0=1;ET1=1; /开T0、T1中断EA=1;/开CPU中断TR0=0; TR1=1; /关T0定时、启动T1计数while(1) display();/调用数码管显示函数 if(P3_7=0)/判断按钮是否按下 flag=flag;/按下,标志取反,6.4,if(P3_7=0) /判断按钮是否按下 flag=flag;if(flag)/使用频率计功能TR0=1;/启动T0定时1s读数else/使用计数器功能TR0=0;/关闭T0定时dodisplay();while(P3_7=0); /等待释放按钮display(); /延时约18ms去后沿抖动 if(flag=0)/使用计数器功能 do/使正确读取计数值xh=TH1;xl=TL1;while(xh!=TH1);freq=xh*256+xl;calculat();/显示freq中的计数值disbuf0=11; /最高位显示C ,本章小结,本章首先介绍了单片机定时器/计数器的结构和原理。接着介绍了定时器/计数器T0、T1以及T2的控制、工作模式和用法。最后结合例子介绍了定时器/计数器的应用。定时器/计数器是单片机应用系统中最常用的部件。因此,掌握定时器/计数器编程技术是学好单片机应用技术所必须的。学习本章,要注意掌握定时器/计数器初值的计算方法,多做练习,掌握定时器/计数器编程方法。,本章完,

    注意事项

    本文(单片机原理及应用教程(C语言版) 第6章 MCS 51单片机的定时器计数器ppt课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开