单片机6无T2-2012-3-13_第1页
单片机6无T2-2012-3-13_第2页
单片机6无T2-2012-3-13_第3页
单片机6无T2-2012-3-13_第4页
单片机6无T2-2012-3-13_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章章 MCS-51单片机定时器单片机定时器/计数器计数器目目 录录6.1 MCS-51定时器定时器/计数器的结构及原理计数器的结构及原理6.2 定时器定时器T0、T16.3 定时器定时器T26.4 定时器应用举例定时器应用举例本章讨论本章讨论MCS-51单片机定时器单片机定时器/计数器的结构和工作原计数器的结构和工作原理,内容主要有理,内容主要有MCS-51单片机定时器单片机定时器T0、T1、T2的内部的内部构造,工作方式和工作模式的选择和应用。构造,工作方式和工作模式的选择和应用。本章是单片机的主要内容,也是第七章学习的前提。本章是单片机的主要内容,也是第七章学习的前提。三种方法实现定

2、时或计数 硬件法:完全由硬件电路完成,不占用CPU的时间。但当要求改变定时时间时只能改变电路中的元件参数。 软件法:执行一段循环程序来进行时间延时,优点是无额外的硬件开销,但牺牲了CPU的时间,且不容易得到比较精确的时间。 可编程定时器/计数器:可以通过软件编程来实现定时时间的改变,通过中断或查询来完成定时或计数功能,当定时时间到或计数满时置位溢出标志。 本章主要讨论第三种方式。6.1 MCS-51单片机定时器单片机定时器/计数器的结计数器的结构及工作原理构及工作原理主要内容主要内容6.1.1 MCS-51单片机定时器的内部结构单片机定时器的内部结构6.1.2 MCS-51单片机定时器的工作原

3、理单片机定时器的工作原理6.1.3 定时器定时器/计数器内部的特殊寄存器计数器内部的特殊寄存器6.1.1 MCS-51单片机定时器的内部结构单片机定时器的内部结构 89C52单片机内部的定时器单片机内部的定时器/计数器逻辑结计数器逻辑结构如下图所示:构如下图所示: 图图6-1 89C51定时器结构定时器结构从图上可以看出,从图上可以看出,MCS-51的定时器的定时器/计数器主计数器主要有以下部分构成要有以下部分构成: 两个两个16位的可编程定时器位的可编程定时器/计数器:计数器:T0、T1,既,既可以工作在定时工作方式,也可以工作在计数工作可以工作在定时工作方式,也可以工作在计数工作方式。方式

4、。 每个定时器均有两部分构成:每个定时器均有两部分构成:THx和和TLx 特殊功能寄存器特殊功能寄存器TMOD和和TCON 对对T0和和T1进行进行控制。控制。 引脚引脚P3.4 、 P3.5输入计数脉冲。输入计数脉冲。 特殊功能寄存器之间通过内部总线和控制逻辑特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。电路连接起来。 定时器功能定时器功能 每个定时器都可由软件设置为定时工作方式或计数工作方式或其他灵活多样的可控功能方式。这些功能由特殊功能寄存器TMOD和TCON所控制。 定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。 每个定时器/计数器还有四种工作模

5、式。其中模式0-2对T0和T1是一样的,模式3对两者不同。定时工作方式定时工作方式定时器计数89C51片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的数值加1直至计满溢出。当89C51采用12MHz晶振时,一个机器周期为1s,计数频率为1MHz。计数工作方式计数工作方式 通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时定时器的值加1。 CPU检测一个1至0的跳变需要两个机器周期,故最高计数频率为振荡频率的1/24。 为了确保某个电平在变化之前被采样一次,要求电平保持时间至少是一个完整的机器周期。1、T0、T1 的方式寄存

6、器的方式寄存器TMOD 复位后,复位后,TMOD=00H,不可位寻址不可位寻址。其格式如图。其格式如图6-3所所示:示:TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0图图6-3 定时器方式寄存器定时器方式寄存器TMOD GATE 门控位。门控位。 GATE1时,由外部中断引脚时,由外部中断引脚INT0、INT1和和TR0、TR1共同来启动定时器。共同来启动定时器。当当INT0引脚为引脚为高电平高电平时,时,TR0置位,启动定时器置位,启动定时器T0。当当INT1引脚为高电平时,引脚为高电平时,TR1置位置位,启动定时器启动定时器T1。GATE0时

