单片机的定时器计数器(1)ppt课件_第1页
单片机的定时器计数器(1)ppt课件_第2页
单片机的定时器计数器(1)ppt课件_第3页
单片机的定时器计数器(1)ppt课件_第4页
单片机的定时器计数器(1)ppt课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6 6章章 AT89S51AT89S51单片机的单片机的定时器定时器/ /计数器计数器成都理工大学工程技术学院成都理工大学工程技术学院自动化工程系自动化工程系第第6章章 目录目录6.1 定时器定时器/计数器的构造计数器的构造 6.1.1 任务方式控制存放器任务方式控制存放器TMOD 6.1.2 定时器定时器/计数器控制存放器计数器控制存放器TCON6.2 定时器定时器/计数器的计数器的4种任务方式种任务方式 6.2.1 方式方式0 6.2.2 方式方式1 6.2.3 方式方式2 6.2.4 方式方式36.3 对外部输入的计数信号的要求对外部输入的计数信号的要求6.4 定时器定时器/计数器的

2、编程和运用计数器的编程和运用 6.4.1 方式方式1的运用的运用 6.4.2 方式方式2的运用的运用 6.4.3 方式方式3的运用的运用 6.4.4 门控制位门控制位GATEx的运用的运用丈量脉冲宽丈量脉冲宽度度 6.4.5 实时时钟的设计实时时钟的设计内容概要内容概要工业检测与控制,许多场所都要用到计数或定时功能。工业检测与控制,许多场所都要用到计数或定时功能。例如,对外部脉冲进展计数,产生准确的定时时间等。例如,对外部脉冲进展计数,产生准确的定时时间等。AT89S51片内有两个可编程的定时器片内有两个可编程的定时器/计数器计数器T1、T0,可,可满足需求。满足需求。本章引见定时器本章引见定

3、时器/计数器的构造与功能,计数器的构造与功能,2种任务方式和种任务方式和4种任务方式,以及相关的种任务方式,以及相关的2个特殊功能存放器个特殊功能存放器TMOD和和TCON各位的定义及其编程,最后引见定时器各位的定义及其编程,最后引见定时器/计数器的编计数器的编程及运用实例。程及运用实例。6.1 定时器定时器/计数器的构造计数器的构造定时器定时器/计数器构造如图计数器构造如图6-1所示,定时器所示,定时器/计数器计数器T0由由特殊功能存放器特殊功能存放器TH0、TL0构成,定时器构成,定时器/计数器计数器T1由特殊由特殊功能存放器功能存放器TH1、TL1构成。构成。 图6-1 AT89S51单

4、片机的定时器/计数器构造框图具有定时器和计数器2种任务方式,4种任务方式方式0、方式1、方式2和方式3。属于增计数器。TMOD用于选择定时器/计数器T0、T1的任务方式和任务方式。TCON用于控制T0、T1的启动和停顿计数,同时包含了T0、T1的形状。T0、T1不论是任务在定时器方式还是计数器方式,都是对脉冲信号进展计数,只是计数信号的来源不同。计数器方式是对加在T0P3.4和T1P3.5两个引脚上的外部脉冲进展计数见图6-1。定时器任务方式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲信号计数。由于时钟频率是定值,所以可根据计数值计算出定时时间。计数器的起始计数都是从计数器初值开场的。

5、单片机复位时计数器的初值为0,也可用指令给计数器装入一个新的初值。6.1.1 任务方式控制存放器TMOD用于选择定时器/计数器的任务方式和任务方式,字节地址为89H,不能位寻址,格式如图6-2所示。图6-2 TMOD格式8位分为两组,高4位控制T1,低4位控制T0。TMOD各位的功能。1GATE门控位。 0:仅由运转控制位TRxx = 0,1来控制定时器/计数器运转。 1:用外中断引脚 或 上的电平与运转控制位TRx共同来控制定时器/计数器运转。2 2M1M1、M0M0任务方式选择位任务方式选择位M1M1、M0M0共有共有4 4种编码,对应于种编码,对应于4 4种任务方式的选择,如表种任务方式

6、的选择,如表6-16-1所示。所示。3 3C/ C/ 计数器方式和定时器方式选择位计数器方式和定时器方式选择位T 0:为定时器任务方式,对单片机的晶体振荡器:为定时器任务方式,对单片机的晶体振荡器12分频分频后的脉冲进展计数。后的脉冲进展计数。1:为计数器任务方式,计数器对外部输入引脚:为计数器任务方式,计数器对外部输入引脚T0P3.4或或T1P3.5的外部脉冲负跳变计数。的外部脉冲负跳变计数。6.1.2 定时器定时器/计数器控制存放器计数器控制存放器TCON 字节地址为字节地址为88H,可位寻址,位地址为,可位寻址,位地址为88H8FH。格式。格式如图如图6-3所示。所示。图图6-3 TCO

