定时器计数器_第1页
定时器计数器_第2页
定时器计数器_第3页
定时器计数器_第4页
定时器计数器_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第6 6章章 AT89S51AT89S51单片机的单片机的 定时器定时器/ /计数器计数器2第第6 6章章 目录目录6.1 6.1 定时器定时器/ /计数器计数器T0T0、T1T1概述概述 6.1.1 6.1.1 定时器定时器/ /计数器计数器T0T0、T1T1的结构的结构 6.1.2 6.1.2 定时器定时器/ /计数器的原理计数器的原理6.2 6.2 定时器定时器/ /计数器的控制方法计数器的控制方法 6.2.1 6.2.1 工作方式寄存器工作方式寄存器TMODTMOD 6.2.2 6.2.2 定时定时/ /计数器控制寄存器计数器控制寄存器TCONTCON 6.2.3 6.2.3 定时

2、定时/ /计数器的初始化与启动计数器的初始化与启动 6.2.4 6.2.4 定时定时/ /计数器初值的确定方法计数器初值的确定方法6.3 6.3 定时器定时器T0T0、T1T1的工作方式的工作方式.36.4 定时器定时器/计数器应用计数器应用 6.4.1 方式1的应用 6.4.2 方式2的应用 6.4.3 方式3的应用 6.4.4 门控制位GATEx的应用测量脉冲宽度 6.4.5 实时时钟的设计.4内容概要内容概要工业检测与控制,许多场合都要用到工业检测与控制,许多场合都要用到计数计数或或定时定时功能。功能。例如,对外部脉冲进行计数,产生精确的定时时间等。例如,对外部脉冲进行计数,产生精确的定

3、时时间等。AT89S51AT89S51片内有两个可编程的定时器片内有两个可编程的定时器/ /计数器计数器T1T1、T0T0,可满,可满足需要。足需要。本章介绍定时器本章介绍定时器/ /计数器的计数器的结构结构与与功能功能,2 2种种工作模式工作模式和和4 4种种工作方式工作方式,以及相关的,以及相关的2 2个特殊功能寄存器个特殊功能寄存器TMODTMOD和和TCONTCON各位的定义及其编程,最后介绍定时器各位的定义及其编程,最后介绍定时器/ /计数器的编程及计数器的编程及应用实例。应用实例。56.1 6.1 定时器定时器/ /计数器计数器T0T1T0T1概述概述6.1.1 6.1.1 定时器

4、定时器/ /计数器计数器T0T1T0T1的结构的结构 图6-1 AT89S51单片机的定时器/计数器结构框图6 与定时器有关的与定时器有关的8 8位寄存器共有位寄存器共有6 6个:定时器个:定时器/ /计数器计数器T0T0由特殊功能寄存器由特殊功能寄存器TH0TH0、TL0TL0构成,定时器构成,定时器/ /计数器计数器T1T1由特殊由特殊功能寄存器功能寄存器TH1TH1、TL1TL1构成。构成。定时器和计数器具有定时器和计数器具有2 2种工作模式种工作模式,4 4种工作方式(种工作方式(方式方式0 0、方式方式1 1、方式、方式2 2和方式和方式3 3)。定时器方式寄存器)。定时器方式寄存器

5、TMODTMOD,用于选用于选择定时器择定时器/ /计数器计数器T0T0、T1T1的工作模式和工作方式。定时器控的工作模式和工作方式。定时器控制寄存器制寄存器TCONTCON,用于控制用于控制T0T0、T1T1的启动和停止计数,同时的启动和停止计数,同时包含了包含了T0T0、T1T1的状态。的状态。.76.1.2 6.1.2 定时器定时器/ /计数器的原理计数器的原理 AT89S51AT89S51的定时器的定时器/ /计数器属于增计数器属于增1 1计数器。计数器。 T0 T0、T1T1不论是工作在定时器模式还是计数器模式,都不论是工作在定时器模式还是计数器模式,都是对脉冲信号进行计数,只是计数

6、信号的来源不同。是对脉冲信号进行计数,只是计数信号的来源不同。 计数器模式计数器模式是对加在是对加在T0T0(P3.4P3.4)和)和T1T1(P3.5P3.5)两个引)两个引脚上的外部脉冲进行计数(见图脚上的外部脉冲进行计数(见图6-16-1)。)。 定时器工作模式定时器工作模式是对单片机的时钟振荡器信号经片内是对单片机的时钟振荡器信号经片内1212分频后的内部脉冲信号计数。由于时钟频率是定值,所分频后的内部脉冲信号计数。由于时钟频率是定值,所以以根据计数值根据计数值可可计算出定时时间计算出定时时间。计数器的起始计数都是。计数器的起始计数都是从计数器初值开始从计数器初值开始的。单片机复位时计

7、数器的初值为的。单片机复位时计数器的初值为0 0,也可用指令给计数器装入一个新的初值。也可用指令给计数器装入一个新的初值。.86.2 6.2 定时定时/ /计数器的控制方法计数器的控制方法6.2.1 6.2.1 定时定时/ /计数寄存器计数寄存器1.1.工作方式控制寄存器工作方式控制寄存器TMODTMOD 用于选择定时器用于选择定时器/ /计数器的工作模式和工作方式,计数器的工作模式和工作方式,字字节地址节地址为为89H89H,不能位寻址,格式如,不能位寻址,格式如图图6-26-2所示。所示。 图图6-26-2 TMODTMOD格式格式 8 8位分为两组,位分为两组,高高4 4位位控制控制T1