7、,仅由时,仅由TR0和和TR1置位置位来来启动定时器启动定时器T0和和T1。C/T定时或计数方式选择位定时或计数方式选择位 。C/T0时,选择时,选择定时定时功能功能 。TimerC/T1时,选择时,选择计数计数方式。方式。Counter通过引脚通过引脚T0(P3.4)和)和T1(P3.5) 对外部信对外部信号进行计数。号进行计数。 在每个机器周期的在每个机器周期的S5P2期间,期间,CPU采样采样引脚的输入电平引脚的输入电平。若前一机器周期采样值为。若前一机器周期采样值为1,下一机器周期采样值为,下一机器周期采样值为0,则计数器增,则计数器增1,此后的机器周期此后的机器周期S3P1期间,新的

8、计数值装入期间,新的计数值装入计数器。计数器。 M1、M0 工作模式选择位。工作模式选择位。 由于有由于有M1和和M0两位,可以有四种工作方式。两位,可以有四种工作方式。T0有有4种种工作模式工作模式,T1有有3种工作模式种工作模式。选择情况如表。选择情况如表6-1所示。所示。 定时器定时器/计数器计数器T1不能工作在模式不能工作在模式3。设置。设置T1的的M1M0=11,T1将停止工作。将停止工作。表表6-1 定时器定时器/计数器的工作模式计数器的工作模式M1M0 工作模式工作模式功能介绍功能介绍00模式模式013位定时器位定时器/计数器计数器 01模式模式116位定时器位定时器/计数器计数

9、器10模式模式28位自动重置定时器位自动重置定时器/计数器计数器11模式模式3定时器定时器0:TL0可做可做8位定时器位定时器/计数器,计数器,TH0为为8位定时器位定时器定时器定时器1:不工作。:不工作。图图6-6 TMOD各位定义及具体的意义各位定义及具体的意义2、T0、T1 的控制寄存器的控制寄存器TCON 此寄存器可以位寻址和字节寻址。此寄存器可以位寻址和字节寻址。TCON(88H)D7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1IT1IE0IT0图图6-3 定时器的控制寄存器定时器的控制寄存器 TR1(TCON.6)T1运行控制位。 Timer Run 可通过软

10、件置1(TR1=1)或清0(TR1=0)来启动或 关闭 T1。 在程序中用指令“SETB TR1”使TR1位置1,定时器T1便开始计数。CLR TR1 TR0(TCON.4)T0运行控制位。其功能和操作情况同TR1。GATE=0时,用软件使TR1置1启动定时器1,若用软件使TR1清0,则停止定时器1。GATE=1时,用软件TR1置1,如果检测到引脚INT1(P3.3)输入高电平时启动定时器1。6.2 定时器定时器T0、T1主要内容主要内容6.2.1 定时器定时器T0、T1模式模式0下的结构下的结构6.2.2 定时器定时器T0、T1模式模式1下的结构下的结构6.2.3 定时器定时器T0、T1模式

11、模式2下的结构下的结构6.2.4 定时器定时器T0、T1模式模式3下的结构下的结构重点:模式0、1、2的工作原理及结构难点:定时初值的概念及计算模式0结构模式1结构模式2结构6.2.1 定时器定时器/计数器计数器T0、T1的模式的模式0当当TMOD中的中的M10、M00时,选定模式时,选定模式0。模式模式0时的结构如图时的结构如图6-5所示。所示。 计数寄存器由计数寄存器由13位组成位组成。TH0高八位和高八位和TL0的低的低5位构成。位构成。TL0的高的高3位未用。位未用。 图图6-5 模式模式0的逻辑结构图的逻辑结构图1. C/T=1时工作于计数方式,外部计数脉冲由P3.4引脚输入。2.

12、C/T=0时工作于定时方式,计数脉冲为内部脉冲,其周期是一个机器周期。3. GATE=0时系统的启动只受TR0控制。TR0=1启动。4. 最大值和最大计数值。213=81925. 计数溢出后TL0=TH0=00H6. 定时初值与中断模式模式0 0工作特点工作特点定时初值计算定时初值计算 做定时器时,其定时时间的计算公式如下:做定时器时,其定时时间的计算公式如下:定时时间为: t=(213T0初值)12/fosc最大定时时间最大定时时间(初值为初值为0)为:为:213 12/fosc 定时初值为:T0初值 = 213-tfosc/126.2.2 定时器定时器/计数器计数器T0、T1的模式的模式1