7、N格式格式在第5章已引见与外部中断有关的低4位。这里仅引见与定时器/计数器相关的高4位功能。1TF1、TF0计数溢出标志位。当计数器计数溢出时,该位置“1。运用查询方式时,此位作为形状位供CPU查询,但应留意查询有效后,应运用软件及时将该位清“0。运用中断方式时,此位作为中断恳求标志位,进入中断效力程序后由硬件自动清“0。2TR1、TR0计数运转控制位。TR1位或TR0位= 1,启动定时器/计数器任务的必要条件。TR1位或TR0位 = 0,停顿定时器/计数器任务。该位可由软件置“1或清“0。6.2 定时器/计数器的4种任务方式4种任务方式分别引见如下。6.2.1 方式0M1、M0=00时,被设

8、置为任务方式0,等效逻辑构造框图如图6-4所示以定时器/计数器T1为例,TMOD.5、TMOD.4 = 00。图6-4 定时器/计数器方式0逻辑构造框图13位计数器,由TLxx = 0,1低5位和THx高8位构成。TLx低5位溢出那么向THx进位,THx计数溢出那么把TCON中的溢出标志位TFx置“1。图图6-26-2的的C/ C/ 位控制的电子开关决议了定时器位控制的电子开关决议了定时器/ /计数器计数器的两种任务方式。的两种任务方式。1 1C/ =0C/ =0,电子开关打在上面位置,电子开关打在上面位置,T1T1或或T0T0为定时器任务方式,把时钟振荡器为定时器任务方式,把时钟振荡器121

9、2分频后的脉冲作为计分频后的脉冲作为计数信号。数信号。2 2C/ =1C/ =1,电子开关打在下面位置,电子开关打在下面位置,T1T1或或T0T0为计数器任务方式,计数脉冲为为计数器任务方式,计数脉冲为P3.4P3.4或或P3.5P3.5引脚上的引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加外部输入脉冲,当引脚上发生负跳变时,计数器加1 1。GATEGATE位形状决议定时器位形状决议定时器/ /计数器的运转控制取决计数器的运转控制取决TRxTRx一个一个条件还是条件还是TRxTRx和和 x xx x = = 0,10,1引脚形状两个条件。引脚形状两个条件。TTTINT1 1 GATE G

10、ATE = = 0 0,A A点见图点见图6-46-4电位恒为电位恒为1 1,B B点电位仅取决于点电位仅取决于TRxTRx形状。形状。TRxTRx = = 1 1,B B点为高电平,控制端控制电子开封锁合,点为高电平,控制端控制电子开封锁合,允许允许T1T1或或T0T0对脉冲计数。对脉冲计数。TRxTRx = = 0 0,B B点为低电平,电子开点为低电平,电子开关断开,制止关断开,制止T1T1或或T0T0计数。计数。2 2 GATE GATE = = 1 1,B B点电位由点电位由 x x = = 0,10,1的输入电平和的输入电平和TRxTRx的形状这两个条件来确定。当的形状这两个条件来

11、确定。当TRxTRx = = 1 1,且,且 =1 =1时,时,B B点才为点才为1 1,控制端控制电子开封锁合,允许,控制端控制电子开封锁合,允许T1T1或或T0T0计数。计数。故这种情况下计数器能否计数是由故这种情况下计数器能否计数是由TRxTRx和和INTXINTX* * 两个条件来共两个条件来共同控制的。同控制的。INTxxINT6.2.2 方式方式1当当M1、M0=01时,定时器时,定时器/计数器任务于方式计数器任务于方式1,这时定时器,这时定时器/计数器的等效电路逻辑构造如图计数器的等效电路逻辑构造如图6-5所示。所示。方式方式1和方式和方式0的差别仅仅在于计数器的位数不同,方式的

12、差别仅仅在于计数器的位数不同,方式1为为16位计数器,由位计数器,由THx高高8位和位和TLx低低8位构成位构成x= 0,1,方式,方式0那么为那么为13位计数器,有关控制形状位的含义位计数器,有关控制形状位的含义GATE、C/ 、TFx、TRx与方式与方式0一样。一样。T 图图6-5 定时器定时器/计数器方式计数器方式1逻辑构造框图逻辑构造框图6.2.3 方式方式2方式方式0和方式和方式1的最大特点是计数溢出后,计数器为全的最大特点是计数溢出后,计数器为全0。因。因此在循环定时或循环计数运用时就存在用指令反复装入计此在循环定时或循环计数运用时就存在用指令反复装入计数初值的问题。这不仅影响定时