8、T1,低低4 4位位控制控制T0T0。9 TMOD TMOD各位的功能。各位的功能。(1 1)GATEGATE门控位门控位。 0 0:仅由运行控制位仅由运行控制位TRTRx x(x x = = 0,10,1)来控制定时器)来控制定时器/ /计数计数器运行。器运行。 1 1:用外中断引脚(用外中断引脚( 或或 )上的电平与运行控制位)上的电平与运行控制位TRTRx x共同来控制定时器共同来控制定时器/ /计数器运行。计数器运行。(2 2)M1M1、M0M0工作方式选择位工作方式选择位M1M1、M0M0共有共有4 4种编码种编码,对应于,对应于4 4种工作方式种工作方式的选择,如的选择,如表表6-

9、16-1所示。所示。(3 3)C/ C/ 计数器模式和定时器模式选择位计数器模式和定时器模式选择位 0 0:为定时器工作模式,对单片机的晶体振荡器为定时器工作模式,对单片机的晶体振荡器1212分分频后的脉冲进行计数。频后的脉冲进行计数。 1 1:为计数器工作模式,计数器对外部输入引脚为计数器工作模式,计数器对外部输入引脚T0T0(P3.4P3.4)或)或T1T1(P3.5P3.5)的外部脉冲(负跳变)计数。)的外部脉冲(负跳变)计数。 2 . 2 .定时器定时器/ /计数器控制寄存器计数器控制寄存器TCONTCON 字节地址为字节地址为88H88H,可位寻址,位地址为,可位寻址,位地址为88H

10、88H8FH8FH。格。格式如式如图图6-36-3所示。所示。图图6-3 TCON格式格式T11在第在第8 8章已介绍与外部中断有关的低章已介绍与外部中断有关的低4 4位。这里仅介绍与定位。这里仅介绍与定时器时器/ /计数器相关的高计数器相关的高4 4位功能。位功能。(1 1)TF1TF1、TF0TF0计数溢出标志位。计数溢出标志位。当计数器计数溢出时,该位置当计数器计数溢出时,该位置“1 1”。使用查询方式时,此。使用查询方式时,此位作为状态位供位作为状态位供CPUCPU查询,但应注意查询有效后,应使用软件查询,但应注意查询有效后,应使用软件及时将该位清及时将该位清“0 0”。使用中断方式时

11、,此位作为中断请求标。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清志位,进入中断服务程序后由硬件自动清“0 0”。(2 2)TR1TR1、TR0TR0计数运行控制位。计数运行控制位。TR1TR1位(或位(或TR0TR0位)位)= = 1 1,启动定时器,启动定时器/ /计数器工作的必要条件。计数器工作的必要条件。TR1TR1位(或位(或TR0TR0位)位) = = 0 0,停止定时器,停止定时器/ /计数器工作。该位可计数器工作。该位可由软件置由软件置“1 1”或清或清“0 0”。.126.2.2 6.2.2 定时定时/ /计数器的初始化与启动计数器的初始化与启动初始

12、化的步骤:初始化的步骤:n确定功能工作方式确定功能工作方式- -对对TMODTMOD赋值赋值n预置定时或计数的初值预置定时或计数的初值- -可直接将初值写入可直接将初值写入TH0TH0、TL0TL0或或TH1TH1、TL1.TL1.n根据需要开放定时根据需要开放定时/ /计数器的中断计数器的中断- -直接对直接对IEIE寄存器的定时寄存器的定时器中断位赋值。器中断位赋值。6.2.3 6.2.3 定时定时/ /计数器初值的确定方法计数器初值的确定方法假设最大技术值为假设最大技术值为M M,各种方式的,各种方式的M M为:为:方式方式0 0:M=2M=21313=8192=8192方式方式1 1:

13、M=2M=21616=65536=65536方式方式2 2:M=2M=28 8=256=256方式方式3 3:定时器:定时器T0T0分成分成2 2个个8 8位计数器,位计数器,2 2个个M=2M=28 8=256=256.13 初值初值X X为:为: X = M - X = M - 计数值计数值 例:若例:若AT89S51AT89S51时钟频率为时钟频率为6MHz6MHz,要求产生,要求产生1ms1ms的定时的定时,试计算初值。,试计算初值。 解:时钟频率为解:时钟频率为6MHz6MHz,则一个机器周期为,则一个机器周期为2 2s s 计数值计数值=1ms/ 2=1ms/ 2s=500s=50

14、0 假设采用方式假设采用方式1 1,初值,初值X=65536-500=65036=FE0CHX=65536-500=65036=FE0CH146.3 6.3 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式4 4种工作方式分别介绍如下。种工作方式分别介绍如下。6.3.1 6.3.1 方式方式0 0M1M1、M0=00M0=00时,被设置为工作方式时,被设置为工作方式0 0,等效逻辑结构框图如,等效逻辑结构框图如图图6-46-4所示(以定时器所示(以定时器/ /计数器计数器T1T1为例,为例,TMOD.5=0TMOD.5=0,TMOD.4TMOD.4 = = 0000)。)。15图图

15、6-46-4 定时器定时器/ /计数器方式计数器方式0 0逻辑结构框图逻辑结构框图1313位位计数器,由计数器,由TLTLx x(x x = = 0,10,1)低低5 5位位和和THTHx x高高8 8位位构成。构成。TLTLx x低低5 5位溢出则向位溢出则向THTHx x进位,进位,THTHx x计数溢出则把计数溢出则把TCONTCON中的溢中的溢出标志位出标志位TFTFx x置置“1 1”。.166.3.2 6.3.2 方式方式1 1 当当M1M1、M0=01M0=01时,定时器时,定时器/ /计数器工作于计数器工作于方式方式1 1,这时定,这时定时器时器/ /计数器的等效电路逻辑结构如