13、 当当TMOD中的中的M10、M01时,选择模式时,选择模式1。模式模式1时的结构如图下图所示。时的结构如图下图所示。 计数寄存器由计数寄存器由16位组成:位组成:TH0的的8位和位和TL0的的8位构成。位构成。二、模式二、模式 1 工作特点工作特点1. 基本功能等同于模式0,只有计数宽度不同。C/T=1,工作于计数方式,C/T=0时工作于定时方式。2. GATE=0时系统的启动只受TR0控制。TR0=1启动。3. 计数最大值 216=655364. 计数溢出后TL0=TH0=00H5. 定时初值 定时时间为:t=(216-T0初值)12/fosc T0初值= 216-tfosc/126.2.

14、3 定时器定时器/计数器计数器T0、T1的模式的模式2当当TMOD中的中的M11、M00时,选定模式时,选定模式2。模式模式2时的结构如图时的结构如图6-7所示。所示。TL0作作8位的定时器位的定时器/计数器用,计数器用,TH0作作8位的位的初值寄存器用,用于保存初值。初值寄存器用,用于保存初值。图图6-7 模式模式2的逻辑结构图的逻辑结构图该模式的计数宽度为8位定时器/计数器。TL0计数最大值为:28=256在程序初始化时,TL0和TH0由软件赋予相同的初值。当TL0计数溢出时TH0的初值送到寄存器TL0中。初值能够自动重装。定时初值 定时时间为:t=(28-T0初值)12/fosc T0初

15、值= 28-tfosc/12模式模式 2 工作特点工作特点6.2.4 定时器定时器/计数器计数器T0的模式的模式3TMOD中的中的M1l、M01时,选定模式时,选定模式3。模式模式3的的T1:停止工作。停止工作。模式模式3的的T0:其中的其中的TL0为为8位定时器位定时器/计数器,计数器,TH0为为8位定时器,逻辑结构如下图所示。位定时器,逻辑结构如下图所示。 模式3下T0逻辑结构 T0中的中的TL0:占用占用T0的所有控制位,例如的所有控制位,例如T0的的GATE、运行控制位运行控制位TR0、脉冲输入引脚、脉冲输入引脚(P3.4)、计数溢出标志计数溢出标志位位TF0和和中断矢量中断矢量(地址

16、为地址为000BH)等。等。 T0中的中的TH0:占用:占用T1的控制位的控制位,包括运行控制位包括运行控制位TR1计计数溢出标志位数溢出标志位TF1和和中断矢量中断矢量(地址为地址为001BH)等。等。T0方式方式3时的时的T1: T1可以选择方式可以选择方式0、1或或2。 T1的结构如下图所示,此时计数溢出标志的结构如下图所示,此时计数溢出标志位位TF1及及T1中断矢量中断矢量(地址为地址为001BH)已被已被TH0所所占用,所以占用,所以T1仅能作为波特率发生器或其它不仅能作为波特率发生器或其它不用中断的地方用中断的地方。T1串行口波特率发生器时,其计数溢出直串行口波特率发生器时,其计数

17、溢出直接送至串行口。接送至串行口。只需设置好工作方式,串行口只需设置好工作方式,串行口波特率发生器自动开始运行。波特率发生器自动开始运行。如果要停止如果要停止T1,只需编程将,只需编程将TMOD中中T1的的M1、M0位设置为位设置为1、1即可。即可。T0方式方式3时的时的T1(c)T1方式2T0模式模式3时时T1的的结构结构T0模式模式3时时TH0的结构的结构6.2.4 定时器定时器/计数器计数器T0的模式的模式3例例6-1 设单片机的振荡频率为设单片机的振荡频率为12MHz,用,用定时器定时器/计数器计数器0的模式的模式1编程,在编程,在P1.0引脚产引脚产生一个周期为生一个周期为1000s