13、精度,也给程序设计带来数初值的问题。这不仅影响定时精度,也给程序设计带来费事。方式费事。方式2就是针对此问题而设置的。就是针对此问题而设置的。当当M1、M0为为10时,定时器时,定时器/计数器处于任务方式计数器处于任务方式2,这时定,这时定时器时器/计数器的等效逻辑构造如图计数器的等效逻辑构造如图6-6所示以定时器所示以定时器T1为为例,例,x= 1。定时器/计数器的方式2为自动恢复初值初值自动装入的8位定时器/计数器。TLxx = 0,1作为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置“1的同时,还自动将THx中的初值送至TLx,使TLx从初值开场重新计数。定时器/计数器的方式2任务过

14、程如图6-7所示。图6-6 定时器/计数器方式2逻辑构造框图 图6-7 方式2任务过程该方式可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可以相当准确地确定定时时间。6.2.4 方式方式3是为添加一个是为添加一个8位定时器位定时器/计数器而设,使计数器而设,使AT89S51单片单片机具有机具有3个定时器个定时器/计数器。计数器。方式方式3只适用于只适用于T0,T1不能任务在方式不能任务在方式3。T1处于方式处于方式3时相当于时相当于TR1= 0,停顿计数此时,停顿计数此时T1可用来作为串行口可用来作为串行口波特率产生器。波特率产生器。1任务方式任务方式3下的下的T0TMOD的

15、低的低2位为位为11时,时,T0的任务方式被选为方式的任务方式被选为方式3,各引脚与各引脚与T0的逻辑关系如图的逻辑关系如图6-8所示。所示。定时器定时器/计数器计数器T0分为两个独立的分为两个独立的8位计数器位计数器TL0和和TH0,TL0运用运用T0的形状控制位的形状控制位C/ 、GATE、TR0、TTF0 ,而TH0被固定为一个8位定时器不能作为外部计数方式,并运用定时器T1的形状控制位TR1和TF1,同时占用定时器T1的中断恳求源TF1。2T0任务在方式3时T1的各种任务方式普通情况下,当T1用作串行口的波特率发生器时,T0才任务在方式3。T0处于任务方式3时,T1可定为方式0、方式1

16、和方式2,用来作为串行口的波特率发生器,或不需求中断的场所。 图图6-8 定时器定时器/计数器计数器T0方式方式3的逻辑构造框图的逻辑构造框图1 1T1T1任务在方式任务在方式0 0T1T1的控制字中的控制字中M1M1、M0M0 = = 0000时,时,T1T1任务在方式任务在方式0 0,任务表,任务表示图如图示图如图6-96-9所示。所示。 图6-9 T0任务在方式3时T1为方式0的任务表示图2 2T1T1任务在方式任务在方式1 1当当T1T1的控制字中的控制字中M1M1、M0M0 = = 0101时,时,T1T1任务在方式任务在方式1 1,任务,任务表示图如图表示图如图6-106-10所示

17、。所示。 图图6-10 T0任务在方式任务在方式3时时T1为方式为方式1的任务表示图的任务表示图3 3T1T1任务在方式任务在方式2 2当当T1T1的控制字中的控制字中M1M1、M0M0 = = 1010时,时,T1T1的任务方式为方式的任务方式为方式2 2,任务表示图如图任务表示图如图6-116-11所示。所示。 图图6-11 T0任务在方式任务在方式3时时T1为方式为方式2的任务表示图的任务表示图4T1设置在方式设置在方式3当当T0设置在方式设置在方式3,再把,再把T1也设成方式也设成方式3,此时,此时T1停顿计数。停顿计数。6.3 对外部输入的计数信号的要求对外部输入的计数信号的要求当定

18、时器当定时器/计数器任务在计数器方式时,计数脉冲来自外部输计数器任务在计数器方式时,计数脉冲来自外部输入引脚入引脚T0或或T1。当输入信号产生负跳变时,计数器的值增当输入信号产生负跳变时,计数器的值增1。每个机器周期的每个机器周期的S5P2期间,都对外部输入引脚期间,都对外部输入引脚T0或或T1进展采进展采样。如在第一个机器周期中采得的值为样。如在第一个机器周期中采得的值为1,而在下一个机器,而在下一个机器周期中采得的值为周期中采得的值为0,那么在紧跟着的再下一个机器周期,那么在紧跟着的再下一个机器周期S3P1期间,计数器加1。由于确认一次负跳变要花2个机器周期,因此外部输入的计数脉冲的最高频

