单片机原理及应用教程(C语言版)-第6章-MCS-51单片机的定时器计数器ppt课件_第1页
单片机原理及应用教程(C语言版)-第6章-MCS-51单片机的定时器计数器ppt课件_第2页
单片机原理及应用教程(C语言版)-第6章-MCS-51单片机的定时器计数器ppt课件_第3页
单片机原理及应用教程(C语言版)-第6章-MCS-51单片机的定时器计数器ppt课件_第4页
单片机原理及应用教程(C语言版)-第6章-MCS-51单片机的定时器计数器ppt课件_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及应用教程 (C语言版)第6章 MCS-51单片机定时器/计数器,主 编:周国运 中国水利水电出版社,第6章 MCS-51单片机定时器/计数器,目 录 6.1 单片机定时器/计数器的结构及原理 6.2 定时器/计数器T0、T1 6.3 定时器/计数器T2 6.4 定时器/计数器应用举例,定时器/计数器应用极其广泛。 本章主要讨论MCS-51单片机定时器/计数器T0、T1、T2的逻辑结构、工作原理、使用方法和应用。 本章为单片机的主要内容,也是学习第七章串行口的基础,第6章 MCS-51单片机的定时器/计数器,6.1 单片机定时器/计数器的结构及原理,主要内容 6.1.1 单片机定时器

2、/计数器的结构 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有中断功能,计数器溢出或被触发(

3、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

4、个数 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,使用外部控制

5、门,且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的溢出标志位 计数

6、溢出,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位,其

7、它完全相同,现在一般都不使用模式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=1 P3.2引脚为高电平,T0运行GATE=0,由内部控制运行 TR0设置为1,T0运行,6.2.2 T0、T1的

8、工作模式,计数部件 由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

9、-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仅用作

10、波特率发生器或其它不用中断的地方。 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.选择定时和计数概念 如果需要对单片机外部输入的脉冲进行计量,则选择计数功能(如统计产品数量、轮子转到周数(每周产生的脉冲数目一定

11、)、液滴的数目等); 否则选择定时功能(如定时启动/停止机器运转、定时打开/关闭阀门、产生方波、产生某种频率的声音等,6.2.3 T0、T1的使用方法,2.选择工作模式 (1)计算计数值N 1)计数情况 需要计的数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)确定工作模式 如果N25

12、6,则选择模式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位

13、计数器使用,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中的值在变化,读的期间有可能进位,读出的数据不正确。正确的读取方法如下: do xh=THx; xl=TLx; while(xh!=THx); 程序中的xl、xh为已经定

14、义过的无符号字符型变量,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 = 500 N=500256,所以选择模式1。 模式字

15、: 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_in

16、t(void) interrupt 1 /中断服务程序 TL0=0 x0c; TH0=0 xfe;/定时器重赋初值 P1_0=P1_0;/P1.0取反,输出方波 汇编语言程序: ORG0000H SJMPMAIN ORG000BH;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;启动T0 SJMP$;等待T0中断 INT_T0:

17、;中断服务程序 MOV TL0,#0CH MOVTH0,#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=250 N=250256,所以选择模式2,6.2.3 T0、T1的使用方法,模式字:

18、 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;/启动定时器1 while(1);/等待中断 void time0_int(void) interrupt 3 P1_0=P1_0;,6.2.3

19、 T0、T1的使用方法,2)中断方式汇编语言程序 ORG0000H LJMPMAIN ORG001BH;中断处理程序 CPLP1.0 RETI ORG 0030H;主程序 MAIN: MOV SP,#0DFH MOV TMOD,#20H MOV TL1,#06H MOV TH1,#06H SETB ET1;允许定时器1中断 SETB EA;允许CPU中断 SETB TR1;启动定时器1 SJMP $;等待中断 END,6.2.3 T0、T1的使用方法,3、采用查询方式程序 (1)查询方式C语言程序 # include sbitP1_0=P10; void main() TMOD=0 x02;

20、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,#02H MOVTL0,#06H MOVTH0,#06H SETBTR0 LOOP: JNBTF0,$;查询计数溢出 CLRTF0 CPLP1.0 SJMPLOOP END,6.3 定时器/计数器T2,主要内容 6.3.1 T2的特殊功能寄存器 6.3.2 T2的工作方式,定时器/计数器T2的功能结构图,定时器T2概述,1、 T2的功能:89C5