18、的方波,定时器的方波,定时器T0采用采用中断的处理方式。中断的处理方式。分析:定时器的设置一般有如下方面内容。分析:定时器的设置一般有如下方面内容。工作方式选择。工作方式选择。当需要产生波形信号时,当需要产生波形信号时,往往使用定时器往往使用定时器/计数器的定时功能,定时时计数器的定时功能,定时时间到了对输出端进行相应的处理即可。间到了对输出端进行相应的处理即可。 工作模式选择,根据定时时间长短选择工工作模式选择,根据定时时间长短选择工作模式。作模式。定时时间长短依次为定时时间长短依次为模式模式1模式模式0模式模式2。如果。如果产生周期性信号,产生周期性信号,首选首选模式模式2,不用重装初值。

19、不用重装初值。6.2.4 定时器定时器/计数器计数器T0的模式的模式3 定时时间计算:定时时间计算:周期为周期为1000s的方波要的方波要求定时器的定时时间为求定时器的定时时间为500s,每次溢出时,每次溢出时,将将P1.0引脚电平的状态取反,就可以在引脚电平的状态取反,就可以在P1.0上产生所需要的方波。上产生所需要的方波。 定时初值计算:定时初值计算:振荡频率为振荡频率为12MHz,则,则机器周期为机器周期为1s,设计数初值为,设计数初值为X,则,则(65536-X)1s=500s得得X=65036=0FE0CH定时器的初值为:定时器的初值为:TH0=0FEH,TL0=0CH C语言程序语

20、言程序:#include /包含特殊功能寄存器库包含特殊功能寄存器库sbit P1_0=P10; /进行位定义进行位定义void main( )TMOD=0 x01; /T0做定时器,工作在模式做定时器,工作在模式1TL0=0 x0c;TH0=0 xfe;/设置定时器的初值设置定时器的初值ET0=1; /允许允许T0中断中断 EA=1; /允许允许CPU中断中断TR0=1; /启动定时器启动定时器while(1); /等待中断等待中断 void time0_int(void) interrupt 1/中断服务程序中断服务程序TL0=0 x0c;TH0=0 xfe;/定时器重赋初值定时器重赋初值

21、P1_0=P1_0;/P1.0取反,输出方波取反,输出方波 汇编语言程序汇编语言程序:ORG0000HSJMPMAINORG000BHLJMPTIME0MAIN:MOV TMOD,#01H;T0定时,模式定时,模式1MOVTL0,#0CH;置定时初值;置定时初值MOVTH0,#0FEH SETBET0;定时器;定时器T0开中断开中断SETBEA;CPU开中断开中断SETBTR0;启动定时器;启动定时器T0SJMP$;等待定时器溢出;等待定时器溢出TIME0: MOV TL0,#0CH ;中断服务程序中断服务程序MOVTH0,#0FEH;重装定时初值;重装定时初值CPLP1.0;P1.0取反,输

22、出方波取反,输出方波RETI;中断返回;中断返回END例例6-2 设单片机的振荡频率为设单片机的振荡频率为12MHz,用定,用定时器时器/计数器计数器0编程实现从编程实现从P1.0输出周期为输出周期为500s的的方波。方波。分析:分析:定时时间:定时时间:从从P1.0输出周期为输出周期为500s的方的方波。定时波。定时250s,定时结束对,定时结束对P1.0取反。取反。 模式选择模式选择:当系统时钟频率为:当系统时钟频率为12MHz,机器,机器周期为周期为1s,定时器,定时器/计数器计数器0可以选择模式可以选择模式0、模式、模式1和模式和模式2。模式。模式2最大的定时时间为最大的定时时间为25

23、6s,满足,满足250s的定时要求,选择模式的定时要求,选择模式2(1)定时初值计算)定时初值计算 (256-X)1s=250s X=6;则则TH0=TL0=6采用中断处理方式的程序采用中断处理方式的程序 :C语言程序语言程序 :# include /包含特殊功能寄存器库包含特殊功能寄存器库sbit P1_0=P10; voidmain( )TMOD=0 x02;/选择定时器的工作模式选择定时器的工作模式TL0=0 x06;TH0=0 x06;/为定时器赋初值为定时器赋初值 ET0=1;/允许定时允许定时0中断中断 EA=1;TR0=1;/启动定时器启动定时器0while(1);/等待中断等待