19、率为系统振荡器频率的1/24。 例如,选用6MHz频率的晶体,允许输入的脉冲频率最高为250kHz。假设选用12MHz频率的晶体,那么可输入最高频率为500kHz的外部脉冲。对于外部输入信号的占空比并没有什么限制,但为了确保某一给定电平在变化之前能被采样一次,那么这一电平至少要坚持一个机器周期。故对外部输入信号的要求如图6-12所示,图中,Tcy为机器周期。图6-12 对外部计数输入信号的要求6.4 6.4 定时器定时器/ /计数器的编程和运用计数器的编程和运用4 4种方式,方式种方式,方式0 0与方式与方式1 1根本一样,只是计数位数不同。方根本一样,只是计数位数不同。方式式0 0初值计算复

20、杂,普通不用方式初值计算复杂,普通不用方式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 P1.0引脚上输出周期为引脚上输出周期为2ms的方波的方波根本思想:方波周期根本思想:方波周期T0T0确定,确定,T0T0每隔每隔1ms1ms计数溢出计数溢出1 1次,次,即即T0T0每隔每隔1ms1ms产生一次中断,产生一次中断,CPUCPU呼应中断

21、后,在中断效力呼应中断后,在中断效力子程序中对子程序中对P1.0P1.0取反取反, ,如图如图6-136-13所示。为此要做如下几步所示。为此要做如下几步任务。任务。 1 1计算计数初值计算计数初值X X机器周期机器周期 = 2 = 2s = 2s = 2 10 106s6s设需求装入设需求装入T0T0的初值为的初值为X X,那么有,那么有(216(216X)X)2 210106=16=1 10 103 3,216216X=500X=500,X=65036X=65036。X X化为十六进制数,即:化为十六进制数,即: 65036 = FE0CH 65036 = FE0CH 。T0T0的初值为的

22、初值为TH0 =FEHTH0 =FEH,TL0 = 0CHTL0 = 0CH。2初始化程序设计初始化程序设计采用定时器中断方式任务。包括定时器初始化和中断系采用定时器中断方式任务。包括定时器初始化和中断系统初始化,主要是对存放器统初始化,主要是对存放器IP、IE、TCON、TMOD的相的相应位进展正确的设置,并将计数初值送入定时器中。应位进展正确的设置,并将计数初值送入定时器中。3程序设计程序设计中断效力子程序除了完成所要求的产生方波的任务之外,中断效力子程序除了完成所要求的产生方波的任务之外,还要留意将计数初值重新装入定时器,为下一次产生中断还要留意将计数初值重新装入定时器,为下一次产生中断

23、做预备。做预备。本例,主程序用一条转至本身的短跳转指令来替代。本例,主程序用一条转至本身的短跳转指令来替代。参考程序如下:参考程序如下: ORG 0000H;程序入口;程序入口RESET:AJMP MAIN ;转主程序;转主程序 ORG 000BH ;T0中断入口中断入口 AJMP IT0P;转;转T0中断处置程序中断处置程序IT0P ORG 0100H;主程序入口;主程序入口MAIN: MOV SP,#60H;设堆栈指针;设堆栈指针 MOV TMOD,#01H;设置;设置T0为方式为方式1定时定时 ACALL PT0M0;调用初始化子程序;调用初始化子程序PT0M0HERE: AJMP HE

24、RE ;原地循环,等待中;原地循环,等待中断断PT0M0: MOV TL0,#0CH;T0初始化,装初值的低8位 MOV TH0,#0FEH;装初值的高8位 SETB ET0;允许T0中断 SETB EA ;总中断允许 SETB TR0;启动T0 RETIT0P: MOV TL0,#0CH;中断子程序,T0重装初值 MOV TH0,#0FEH CPL P1.0 ;P1.0的形状取反 RETI程序阐明:当单片机复位时,从程序入口0000H跳向主程序MAIN处执行。其中调用了T0初始化子程序PT0M0。子程序前往后,程序执行“AJMP HERE指令,那么循环等待。当呼应T0定时中断时,那么跳向T0

25、中断入口,再从T0中断入口跳向IT0P标号处执行T0中断效力子程序。当执行完中断前往的指令“RETI后,又前往断点处继续执行循环指令“AJMP HERE。在实践的程序中,“AJMP HERE 实践上是一段主程序。当下一次定时器T0的1ms定时中断发生时,再跳向T0中断入口,从而反复执行上述过程。如CPU不做其他任务,也可用查询方式进展控制,程序要简单得多。查询方式参考程序:查询方式参考程序: MOV TMOD,#01H;设置;设置T0为方式为方式1LOOP:MOV TH0,#0FEH ;T0置初值置初值 MOV TL0,# 0CH SETB TR0 ;接通;接通T0LOOP1:JNB TF0,