16、计数器的等效电路逻辑结构如图图6-56-5所示。所示。 方式方式1 1和方式和方式0 0的差别的差别仅仅在于仅仅在于计数器的位数计数器的位数不同,方不同,方式式1 1为为1616位计数器位计数器,由,由THTHx x高高8 8位和位和TLTLx x低低8 8位构成(位构成(x x = = 0,10,1),),方式方式0 0则为则为1313位计数器,有关控制状态位的含义(位计数器,有关控制状态位的含义(GATEGATE、C/ C/ 、TFTFx x、TRTRx x)与方式)与方式0 0相同相同。T17 图图6-5 定时器/计数器方式1逻辑结构框图图图6-56-5的的C/ C/ 位位控制的电子开关

17、决定了定时器控制的电子开关决定了定时器/ /计数器计数器的两种工作模式。的两种工作模式。(1 1)C/ =0C/ =0,电子开关打在上面位置,电子开关打在上面位置,T1T1(或(或T0T0)为定时器工作模式,把时钟振荡器为定时器工作模式,把时钟振荡器1212分频后的脉冲作为计分频后的脉冲作为计数信号。数信号。(2 2)C/ =1C/ =1,电子开关打在下面位置,电子开关打在下面位置,T1T1(或(或T0T0)为计数器工作模式,计数脉冲为为计数器工作模式,计数脉冲为P3.4P3.4(或(或P3.5P3.5)引脚上的)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加外部输入脉冲,当引脚上发生负

18、跳变时,计数器加1 1。GATEGATE位状态位状态决定定时器决定定时器/ /计数器的运行控制取决计数器的运行控制取决TRTRx x一个一个条件条件还是还是TRTRx x和和 x x(x x = = 0,10,1)引脚状态)引脚状态两个条件两个条件。18TTTINT.19(1 1) GATEGATE = = 0 0,A A点(见图点(见图6-56-5)电位恒为)电位恒为1 1,B B点电位点电位仅取仅取决于决于TRTRx x状态状态。TRTRx x = = 1 1,B B点为高电平,控制端控制电子开点为高电平,控制端控制电子开关闭合,允许关闭合,允许T1T1(或(或T0T0)对脉冲计数。)对脉

19、冲计数。TRTRx x = = 0 0,B B点为低点为低电平,电子开关断开,禁止电平,电子开关断开,禁止T1T1(或(或T0T0)计数。)计数。(2 2) GATEGATE = = 1 1,B B点电位由点电位由 (x x = = 0,10,1)的输入电平)的输入电平和和TRTRx x的状态这两个条件来确定。当的状态这两个条件来确定。当TRTRx x = = 1 1,且,且 =1=1时,时,B B点才为点才为1 1,控制端控制电子开关闭合,允许,控制端控制电子开关闭合,允许T1T1(或(或T0T0)计数。故这种情况下计数器是否计数是由)计数。故这种情况下计数器是否计数是由TRTRx x和和

20、两个条件两个条件来共同控制的。来共同控制的。INTxxINT.206.3.3 6.3.3 方式方式2 2 方式方式0 0和方式和方式1 1的最大特点是计数溢出后,计数器为的最大特点是计数溢出后,计数器为全全0 0。因此在循环定时或循环计数应用时就。因此在循环定时或循环计数应用时就存在用指令反存在用指令反复装入计数初值的复装入计数初值的问题问题。这不仅影响定时精度,也给程序这不仅影响定时精度,也给程序设计带来麻烦。方式设计带来麻烦。方式2 2就是针对此问题而设置的。就是针对此问题而设置的。 当当M1M1、M0M0为为1010时,定时器时,定时器/ /计数器处于工作方式计数器处于工作方式2 2,这

21、时定时器这时定时器/ /计数器的等效逻辑结构如计数器的等效逻辑结构如图图6-66-6所示(以定时所示(以定时器器T1T1为例,为例,x x= = 1 1)。)。.21 定时器定时器/ /计数器的计数器的方式方式2 2为自动恢复初值为自动恢复初值(初值自动装(初值自动装入)的入)的8 8位位定时器定时器/ /计数器计数器。 TL TLx x(x x = = 0,10,1)作为常数缓冲器,当)作为常数缓冲器,当TLTLx x计数溢出时,计数溢出时,在溢出标志在溢出标志TFTFx x置置“1 1”的同时,还的同时,还自动将自动将THTHx x中的初值送中的初值送至至TLTLx x,使,使TLTLx

22、x从初值开始重新计数。定时器从初值开始重新计数。定时器/ /计数器的方计数器的方式式2 2工作过程如图工作过程如图6-76-7所示。所示。22图6-6 定时器/计数器方式2逻辑结构框图23 图图6-7 6-7 方式方式2 2工作过程工作过程该方式可省去用户软件中重装初值的指令执行时间,简该方式可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可以化定时初值的计算方法,可以相当精确地确定相当精确地确定定时时间定时时间。246.3.4 6.3.4 方式方式3 3方式方式3 3只适用于只适用于T0T0,T1T1不能工作在方式不能工作在方式3 3,是为是为增加一个增加一个8 8位定时器位