24、中断void time0_int(void) interrupt 1 P1_0=P1_0;汇编语言程序汇编语言程序:ORG0000HLJMPMAIN ORG000BH;中断处理程序;中断处理程序CPLP1.0RETIORG 0030H;主程序;主程序MAIN:MOV TMOD,#02H MOV TL0,#06HMOV TH0,#06HSETB ET0;允许定时器;允许定时器0中断中断SETB EA;允许;允许CPU中断中断SETB TR0;启动定时器;启动定时器0SJMP $;等待中断;等待中断END采用查询方式处理的程序:采用查询方式处理的程序:C语言程序:语言程序:# include /特

25、殊功能寄存器库特殊功能寄存器库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;汇编语言程序汇编语言程序:MAIN:MOV TMOD,#02H;主程序;主程序MOVTL0,#06HMOVTH0,#06HSETBTR0LOOP:JNBTF0,$;查询计数溢出;查询计数溢出CLRTF0CPLP1.0 SJMPLOOPEND6.4 定时器应用举例定时器应用举例主要内容主要内容6.4.1 定时器的初始化定时器的初始化6.4.2

26、 定时器应用举例定时器应用举例6.4.1 定时器的初始化定时器的初始化 在使用定时器在使用定时器/计数器前,应首先对其进行计数器前,应首先对其进行初始化编程。初始化编程。一、定时器的初始化步骤一、定时器的初始化步骤1、设置、设置TMOD。选择工作模式和工作方式。选择工作模式和工作方式。2、设置定时器的计数初值、设置定时器的计数初值。将初值写入。将初值写入TH0和和TL0或或TH1、TL1。3、如果需要中断,设置中断允许寄存器、如果需要中断,设置中断允许寄存器IE。4、设置、设置TCON,启动定时器,启动定时器。 可以使用位操作指令。例如:可以使用位操作指令。例如:SETB TRx。二、定时器二

27、、定时器/计数器初值计算计数器初值计算 定时器定时器/计数器的模式和方式不同,计数初值也将不同。计数器的模式和方式不同,计数初值也将不同。计数器的长度为计数器的长度为n,则计数的最大值为,则计数的最大值为2n 。1、工作于定时方式、工作于定时方式计数脉冲由内部的时钟提供,每个机器周期进行加计数脉冲由内部的时钟提供,每个机器周期进行加1。设晶振频率为设晶振频率为fosc,则计数脉冲的频率为,则计数脉冲的频率为fosc/12,计数脉,计数脉冲周期冲周期T=1/(fosc/12)。)。如果进行定时时间为如果进行定时时间为t,计数初值为,计数初值为X,则:,则:初值X = 2n - t fosc/12

28、 2、工作于计数方式、工作于计数方式 当工作在计数方式时,对外部脉冲计数。利用计数器计当工作在计数方式时,对外部脉冲计数。利用计数器计数结束产生溢出的特性,来计算初值数结束产生溢出的特性,来计算初值X 。则有:。则有:X= 2n计数次数计数次数6.4.2 定时器的应用举例定时器的应用举例例例6-3 利用定时器利用定时器T1的模式的模式2对外部信号进行对外部信号进行计数,要求每计满计数,要求每计满100次,将次,将P1.0端取反。端取反。分析:分析:T1工作在计数方式。脉冲数工作在计数方式。脉冲数100。模式模式2,模式字,模式字TMOD=0110b。1、初值计数:、初值计数:在模式在模式2下:

29、下:X= 28-100=156D=9CH2、C语言程序:语言程序:#include sbit P1_0=P10;/进行位定义进行位定义void main ( )TMOD=0 x60;/T1工作在模式工作在模式2,计数,计数TL1=0 x9c;/装入计数(重装)初值装入计数(重装)初值TH1=0 x9c;ET1=1;/允许定时器允许定时器1中断中断EA=1;/开中断开中断TR1=1 ;/启动定时器启动定时器1while(1);void time0_int(void) interrupt 3 /中断服务程序中断服务程序P1_0=P1_0;/取反,产生方波取反,产生方波3、汇编语言程序:、汇编语言程