26、LOOP1 ;查;查TF0,TF0 =0, T0未未溢出;溢出; ;TF0 =1, T0溢出,溢出, CLRTR0 ;T0溢出,溢出, 关断关断T0 CPLP1.0 ;P1.0的形状求反的形状求反 SJMP LOOP查询程序虽简单,但查询程序虽简单,但CPU必需求不断查询必需求不断查询TF0标志,任务标志,任务效率低。效率低。【例【例6-2】系统时钟为】系统时钟为6MHz,编写定时器,编写定时器T0产生产生1s定定时的程序。时的程序。根本思想:采用定时器方式。因定时时间较长,首先确根本思想:采用定时器方式。因定时时间较长,首先确定采用哪一种任务方式。时钟为定采用哪一种任务方式。时钟为6MHz的

27、条件下,定时器的条件下,定时器各种任务方式最长可定时时间:各种任务方式最长可定时时间:方式方式0最长可定时最长可定时16.384ms;方式方式1最长可定时最长可定时131.072ms;方式方式2最长可定时最长可定时512s。由上可见,可选方式由上可见,可选方式1,每隔,每隔100ms中断一次,中断中断一次,中断10次为次为1s。1 1计算计数初值计算计数初值X X由于由于(216(216 X)X) 2 2 10106 6 = = 10101 1,所以,所以X X = = 1553615536 = = 3CB0H3CB0H。因此因此TH0TH0 = = 3CH3CH,TL0TL0 = = B0H

28、B0H。2 21010次计数的实现次计数的实现对于中断对于中断1010次的计数,采用次的计数,采用B B存放器作为中断次数计数器。存放器作为中断次数计数器。3 3程序设计程序设计参考程序如下:参考程序如下: ORGORG0000H0000H;程序运转入口;程序运转入口RESETRESET:LJMP MAIN LJMP MAIN ;跳向主程序入口;跳向主程序入口MAINMAIN ORGORG000BH 000BH ;T0T0的中断入口的中断入口 LJMPLJMPIT0PIT0P;转;转T0T0中断处置子程序中断处置子程序IT0PIT0P ORGORG1000H1000H;主程序入口;主程序入口M

29、AIN:MOVSP,#60H;设堆栈指针 MOVB,#0AH;设循环次数10次 MOVTMOD,#01H;设置T0任务在方式1定时 MOV TL0,#0B0H;给T0设初值 MOV TH0,#3CH SETBET0;允许T0中断 SETBEA ;总中断允许 SETBTR0;启动T0HERE: SJMPHERE;原地循环,等待中断IT0P: MOVTL0,#0B0H ;T0中断子程序,T0重装初值 MOVTH0,#3CH DJNZB,RTURN;B中断次数计数,减1非0那么;中断前往 CLRTR0 ;1s定时时间到,停顿T0任务SETBF0;1s定时时间到标志F0置1RTURN:RETI程序阐明

30、:不论1s定时时间能否已到,都前往到“SJMP HERE指令处。“SJMP HERE指令实践是一段主程序。在这段主程序中再经过对F0标志的断定,可知1s定时能否到,再进展详细处置。6.4.2 方式方式2的运用的运用方式方式2是一个可以自动重新装载初值的是一个可以自动重新装载初值的8位计数器位计数器/定时定时器。可省去重装初值指令。器。可省去重装初值指令。当某个定时器当某个定时器/计数器不运用时,可扩展一个负跳沿触计数器不运用时,可扩展一个负跳沿触发的外中断源。发的外中断源。【例【例6-3】扩展一个负跳沿触发的外部中断源,把定时】扩展一个负跳沿触发的外部中断源,把定时器器/计数器计数器T0脚作为

31、外部中断恳求输入端,溢出标志脚作为外部中断恳求输入端,溢出标志TF0作为外中断恳求标志。作为外中断恳求标志。根本思想:设为方式根本思想:设为方式2自动装入常数方式计数方式,自动装入常数方式计数方式,TH0、TL0初值均为初值均为0FFH。当。当T0脚发生负跳变时,脚发生负跳变时,T0计计数溢出,数溢出,TF0置置“1,单片机发出中断恳求。,单片机发出中断恳求。初始化程序: ORG0000H AJMPIINI;跳到初始化程序 ORG000BH AJMPIT0P;跳到外中断处置程序IINI: MOV TMOD,#06H;设置T0为方式2 MOV TL0,#0FFH;设T0初值 MOV TH0,#0