23、定时器/ /计数器计数器而设。而设。T1T1处于方式处于方式3 3时相当于时相当于TR1=TR1= 0 0,停止计数(此时停止计数(此时T1T1可用来作为串行口波特率产生器)。可用来作为串行口波特率产生器)。1 1工作方式工作方式3 3下的下的T0T0TMODTMOD的低的低2 2位为位为1111时,时,T0T0的工作方式被选为方式的工作方式被选为方式3 3,各引,各引脚与脚与T0T0的逻辑关系如的逻辑关系如图图6-86-8所示。所示。定时器定时器/ /计数器计数器T0T0分为两个独立的分为两个独立的8 8位计数器位计数器TL0TL0和和TH0TH0,TL0TL0使用使用T0T0的状态控制位的

24、状态控制位C/ C/ 、GATEGATE、TR0TR0、T.25 TF0 TF0 ,而,而TH0TH0被被固定为一个固定为一个8 8位内部定时器位内部定时器(不能作为外(不能作为外部计数模式),并使用定时器部计数模式),并使用定时器T1T1的状态控制位的状态控制位TR1TR1和和TF1TF1,同时占用定时器同时占用定时器T1T1的中断请求源的中断请求源TF1TF1。2 2T0T0工作在方式工作在方式3 3时时T1T1的各种工作方式的各种工作方式 一般情况下,一般情况下,当当T1T1用作串行口的波特率发生器时,用作串行口的波特率发生器时,T0T0才工作在方式才工作在方式3 3。T0T0处于工作方

25、式处于工作方式3 3时,时,T1T1可定为方式可定为方式0 0、方式方式1 1和方式和方式2 2,用来作为串行口的波特率发生器,或不需,用来作为串行口的波特率发生器,或不需要中断的场合。要中断的场合。26 图图6-8 6-8 定时器定时器/ /计数器计数器T0T0方式方式3 3的逻辑结构框图的逻辑结构框图27(1 1)T1T1工作在方式工作在方式0 0T1T1的控制字中的控制字中M1M1、M0M0 = = 0000时,时,T1T1工作在方式工作在方式0 0,工作示,工作示意图如意图如图图6-96-9所示。所示。 图图6-9 6-9 T0T0工作在方式工作在方式3 3时时T1T1为方式为方式0

26、0的工作示意图的工作示意图28(2 2)T1T1工作在方式工作在方式1 1当当T1T1的控制字中的控制字中M1M1、M0M0 = = 0101时,时,T1T1工作在方式工作在方式1 1,工作,工作示意图如图示意图如图6-106-10所示。所示。 图图6-106-10 T0 T0工作在方式工作在方式3 3时时T1T1为方式为方式1 1的工作示意图的工作示意图29(3 3)T1T1工作在方式工作在方式2 2当当T1T1的控制字中的控制字中M1M1、M0M0 = = 1010时,时,T1T1的工作方式为方式的工作方式为方式2 2,工作示意图如图工作示意图如图6-116-11所示。所示。 图图6-11

27、 6-11 T0T0工作在方式工作在方式3 3时时T1T1为方式为方式2 2的工作示意图的工作示意图.30(4 4)T1T1设置在方式设置在方式3 3当当T0T0设置在方式设置在方式3 3,再把,再把T1T1也设成方式也设成方式3 3,此时,此时T1T1停止计数停止计数。注意:对外部输入的计数信号的要求注意:对外部输入的计数信号的要求 当定时器当定时器/ /计数器工作在计数器模式时,计数脉冲来自外计数器工作在计数器模式时,计数脉冲来自外部输入引脚部输入引脚T0T0或或T1T1。当输入信号产生负跳变时,计数器的值。当输入信号产生负跳变时,计数器的值增增1 1。 每个机器周期每个机器周期的的S5P

28、2S5P2期间,都期间,都对外部输入引脚对外部输入引脚T0T0或或T1T1进进行采样。如在第一个机器周期中采得的值为行采样。如在第一个机器周期中采得的值为1 1,而在下一个,而在下一个机器周期中采得的值为机器周期中采得的值为0 0,则在紧跟着的再下一个机器周期,则在紧跟着的再下一个机器周期.31 S3P1S3P1期间,计数器加期间,计数器加1 1。由于。由于确认一次确认一次负跳变负跳变要花要花2 2个个机机器周期器周期,因此,因此外部输入的计数脉冲的外部输入的计数脉冲的最高频率最高频率为系统振荡为系统振荡器频率的器频率的1/241/24。 例如,选用例如,选用6MHz6MHz频率的晶振,允许输

29、入的脉冲频率最频率的晶振,允许输入的脉冲频率最高为高为250kHz250kHz。如果选用。如果选用12MHz12MHz频率的晶体,则可输入最高频率的晶体,则可输入最高频率为频率为500kHz500kHz的外部脉冲。的外部脉冲。 对于外部输入信号的对于外部输入信号的占空比占空比并没有什么限制并没有什么限制,但为了,但为了确保某一给定电平在变化之前能被采样一次,则这一电平确保某一给定电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期至少要保持一个机器周期。32故对外部输入信号的要求如故对外部输入信号的要求如图图6-126-12所示,图中,所示,图中,T Tcycy为为机器周期。机器周期。

30、图6-12 对外部计数输入信号的要求336.4 6.4 定时器定时器T0T0、T1T1应用举例应用举例4 4种方式,方式种方式,方式0 0与方式与方式1 1基本相同,只是计数位数不同。方基本相同,只是计数位数不同。方式式0 0初值计算复杂,初值计算复杂,一般不用方式一般不用方式0 0,而,而用方式用方式1 1。6.4.1 6.4.1 方式方式1 1的应用的应用【例例6-16-1】假设系统时钟频率采用假设系统时钟频率采用6MHz6MHz,在在P1.0P1.0引脚上输出引脚上输出一个一个周期为周期为2ms2ms的的方波方波,如,如图图6-136-13所示。所示。图图6-13 6-13 P1.0P1