30、序:MAIN: MOV SP, #0DFH;设置堆栈指针设置堆栈指针MOV TMOD,#60H;T1工作在模式工作在模式2,计数,计数MOVTL1,#9CH;装入计数初值装入计数初值MOVTH1, #9CH;装入计数(重装)初值装入计数(重装)初值MOVIE,#88H;允许定时器中断允许定时器中断SETBTR1;启动定时器启动定时器HERE:SJMP HERE;等待中断等待中断中断服务程序中断服务程序:ORG 001BH;中断服务程序入口地址中断服务程序入口地址CPLP1.0;对对P1.0引脚信号取反引脚信号取反RETI;中断返回中断返回6.4.2 定时器的应用举例定时器的应用举例 例例6-4

31、 某一应用系统需要对某一应用系统需要对INT0引脚的正脉引脚的正脉冲测试其脉冲宽度。冲测试其脉冲宽度。分析:分析:可以设置定时器可以设置定时器/计数器计数器0为定时方式,为定时方式,工作在模式工作在模式1,且置位,且置位GATE位为位为1,将外部需测,将外部需测试的脉冲从试的脉冲从INT0引脚输入,设机器周期为引脚输入,设机器周期为1s。C语言程序:语言程序:计算脉宽和处理程序略。计算脉宽和处理程序略。#include sbit P3_2=P32;unsigned int_test( )TMOD=0 x09;TL0=0 x00;TH0=0 x00;while(P3_2);TR0=1; whil

32、e(!P3_2);while(P3_2);TR0= 0;return (TH0*256+TL0);汇编语言程序汇编语言程序:INT00:MOV TMOD,#09H MOV TL0,#00H;设置计数初值设置计数初值MOV TH0,#00HLOP1:JBP3.2,LOP1 ;等待等待P3.2变低电平变低电平SETB TR0;启动启动T0计数计数LOP2:JNB P3.2,LOP2 ;等待等待P3.2变成高电平变成高电平LOP3:JBP3.2,LOP3 ;等待等待P3.2变成低电平变成低电平 CLR TR0;停止停止T0计数计数MOV A,TL0;计数器计数器TL0中的内容送中的内容送AMOV B

33、,TH0;计数器计数器TH0中的内容送中的内容送B 6.4.2 定时器的应用举例定时器的应用举例例例6-5 某应用系统要求通过某应用系统要求通过P1.0和和P1.1口分口分别输出脉冲周期为别输出脉冲周期为200s和和400s的方波,的方波,fosc=6MHz。 分析:分析:需要两个定时器需要两个定时器。系统定时器。系统定时器/计数器计数器T0、T1都可以使用。在这里可以选择使用定时器都可以使用。在这里可以选择使用定时器/计数计数器器0,设置为定时模式,设置为定时模式,工作模式工作模式3,分成两个,分成两个8位位的定时器。的定时器。1、计算定时初值。、计算定时初值。 X =28 -tfosc/1

34、2X1 =28 -10010-66106/12=256-50=206= 0CEHX2 =28 -20010-66106/12=256-100=156= 9CH初值分别为初值分别为0CEH和和9CH。2、C语言程序:语言程序:# include sbitP1_0=P10;/进行位定义进行位定义sbitP1_1=P11;void main( )TMOD=0 x03; /设置设置T0定时,工作在模式定时,工作在模式3TL0=0 xce;/设置设置TL0计数初值,产生计数初值,产生200s方波方波TH0=0 x9c;/设置设置TH0计数初值,产生计数初值,产生400s方波方波EA=1;/设置总中断允许

35、位设置总中断允许位ET0=1;/设置定时器设置定时器0中断允许位中断允许位 ET1=1;/设置定时器设置定时器/计数器计数器1中断允许位中断允许位TR0=1;/启动定时器启动定时器T0TR1=1;/启动定时器启动定时器T1while(1); /等待溢出等待溢出void time0L_int(void) interrupt 1/T0中断服务程序中断服务程序TL0=0 xce;/定时器重赋初值定时器重赋初值P1_0=P1_0;/产生方波产生方波void time0H_int(void) interrupt 3 /T1中断服务程序中断服务程序TH0=0 x9c;/定时器重赋初值定时器重赋初值P1_1