32、FFH SETB ET0;允许T0中断 SETB EA;总中断允许 SETBTR0;启动T0 IT0P: 外中断处置程序段 程序阐明:当衔接在程序阐明:当衔接在P3.4P3.4T0T0脚的外部中断恳求输入脚的外部中断恳求输入脚电平发生负跳变时,脚电平发生负跳变时,TL0TL0加加1 1,产生溢出,产生溢出,TF0TF0置置“1“1,向单片机发出中断恳求,同时向单片机发出中断恳求,同时TH0TH0的内容的内容0FFH0FFH送送TL0TL0,即,即TL0TL0恢复初值恢复初值0FFH0FFH。P3.4P3.4脚相当于一个负跳沿触发的外中断恳求源输入。对脚相当于一个负跳沿触发的外中断恳求源输入。对

33、P3.5P3.5也可做类似的处置。也可做类似的处置。【例【例6-46-4】 当当T0T0P3.4P3.4引脚上发生负跳变时,作为引脚上发生负跳变时,作为P1.0P1.0引脚产生方波的启动信号。开场从引脚产生方波的启动信号。开场从P1.0P1.0脚上输出一个脚上输出一个周期为周期为1ms1ms的方波,如图的方波,如图6-146-14所示系统时钟所示系统时钟6MHz6MHz。根本思想:根本思想:T0T0设为方式设为方式1 1计数,初值为计数,初值为FFFFHFFFFH。当外部计。当外部计数输入端数输入端T0T0P3.4P3.4发生一次负跳变时,发生一次负跳变时,T0T0加加1 1且溢出,且溢出,溢

34、出标志溢出标志TF0TF0置置“1“1,向,向CPUCPU发出中断恳求,此时发出中断恳求,此时T0T0相当相当于一个负跳沿触发的外部中断源。于一个负跳沿触发的外部中断源。进入进入T0T0中断程序后,中断程序后,F0F0标志置标志置“1“1,阐明,阐明T0T0引脚上已引脚上已接纳过负跳变信号。接纳过负跳变信号。T1T1定义为方式定义为方式2 2定时。在定时。在T0T0引脚产生引脚产生一次负跳变后,启动一次负跳变后,启动T1T1每每500500s s产生一次中断,在中断效产生一次中断,在中断效力子程序中对力子程序中对P1.0P1.0求反,使求反,使P1.0P1.0产生周期产生周期1ms1ms的方波

35、。由的方波。由于省去重新装初值指令,所以可产生准确的定时时间。于省去重新装初值指令,所以可产生准确的定时时间。 图图6-14 6-14 负跳变触发输出一个周期为负跳变触发输出一个周期为1ms1ms的方波的方波1 1计算计算T1T1的初值的初值设设T1T1的初值为的初值为x x,那么,那么(28(28 x)x) 2 2 10106 6 = = 5 5 10104 4x x = = 2828 250250 = = 6 6 = = 06H06H2 2程序设计程序设计参考程序:参考程序: ORG 0000HORG 0000H;程序入口;程序入口RESETRESET:LJMP MAIN LJMP MAI

36、N ;跳向主程序;跳向主程序MAINMAIN ORG ORG 000BH000BH ;T0T0的中断入口的中断入口 LJMP IT0P LJMP IT0P ;转;转T0T0中断效力程序中断效力程序 ORG 001BHORG 001BH ;T1T1的中断入口的中断入口 LJMP IT1P ;转T1中断效力程序 ORG 0100H;主程序入口MAIN: MOV SP,#60H;设堆栈指针 ACALL PT0M2;调用对T0,T1初始化子程序LOOP: MOV C,F0 ;T0能否产生过中断,假设产生;过,F0置1 JNC LOOP;T0未产生中断,C=0,那么跳;到LOOP,等待T0中断 SETB

37、 ET1 ;允许T1产生定时中断SETB TR1 ;启动T1HERE: AJMP HEREPT0M2: MOV TMOD,#26H ;对T0,T1初始化,T0方式1;计数,T1方式2定时 MOV TL0,#0FFH ;T0置初值 MOV TH0,#0FFH SETB ET0;允许T0中断 MOV TL1,#06H;T1置初值 MOV TH1,#06H CLR F0;把T0已发生中断标志F0清0 SETB EA;总中断允许 SETB TR0;启动T0 RETIT0P: CLRTR0 ;T0中断效力程序,停顿中断效力程序,停顿T0计数计数 SETBF0 ;把;把T0引脚接纳过负脉冲标志引脚接纳过负