31、.0引脚上输出周期为引脚上输出周期为2ms2ms的方波的方波34基本思想基本思想:方波周期:方波周期T0T0确定,确定,T0T0每隔每隔1ms1ms计数溢出计数溢出1 1次,次,即即T0T0每隔每隔1ms1ms产生一次中断,产生一次中断,CPUCPU响应中断后,在中断服务响应中断后,在中断服务子程序中对子程序中对P1.0P1.0取反取反, ,如如图图6-136-13所示。为此要做如下几步所示。为此要做如下几步工作。工作。 (1 1)计算计数初值)计算计数初值X X机器周期机器周期 = = 2 2 s s = = 2 2 10106 6s s设需要设需要装入装入T0T0的的初值为初值为X X,则

32、有,则有(2(21616X X) ) 2 2 10106 6=1=1 10103 3,2 21616X X=500=500,X X=65036=65036。X X化为十六进制数,即:化为十六进制数,即: 6503665036 = = FE0CHFE0CH 。T0T0的的初值初值为为TH0 =FEHTH0 =FEH,TL0 =TL0 = 0CH0CH。35(2 2)初始化程序设计)初始化程序设计采用定时器采用定时器中断方式中断方式工作。包括定时器初始化和中断系工作。包括定时器初始化和中断系统初始化,主要是对统初始化,主要是对寄存器寄存器IPIP、IEIE、TCONTCON、TMODTMOD的相应

33、位的相应位进行正确的设置,并将计数初值送入定时器中。进行正确的设置,并将计数初值送入定时器中。(3 3)程序设计)程序设计中断服务子程序除了完成所要求的中断服务子程序除了完成所要求的产生方波产生方波的工作之外,的工作之外,还要注意将计数还要注意将计数初值重新装入定时器初值重新装入定时器,为下一次产生中断,为下一次产生中断做准备。做准备。本例,本例,主程序主程序用一条转至自身的短跳转指令来代替。用一条转至自身的短跳转指令来代替。36参考程序如下:参考程序如下: ORGORG0000H0000H;程序入口;程序入口RESETRESET:AJMP MAIN AJMP MAIN ;转主程序;转主程序

34、ORG ORG 000BH 000BH ;T0T0中断入口中断入口 AJMP IT0PAJMP IT0P;转;转T0T0中断处理程序中断处理程序IT0PIT0P ORG 0100HORG 0100H;主程序入口;主程序入口MAINMAIN: MOV SPMOV SP,#60H#60H;设堆栈指针;设堆栈指针 MOV TMODMOV TMOD,#01H#01H;设置;设置T0T0为方式为方式1 1定时定时 ACALL PT0M0ACALL PT0M0;调用初始化子程序;调用初始化子程序PT0M0PT0M0HEREHERE: AJMP HEREAJMP HERE ;原地循环,等待中断;原地循环,等

35、待中断37PT0M0PT0M0:MOV TL0MOV TL0,#0CH #0CH ;T0T0初始化,装初值的低初始化,装初值的低8 8位位 MOV TH0 MOV TH0,#0FEH #0FEH ;装初值的高;装初值的高8 8位位 SETB ET0 SETB ET0;允许;允许T0T0中断中断 SETB EA SETB EA ;总中断允许;总中断允许 SETB TR0 SETB TR0;启动;启动T0T0 RET RETIT0PIT0P: MOV TL0MOV TL0,#0CH#0CH;中断子程序,;中断子程序,T0T0重装初值重装初值 MOV TH0 MOV TH0,#0FEH#0FEH C

36、PL P1.0 CPL P1.0 ;P1.0P1.0的状态取反的状态取反 RETI RETI程序说明:程序说明:当单片机复位时,从程序入口当单片机复位时,从程序入口0000H0000H跳向主跳向主程序程序MAINMAIN处执行。其中调用了处执行。其中调用了T0T0初始化子程序初始化子程序PT0M0PT0M0。38子程序返回后,子程序返回后,程序执行程序执行“AJMP HEREAJMP HERE”指令,则循环指令,则循环等待。等待。当当响应响应T0T0定时中断定时中断时,则跳向时,则跳向T0T0中断入口,再从中断入口,再从T0T0中断中断入口跳向入口跳向IT0PIT0P标号处执行标号处执行T0T

37、0中断服务子程序。中断服务子程序。当当执行完中断返回的指令执行完中断返回的指令“RETIRETI”后,又返回断点处继后,又返回断点处继续执行循环指令续执行循环指令“AJMP HEREAJMP HERE”。在实际的程序中,。在实际的程序中,“AJMP HEREAJMP HERE” 实际上是一段主程序。当下一次定时器实际上是一段主程序。当下一次定时器T0T0的的1ms1ms定时中断发生时,再跳向定时中断发生时,再跳向T0T0中断入口,从而重复中断入口,从而重复执行上述过程。执行上述过程。如如CPUCPU不做其他工作,不做其他工作,也可用查询方式也可用查询方式进行控制,程序进行控制,程序要简单得多。