21、2中的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溢出时置位,申请中断。软件清零。 波特率发生器方式下

22、(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溢出信号分频后做串

23、行口工作在模式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,且

24、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、TH2 4. 捕获寄存器RCA

25、P2L、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时,自

26、动重装方式。有两种情况引起重装,结构如下页图所示。 (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,

27、请求中断; 将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

28、与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

29、 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作为

30、波特率发生器使用时的编程方法: 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.0 2)输出方波频率: f=fosc(4(65536 - (RCAP2H,RCAP2L) (RCAP2H,RCAP2L)= 65536 -foscf4 3)特点:自

31、动重装初值 计数满后,将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的时钟输出方

32、式可直接输出方波。 输出方波周期为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;/启动T2 while(1);/CPU保持运行

33、状态T2在工作,6.3.2 T2的工作方式,3)汇编语言程序清单 T2MOD EQU 0C9H;定义T2模式寄存器 TL2 EQU 0CCH;定义T2计数低8位寄存器 TH2 EQU 0CDH RCAP2L EQU 0CAH;定义重装低8位寄存器 RCAP2H EQU 0CBH CP_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输出

34、时钟 MOV TL2,#48H;为定时器赋初值 MOV TH2,#0F4H MOV RCAP2L,#48H;重装寄存器赋初值 MOV RCAP2H,#0F4H SETB TR2;启动T2 SJMP $ ; 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,读取计数值便可

35、计算出脉冲宽度,单位为s,机器周期为1s,6.4 定时器应用举例,C语言程序清单: #include sbit P3_2=P32; unsigned int_test( ) TMOD=0 x09;/T0以模式1定时,用外部门 TL0=0;TH0=0;/设置初值为0 while(P3_2);/引脚为高等待变低 TR0=1;/开T0内控开关由外部门控制 while(!P3_2);/检测脉冲是否来到 while(P3_2);/检测脉冲是否结束 TR0= 0;/脉冲已结束,T0内控开关 return (TH0*256+TL0);/返回计数值,6.4 定时器应用举例,汇编语言程序清单: TEST:MOV

36、 TMOD,#09H;置T0模式1定时用外部门 MOV TL0,#00H;设置初值为0 MOV TH0,#00H JB P3.2,$ ;引脚为高等待测量下一个正脉冲 SETB TR0 ; 开T0内控开关,由外部控制行 JNBP3.2,$;检测脉冲是否来到 JBP3.2,$;检测脉冲是否结束 CLR TR0;脉冲已结束,关内控开关 MOV R7,TL0;计数器TL0的值送R7 MOV R6,TH0;计数器TH0的值送R6 RET,6.4 定时器应用举例,例6-5 设某单片机系统使用定时器较多,T1作串行口的波特率发生器,T2作时钟信号输出产生多种较复杂的报警声;另外需要对产品包装进行计数,每计1

37、20件使阴极接在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输出

38、0便使LED点亮。设置TH0计数250,由于机器周期为2s,则定时2s需要中断的次数为 2000000/(2502)=4000 TH0中断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初

39、值,计数 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;/开LED TR1=1;/启动定时器TH0 TR2=1;/启动T2产生声音信号 void TH0_int(void) interrupt 3 /TH0(T1)中断服务程序 TH0=6;/定时器重赋初值 num+;/中断次数加1 If(num

40、3999) P3_7=1; /关LED TR1=0;/关闭TH0 TR2=0;/关声音 num=0;/中断次数设置为0,6.4 定时器应用举例,例6-6 对89C52单片机的定时器T0编程,设计一产生时分秒的时钟。设晶振频率为12MHz。 分析:设置T0为定时功能,定时10ms产生中断,中断100次为1秒,秒加1,有了秒时间后,按照时钟的时分秒规律,对保存时分秒的变量进行相应的累加,便产生了时分秒时间。 电路设计: 本例用6位数码管显示出时间,其电路和模拟运行如图6-17所示。图中的排电阻RESPACK8为数码管各段的驱动限流电阻,可以设200左右,数码管的各位在实际中也需要驱动,如使用74L

41、S245,在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 /显示段码输

42、出口 #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

43、; 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;/百分之一秒加1 if(num99) num=0; sec+;/秒加1 if(sec59) sec=0; min+; /分加1 if(min59) min=0;hou+

44、; /时加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=

45、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/显示位码输出口 uns

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论