38、脉冲标志F0置置1,;即接纳过负跳变;即接纳过负跳变 RETIIT1P: CPL P1.0;T1中断效力程序,中断效力程序,P1.0位取反位取反 RETI程序阐明:当单片机复位时,从程序阐明:当单片机复位时,从0000H跳向主程序跳向主程序MAIN处执行程处执行程序。其中调用了对序。其中调用了对T0,T1初始化子程序初始化子程序PT0M2。子程序前往后执行。子程序前往后执行标号标号LOOP处指令,循环等待处指令,循环等待T0引脚上负脉冲的到来。由于负脉冲到引脚上负脉冲的到来。由于负脉冲到来的标志位来的标志位F0的复位初始值为的复位初始值为0,所以程序就在标号,所以程序就在标号LOOP处循环等处

39、循环等待。待。当T0P3.4脚发生负跳变时,由于T0计数溢出,那么跳向T0中断效力子程序。此时停顿T0计数,并把T0引脚接纳过负脉冲的标志F0置1。当中断前往时,由于F0已被置1,那么程序跳出LOOP处的循环等待。此时执行指令来允许T1中断,并启动T1定时,然后执行“AJMP HERE指令,循环等待,等待T1的500s定时中断到来。当T1的500s定时中断产生时,那么进入T1的中断效力子程序IT1P,把P1.0脚电平取反。由于是自动装初值,省去对T1重装初值指令。中断前往后,到“AJMP HERE 处等待T1的500s定时中断。如此反复,即得到图6-14波形。【例【例6-5】 利用定时器利用定

40、时器T1的方式的方式2计数,每计满计数,每计满100个个数,将数,将P1.0取反。本例是方式取反。本例是方式2计数方式的运用举例。计数方式的运用举例。1选择任务方式选择任务方式外部信号由外部信号由T1P3.5引脚输入,每发生一次负跳变引脚输入,每发生一次负跳变计数器便加计数器便加1,每输入,每输入100个脉冲,计数器将产生溢出中个脉冲,计数器将产生溢出中断,在中断效力程序中将断,在中断效力程序中将P1.0取反一次。取反一次。T1任务在方式任务在方式2的控制字的控制字TMOD = 60H。不运用。不运用T0时,时,TMOD低低4位任取,但不能使位任取,但不能使T0为方式为方式3,这里取全,这里取

41、全0。2计算计算T1的初值的初值X = 28 100 = 156 = 9CHTL1的初值为的初值为9CH,重装初值存放器,重装初值存放器TH1 = 9CH。3参考程序:参考程序: ORG 0000H;程序运转入口;程序运转入口 LJMPMAIN;跳向主程序;跳向主程序MAIN ORG 001BH;T1中断效力程序入口中断效力程序入口 CPL P1.0;P1.0位取反位取反 RETI ORG 0100H;主程序入口;主程序入口MAIN: MOV TMOD,#60H;设置;设置T1为方式为方式2计数计数 MOV TL0,#9CH ;T0置初值置初值 MOV TH0,#9CH SETB TR1 ;启

42、动;启动T1HERE:AJMP HEREEND 程序阐明:由于程序阐明:由于T1的中断效力子程序只需两条指令,的中断效力子程序只需两条指令,不超越不超越8个字节,所以进入个字节,所以进入T1中断效力程序入口后,没有中断效力程序入口后,没有选择再跳转。选择再跳转。6.4.3 方式方式3的运用的运用方式方式3下的下的T0和和T1大不一样。大不一样。T0任务在方式任务在方式3,TL0和和TH0被分成两个独立的被分成两个独立的8位定时器位定时器/计数器。其中,计数器。其中,TL0可可作为作为8位的定时器位的定时器/计数器,而计数器,而TH0只能作为只能作为8位的定时器。位的定时器。此时此时T1只能任务

43、在方式只能任务在方式0、1或或2。普通情况下,当普通情况下,当T1用作串行口波特率发生器时,用作串行口波特率发生器时,T0才才设置为方式设置为方式3。此时,常把定时器。此时,常把定时器T1设置为方式设置为方式2,用作,用作波特率发生器。波特率发生器。【例【例6-6】假设某】假设某AT89S51单片机运用系统的两个外部单片机运用系统的两个外部中断源已被占用,设置中断源已被占用,设置T1任务在方式任务在方式2,用作波特率发生,用作波特率发生器。现要求添加一个外部中断源,并控制器。现要求添加一个外部中断源,并控制P1.0引脚输出一引脚输出一个个5kHz周期为周期为200s的方波。设时钟为的方波。设时