38、要简单得多。39查询方式参考程序:查询方式参考程序: MOVMOVTMODTMOD,#01H#01H;设置;设置T0T0为方式为方式1 1LOOPLOOP:MOVMOVTH0TH0,#0FEH #0FEH ;T0T0置初值置初值 MOVMOVTL0TL0,# 0CH# 0CH SETBSETBTR0 TR0 ;接通;接通T0T0LOOP1LOOP1:JNB JNB TF0TF0,LOOP1 LOOP1 ;查;查TF0TF0,TF0TF0 =0=0, T0T0未溢出;未溢出; ;TF0TF0 =1=1, T0T0溢出,溢出, CLRCLRTR0 TR0 ;T0T0溢出,溢出, 关断关断T0T0

39、CPLCPLP1.0 P1.0 ;P1.0P1.0的状态求反的状态求反 SJMPSJMPLOOPLOOP查询查询程序虽简单程序虽简单,但,但CPUCPU必须要不断查询必须要不断查询TF0TF0标志,工作标志,工作效效率低率低。40【例例6-26-2】系统时钟为系统时钟为6MHz6MHz,编写定时器,编写定时器T0T0产生产生1s1s定时定时的程序。的程序。基本思想:基本思想:采用定时器模式。因采用定时器模式。因定时时间较长定时时间较长,首先确,首先确定定采用哪一种工作方式采用哪一种工作方式。时钟为。时钟为6MHz6MHz的条件下,定时器各的条件下,定时器各种工作方式最长可定时时间:种工作方式最

40、长可定时时间:方式方式0 0最长可定时最长可定时16.384ms16.384ms;方式方式1 1最长可定时最长可定时131.072ms131.072ms;方式方式2 2最长可定时最长可定时512512 s s。由上可见,可由上可见,可选选方式方式1 1,每隔,每隔100ms100ms中断一次中断一次,中断中断1010次次为为1s1s。41(1 1)计算计数初值)计算计数初值X X因为(216 X) 2 106 = 101,所以X = 15536 = 3CB0H。因此TH0TH0 = = 3CH3CH,TL0TL0 = = B0HB0H。(2 2)1010次计数的实现次计数的实现对于中断10次的

41、计数,采用B B寄存器寄存器作为中断次数计数器中断次数计数器。(3 3)程序设计)程序设计参考程序如下: ORGORG0000H0000H;程序运行入口RESET:LJMP MAIN ;跳向主程序入口MAIN ORGORG000BH000BH ;T0的中断入口 LJMPIT0P;转T0中断处理子程序IT0P ORGORG1000H1000H;主程序入口42MAINMAIN:MOVMOVSPSP,#60H#60H;设堆栈指针;设堆栈指针 MOVMOVB B,#0AH#0AH;设循环次数;设循环次数1010次次 MOVMOVTMODTMOD,#01H#01H;设置;设置T0T0工作在方式工作在方式

42、1 1定时定时 MOV MOV TL0TL0,#0B0H#0B0H;给;给T0T0设初值设初值 MOV MOV TH0TH0,#3CH #3CH SETBSETBET0ET0;允许;允许T0T0中断中断 SETBSETBEA EA ;总中断允许;总中断允许 SETBSETBTR0TR0;启动;启动T0T0HEREHERE: SJMPSJMPHEREHERE;原地循环,等待中断;原地循环,等待中断43IT0PIT0P: MOVMOVTL0TL0,#0B0H #0B0H ;T0T0中断子程序,中断子程序,T0T0重装初值重装初值 MOVMOVTH0TH0,#3CH#3CH DJNZDJNZB B,

43、RTURNRTURN;B B中断次数计数,减中断次数计数,减1 1非非0 0则则;中断返回;中断返回 CLRCLRTR0 TR0 ;1s1s定时时间到,停止定时时间到,停止T0T0工作工作SETBSETBF0F0;1s1s定时时间到标志定时时间到标志F0F0置置1 1RTURNRTURN:RETIRETI程序说明:程序说明:不论不论1s1s定时时间是否已到,都返回到定时时间是否已到,都返回到“SJMP SJMP HEREHERE”指令处。指令处。“SJMP HERESJMP HERE”指令实际是一段主程序。指令实际是一段主程序。在这段主程序中在这段主程序中再通过对再通过对F0F0标志标志的的判

44、定判定,可知,可知1s1s定时是否定时是否到,再进行具体处理。到,再进行具体处理。446.4.2 6.4.2 方式方式2 2的应用的应用方式方式2 2是一个可以是一个可以自动重新装载初值自动重新装载初值的的8 8位计数器位计数器/ /定时定时器。可器。可省去省去重装初值指令。重装初值指令。当某个定时器当某个定时器/ /计数器不使用时,可计数器不使用时,可扩展一个扩展一个负跳沿触负跳沿触发发的的外中断源外中断源。【例例6-36-3】扩展一个扩展一个负跳沿触发的外部中断源负跳沿触发的外部中断源,把定时,把定时器器/ /计数器计数器T0T0脚脚作为作为外部中断请求输入端外部中断请求输入端,溢出标志,

45、溢出标志TF0TF0作作为外中断请求标志。为外中断请求标志。基本思想:基本思想:设为方式设为方式2 2(自动装入常数方式)计数模式,(自动装入常数方式)计数模式,TH0TH0、TL0TL0初值初值均为均为0FFH0FFH。当。当T0T0脚发生负跳变时,脚发生负跳变时,T0T0计数溢计数溢出,出,TF0TF0置置“1 1”,单片机发出中断请求。,单片机发出中断请求。45初始化程序:初始化程序: ORGORG0000H0000H AJMPAJMPIINIIINI;跳到初始化程序;跳到初始化程序 ORGORG000BH000BH AJMPAJMPIT0PIT0P;跳到外中断处理程序;跳到外中断处理程