36、=P1_1;/产生方波产生方波3、汇编语言程序:、汇编语言程序:ORG0000HLJMPMAINORG000BHLJMPT0SORG001BHLJMPT1SMAIN: MOVTMOD,#03H; 设置设置T0定时,模式定时,模式3MOVTL0,#0CEH;设置设置TL0计数初值,产生计数初值,产生200s方波方波MOVTH0,#9CH;设置设置TH0计数初值,产生计数初值,产生400s方波方波SETBEA;设置总中断允许位设置总中断允许位SETBET0;允许定时器允许定时器0中断中断SETBET1;允许定时器允许定时器1中断中断SETBTR0;启动定时器启动定时器T0SETBTR1;启动定时器

37、启动定时器T1T0S:MOVTL0,#0CEH; T0中断服务程序中断服务程序,重新设置定时初值重新设置定时初值CPLP1.0;P1.0口的输出取反口的输出取反RETI T1S:MOVTH0,#9CH ; T1中断服务程序,中断服务程序,重新设置定时初值重新设置定时初值CPLP1.1 ;对对P1.0口输出信号取反口输出信号取反RETI ;中断返回中断返回6.4.2 定时器的应用举例定时器的应用举例例例6-6 利用定时器精确定时利用定时器精确定时1s控制控制LED以秒为单以秒为单位闪烁。已知位闪烁。已知fosc=12MHz。分析:分析:定时器定时器/计数器在定时方式下,各个模式计数器在定时方式下

38、,各个模式最大定时时间分别为:最大定时时间分别为:定时器定时器0=(8192-0)12/fosc=8.192ms 定时器定时器1=(65536-0)12/fosc=65.536ms 定时器定时器2=(256-0)12/fosc=0.256ms 选择模式选择模式1。定时时间为。定时时间为10ms,当,当10ms的定时的定时时间到,时间到,TF1=1,连续定时,连续定时100次,调用亮灯函数;次,调用亮灯函数;再连续定时再连续定时100次,调用灭灯函数。循环工作,即次,调用灭灯函数。循环工作,即达到达到1s闪烁闪烁1次的效果。次的效果。1、初值计算:、初值计算:(65536-X)12/fosc=1

39、0ms初值初值X=55536=0D8F0H2、程序设计:、程序设计:C语言程序:语言程序:#include sbit LED=P10;unsigned char i;void main()LED=0;/定义灯的初始状态为灭定义灯的初始状态为灭TMOD=0 x10;/设置定时器设置定时器1工作在模式工作在模式1TL1=0 xf0;TH1=0 xd8;/设置定时初值设置定时初值TR1=1; /启动定时器启动定时器1ET1=1;/允许定时器允许定时器1中断中断EA=1;while(1); void timer1_int() interrupt 3TL1=0 xf0;/定时器重装初值定时器重装初值TH

40、1=0 xd8; if(+i=100)LED=LED;i=0; 汇编语言程序汇编语言程序:选择硬件定时选择硬件定时10ms,设置一计数单元,存放计数值,设置一计数单元,存放计数值100,循环定,循环定时时100次。次。ORG0000HLJMPMAINORG001BHLJMPTIMERMAIN:MOVR0,#100 ;存放计数值存放计数值100MOVTMOD,#10HMOVTL1,#0F0HMOVTH1,#0D8HSETBET1SETBEASETBTR1CLRP1.0SJMP$TIMER:MOVTL1,#0F0HMOVTH1,#0D8HDJNZR0,NEXTMOVR0,#100CPLP1.0NE

41、XT: RETIEND已知89C51单片机osc=6MHz,试利用T0和P1口输出矩形波,矩形波高电平宽为40us,低电平宽为360us. 40us 360usP1.0 解: 前面我们遇到的都是方波,所以高、低电平持续时间是一样的,只要用定时器定时周期的一半时间,把P1.0引脚的电平持续取反就可以了。但是现在矩形波高电平宽为对应40us,低电平宽为360us,二者不相等。 观察两个时间,40us和360us之间刚好是一个9倍的关系,这样可以用定时器定时一个基数40us, 360us可以用循环9次40us来实现。方式2对应的最大定时时间是512u,所以用方式2就可以了。TMOD=00000010