44、钟为12MHz。根本思想:设置根本思想:设置TL0任务在方式任务在方式3计数方式,计数方式,TL0的初的初值设为值设为0FFH,当检测到,当检测到T0脚信号出现负跳变时,脚信号出现负跳变时,TL0溢溢出,同时向出,同时向CPU恳求中断,这里恳求中断,这里T0脚作为一个负跳沿触脚作为一个负跳沿触发的外部中断恳求输入端。在中断处置子程序中,启动发的外部中断恳求输入端。在中断处置子程序中,启动TH0,TH0事先被设置为方式事先被设置为方式3的的100s定时,从而控制定时,从而控制P1.0输出周期为输出周期为200s的方波信号,如图的方波信号,如图6-15所示。所示。图图6-15 6-15 定时器定时

45、器P1.0P1.0输出的方波信号输出的方波信号1 1初值初值X X计算计算TL0TL0的初值设为的初值设为0FFH0FFH。5kHz5kHz方波的周期为方波的周期为200200s s,因此,因此TH0TH0的定时时间为的定时时间为100100s s。 初值初值X X计算:计算:(28(28 X)X) 1 1 10106 6 = = 1 1 10104 4 X X = = 2828 100100 = = 156156 = = 9CH9CH2 2程序设计程序设计ORGORG0000H0000H LJMP LJMP MAINMAIN ORG ORG 000BH000BH ;TL0TL0中断入口,中断

46、入口,TL0TL0运用运用T0T0的中断的中断 LJMP TL0INT LJMP TL0INT;跳向;跳向TL0TL0中断效力程序,中断效力程序, TL0 TL0占用占用T0T0中断中断 ORG 001BH;TH0中断入口,T1为方式3时,TH0;运用了T1的中断LJMP TH0INT ;跳向TH0中断效力程序ORG 0100H;主程序入口MAIN: MOVTMOD,#27H ;T0方式3,T1方式2定时作串;行口波特率发生器 MOVTL0,#0FFH ;置TL0初值 MOVTH0,#9CH;置TH0初值 MOVTL1,#datal ;TL1装入串口波特率常数MOV TH1,#datah;TH

47、1装入串口波特率常数 MOV TCON,#15H;允许T0中断 MOVIE,#9FH;设置中断允许,总中断允许,;TH0、TL0中断允许HERE: AJMP HERE;循环等待TL0INT: MOV TL0,#0FFH;TL0中断效力处置子程序,TL0;重新装入初值 SETB TR1;开场启动TH0定时 RETITH0INT:MOV TH0,#9CH;TH0中断效力程序,TH0重新;装入初值 CPLP1.0;P1.0位取反输出 RETI 6.4.4 门控制位门控制位GATEx的运用的运用丈量脉冲宽度丈量脉冲宽度引见门控制位引见门控制位GATE的详细运用,丈量的详细运用,丈量 P3.3引引脚上正

48、脉冲的宽度。脚上正脉冲的宽度。【例【例6-7】 门控位门控位GATE1可使可使T1的启动计数受的启动计数受 的的控制,当控制,当GATE1 = 1,TR1=1时,只需时,只需 INT1*引脚输入高引脚输入高电平常,电平常,T1才被允许计数。可丈量才被允许计数。可丈量 引脚引脚 P3.3上上正脉冲的宽度。其方法如图正脉冲的宽度。其方法如图6-16所示。所示。INT1INT1INT1图图6-16 利用利用GATE位丈量正脉冲的宽度位丈量正脉冲的宽度参考程序: ORG0000HRESET: AJMP MAIN ;复位入口转主程序 ORG 0100H;主程序入口MAIN: MOV SP,#60H MO

49、VTMOD,#90H;向TMOD写控制字,T1为方;式1定时,GATE1 = 1 MOV TL1,#00H MOV TH1,#00HLOOP0: JB P3.3,LOOP0;等待 低 SETB TR1;如 为低,启动T1INT1INT1LOOP1:JNB P3.3,LOOP1;等待 升高LOOP2:JB P3.3,LOOP2 ; 为高, 此时计数器计数, ;等待 降低 CLR TR1 ;停顿T1计数 MOV A,TL1 ;T1计数值送A ;将T1计数值送显示器 END执行以上程序,使 引脚上出现的正脉冲宽度以机器周期数的方式显示在显示器上。将A中的T1计数值送到显示器显示INT1INT1INT1INT16.4.5 实时时钟的设计实时时钟的设计引见运用定时器引见运用定时器/计数器实现时钟。计数器实现时钟。1实现实时时钟的根本思想实现实时时钟的根本思想最小计时单位是秒,如何获得最小计时单位是秒,如何获得1s的定时时间呢?从前的定时时间呢?从前面引见知,定时器方式面引见知,定时器方式1,最大定时时间也只能,最大定时时间也只能131ms。可将定时器的定时时间定为可将定时器的

温馨提示

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

评论

0/150

提交评论