46、序IINIIINI:MOV MOV TMODTMOD,#06H#06H;设置;设置T0T0为方式为方式2 2 MOV TL0MOV TL0,#0FFH#0FFH;设;设T0T0初值初值 MOV TH0MOV TH0,#0FFH#0FFH SETB ET0SETB ET0;允许;允许T0T0中断中断 SETB EASETB EA;总中断允许;总中断允许 SETBSETBTR0TR0;启动;启动T0T0 IT0PIT0P: 外中断处理程序段外中断处理程序段 46程序说明:程序说明:当连接在当连接在P3.4P3.4(T0T0脚)的外部中断请求输入脚)的外部中断请求输入脚电平发生负跳变时,脚电平发生负

47、跳变时,TL0TL0加加1 1,产生溢出,产生溢出,TF0TF0置置“1 1”,向单片机发出中断请求,同时向单片机发出中断请求,同时TH0TH0的内容的内容0FFH0FFH送送TL0TL0,即,即TL0TL0恢复初值恢复初值0FFH0FFH。P3.4P3.4脚相当于一个脚相当于一个负跳沿负跳沿触发的触发的外中断请求源外中断请求源输入输入。对。对P3.5P3.5也可做类似的处理。也可做类似的处理。【例例6-46-4】 当当T0T0(P3.4P3.4)引脚上发生负跳变时,作为)引脚上发生负跳变时,作为P1.0P1.0引脚产生方波的启动信号。开始从引脚产生方波的启动信号。开始从P1.0P1.0脚脚上

48、输出一个上输出一个周期为周期为1ms1ms的的方波方波,如,如图图6-146-14所示(系统时钟所示(系统时钟6MHz6MHz)。)。47基本思想:基本思想:T0T0设为设为方式方式1 1计数计数,初值初值为为FFFFHFFFFH。当外部计。当外部计数输入端数输入端T0T0(P3.4P3.4)发生一次负跳变发生一次负跳变时,时,T0T0加加1 1且且溢出溢出,溢出标志溢出标志TF0TF0置置“1 1”,向,向CPUCPU发出中断请求,此时发出中断请求,此时T0T0相当相当于一个负跳沿触发的外部中断源。于一个负跳沿触发的外部中断源。进入进入T0T0中断程序后,中断程序后,F0F0标志置标志置“1

49、 1”,说明,说明T0T0引脚上已引脚上已接收过负跳变信号。接收过负跳变信号。T1T1定义为定义为方式方式2 2定时定时。在。在T0T0引脚产生引脚产生一次负跳变后,启动一次负跳变后,启动T1T1每每500500 s s产生一次中断产生一次中断,在,在中断服中断服务子程序务子程序中对中对P1.0P1.0求反求反,使,使P1.0P1.0产生产生周期周期1ms1ms的方波。由的方波。由于省去重新装初值指令,所以可产生于省去重新装初值指令,所以可产生精确精确的定时时间。的定时时间。48 图图6-14 6-14 负跳变触发输出一个周期为负跳变触发输出一个周期为1ms1ms的方波的方波49(2 2)计算

50、)计算T1T1的初值的初值设设T1T1的初值为的初值为x x,则,则(2(28 8 x x) ) 2 2 10106 6 = = 5 5 10104 4x x = = 2 28 8 250250 = = 6 6 = = 06H06H(3 3)程序设计)程序设计参考程序参考程序: ORG 0000HORG 0000H;程序入口;程序入口RESETRESET:LJMP MAIN LJMP MAIN ;跳向主程序;跳向主程序MAINMAIN ORG ORG 000BH000BH;T0T0的中断入口的中断入口 LJMP IT0P LJMP IT0P ;转;转T0T0中断服务程序中断服务程序 ORG 0

51、01BHORG 001BH;T1T1的中断入口的中断入口 50LJMP IT1P LJMP IT1P ;转;转T1T1中断服务程序中断服务程序 ORG 0100HORG 0100H;主程序入口;主程序入口MAINMAIN: MOV SPMOV SP,#60H #60H ;设堆栈指针;设堆栈指针 ACALL PT0M2ACALL PT0M2;调用对;调用对T0T0,T1T1初始化子程序初始化子程序LOOPLOOP: MOV CMOV C,F0 F0 ;T0T0是否产生过中断,若产生是否产生过中断,若产生;过,;过,F0F0置置1 1 JNC JNC LOOPLOOP;T0T0未产生中断,未产生中

52、断,C=0C=0,则跳,则跳;到;到LOOPLOOP,等待,等待T0T0中断中断 SETB ET1 SETB ET1 ;允许;允许T1T1产生定时中断产生定时中断SETB TR1 SETB TR1 ;启动;启动T1T1HEREHERE:AJMP HEREAJMP HERE51PT0M2PT0M2: MOV TMODMOV TMOD,#26H #26H ;对;对T0T0,T1T1初始化,初始化,T0T0方式方式1 1;计数,;计数,T1T1方式方式2 2定时定时 MOV TL0MOV TL0,#0FFH #0FFH ;T0T0置初值置初值 MOV TH0MOV TH0,#0FFH#0FFH SE

53、TB ET0SETB ET0;允许;允许T0T0中断中断 MOV TL1MOV TL1,#06H#06H;T1T1置初值置初值 MOV TH1MOV TH1,#06H#06H CLR CLR F0F0;把;把T0T0已发生中断标志已发生中断标志F0F0清清0 0 SETB EASETB EA;总中断允许;总中断允许 SETB TR0SETB TR0;启动;启动T0T0 RETRET52IT0PIT0P: CLRCLRTR0 TR0 ;T0T0中断服务程序中断服务程序,停止,停止T0T0计数计数 SETB SETBF0 F0 ;把;把T0T0引脚接收过负脉冲标志引脚接收过负脉冲标志F0F0置置1