42、40us定时初值:X= 28-406/12=256-20=236=0ECH#include sbit signal=P10;bit level; /用来存储产生T0中断之前输出何种电平unsigned char counter;void main(void) TMOD=0 x02; /T0选择工作方式2,8位定时器 TH0=0 xec; TL0=0 xec; /定时时间为40us counter=0;signal=1;level=1; /初始化全局变量 EA=1; /使能CPU中断 ET0=1; /使能T0溢出中断 TR0=1; /T0开始运行 while(1) ; /无限循环 void is

43、r_t0(void) interrupt 1 /T0中断服务函数 if(level=1) /如果中断产生之前输出的是高电平 signal=0; /输出低电平 level=0; /保存当前输出的电平(低电平) else /如果中断产生之前输出的是低电平 counter+; /中断次数计数加1 if(counter=9) /如果已经输出低电平360us counter=0; /中断次数计数归零 signal=1; /输出高电平 level=1; /保存当前输出的电平(高电平) C语言程序:汇编语言程序: ORG 0030H MOV TMOD,#02H MOV TL0,#0ECH MOV TH0,#

44、0ECH SETB TR0 H1:SETB P1.0 H2:JBC TF0,L1 AJMP H2 L1:CLR P1.0 MOV R2,#09H L2:JBC TF0,L3 AJMP L2 L3:DJNZ R2,L2 AJMP H1 END 已知某生产线的传送带上不断地有产品单向传送, 产品之间有较大间隔。使用光电开关统计一定时间内的产品个数。试用单片机定时器/计数器T1的方式1完成该项产品的计数任务。 (1) 初始化: TMOD=11010000B=0D0H(GATE=1, C/T=1, M0M1=01) (2) T1在方式1时, 溢出产生中断, 且计数器回零, 故在中断服务程序中, 需用R

45、0计数中断次数, 以保护累积计数结果。 (3) 启动T1计数, 开T1中断。 程序清单如下: ORG 0000H AJMP START ORG 001BH AJMP T1INT ORG 0100H START: MOV SP, 60H MOV TMOD, 0D0H MOV TH1, 00H MOV TL1, 00H MOV R0, 00H ; 清中断次数计数单元 SETB TR1 ; 启动T1 SETB ET1; 开T1中断 SETB EA ; 开总中断 MAIN: ACALL DISP ; 主程序, 调显示子程序 ORG 0A00H T1INT: INC R0 ; 中断服务子程序 RETI

46、DISP: ; 显示子程序 RET 6.3.5 综合应用举例综合应用举例(例(例6-76-7)例6-7:设计实时时钟程序。时钟就是以秒、分、时为单位进行计时。用定时器与中断的联合应用。解:(1)实现时钟计时的基本方法 计算计数初值。 时钟计时的最小单位是秒,但使用单片机定时器/计数器进行定时,即使按方式1工作,其最大定时时间也只能达131ms。因此,可把定时器的定时时间定为100ms,计数溢出10次即得到时钟计时的最小单位秒;而10次计数可用软件方法实现。假定使用定时器T0,以工作模式1进行100ms的定时。如fosc=6MHz,则计数初值X为: (216X)12/(6 106 )=10010

47、-3 s X=15536=3CB0H因此 : (TL0)=0B0H (TH0)=3CH6.3.5 综合应用举例综合应用举例(例(例6-76-7) 采用定时方式进行溢出次数的累计,计满10次即得到秒计时。 从秒到分和从分到时的计时是通过累计和数值比较实现的。 时钟显示即及显示缓冲区部分在这里略,可自行设计。(2)程序流程及程序清单 主程序(MAIN)的主要功能 是进行定时器T1的初始化编程并启动T1,然后通过反复调用显示子程序,等待100ms定时中断的到来。其流程如下图所示。设设T1为模式为模式1设中断次数设中断次数清计时单元清计时单元开中断开中断启动启动T1调用显示子程序调用显示子程序等待定时中断等待定时中断图图6-13 时钟主程序流程时钟主程序流程6.3.5 综合应用举例综合应用举例(例(例6-76-7)(2)程序流程及程序清单 中断服务程序(PITO)的主要功能 是进行计时操作。程序开始先判断计数溢出时候满了10次,不满表明还没达到最小计时单位秒,中断返回;如满10次则表示已达到最小计时单

温馨提示

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

评论

0/150

提交评论