54、 1, ;即接收过负跳变;即接收过负跳变 RETI RETIIT1PIT1P: CPL CPL P1.0P1.0 ;T1T1中断服务程序中断服务程序,P1.0P1.0位取反位取反 RETIRETI程序说明:程序说明:当单片机复位时,从当单片机复位时,从0000H0000H跳向主程序跳向主程序MAINMAIN处执行程序。其中调用了对处执行程序。其中调用了对T0T0,T1T1初始化子程序初始化子程序PT0M2PT0M2。子程序返回后执行标号子程序返回后执行标号LOOPLOOP处指令,循环等待处指令,循环等待T0T0引脚上负引脚上负脉冲的到来。由于负脉冲到来的标志位脉冲的到来。由于负脉冲到来的标志位

55、F0F0的复位初始值为的复位初始值为0 0,所以程序就在标号,所以程序就在标号LOOPLOOP处循环等待。处循环等待。53当当T0T0(P3.4P3.4)脚)脚发生负跳变发生负跳变时,由于时,由于T0T0计数溢出,则跳计数溢出,则跳向向T0T0中断服务子程序。此时停止中断服务子程序。此时停止T0T0计数,并把计数,并把T0T0引脚接收引脚接收过负脉冲的标志过负脉冲的标志F0F0置置1 1。当当中断返回中断返回时,由于时,由于F0F0已被置已被置1 1,则程序跳出,则程序跳出LOOPLOOP处的处的循环等待。此时执行指令来允许循环等待。此时执行指令来允许T1T1中断,并启动中断,并启动T1T1定

56、时,定时,然后执行然后执行“AJMP HEREAJMP HERE”指令,循环等待,指令,循环等待,等待等待T1T1的的500500 s s定时中断定时中断到来。到来。当当T1T1的的500500 s s定时中断产生时,定时中断产生时,则进入则进入T1T1的中断服务子的中断服务子程序程序IT1PIT1P,把,把P1.0P1.0脚电平取反。由于是自动装初值,省去脚电平取反。由于是自动装初值,省去对对T1T1重装初值指令。中断返回后,到重装初值指令。中断返回后,到“AJMP HEREAJMP HERE” 处处等待等待T1T1的的500500 s s定时中断。如此重复,即得到图定时中断。如此重复,即得

57、到图6-146-14波形。波形。54【例例6-56-5】 利用定时器利用定时器T1T1的的方式方式2 2计数计数,每,每计满计满100100个个数,数,将将P1.0P1.0取反。本例是取反。本例是方式方式2 2计数模式计数模式的应用举例。的应用举例。(1 1)选择工作方式)选择工作方式外部信号由外部信号由T1T1(P3.5P3.5)引脚输入,每发生一次负跳变计)引脚输入,每发生一次负跳变计数器便加数器便加1 1,每输入,每输入100100个脉冲,计数器将产生溢出中断,个脉冲,计数器将产生溢出中断,在中断服务程序中将在中断服务程序中将P1.0P1.0取反一次。取反一次。T1T1工作在工作在方式方

58、式2 2的控制字的控制字TMODTMOD = = 60H60H。不使用。不使用T0T0时,时,TMODTMOD低低4 4位任取,但不能使位任取,但不能使T0T0为方式为方式3 3,这里取全,这里取全0 0。(2 2)计算)计算T1T1的初值的初值X X = = 2 28 8 100100 = = 156156 = = 9CH9CHTL1TL1的初值为的初值为9CH9CH,重装初值寄存器,重装初值寄存器TH1TH1 = = 9CH9CH。55(3 3)参考程序:)参考程序: ORGORG0000H0000H;程序运行入口;程序运行入口 LJMP LJMPMAINMAIN;跳向主程序;跳向主程序M

59、AINMAIN ORGORG001BH001BH;T1T1中断服务程序入口中断服务程序入口 CPL CPLP1.0P1.0;P1.0P1.0位取反位取反 RETI RETI ORG ORG0100H0100H;主程序入口;主程序入口MAINMAIN: MOV MOV TMODTMOD,#60H#60H;设置;设置T1T1为方式为方式2 2计数计数 MOVMOVTL0TL0,#9CH #9CH ;T0T0置初值置初值 MOVMOVTH0TH0,#9CH #9CH SETBSETBTR1TR1 ;启动;启动T1T1HEREHERE:AJMPAJMPHEREHEREEND END 56程序说明:由于

60、程序说明:由于T1T1的中断服务子程序只有两条指令,不的中断服务子程序只有两条指令,不超过超过8 8个字节,所以进入个字节,所以进入T1T1中断服务程序入口后,没有选中断服务程序入口后,没有选择再跳转。择再跳转。6.4.3 6.4.3 方式方式3 3的应用的应用方式方式3 3下的下的T0T0和和T1T1大不相同大不相同。T0T0工作在方式工作在方式3 3,TL0TL0和和TH0TH0被分成两个独立的被分成两个独立的8 8位定时器位定时器/ /计数器。其中,计数器。其中,TL0TL0可作为可作为8 8位的定时器位的定时器/ /计数器,而计数器,而TH0TH0只能作为只能作为8 8位的定时器。此时

温馨提示

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

评论

0/150

提交评论