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

下载本文档

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

文档简介

1、第第7章章 定时定时/计数器计数器 寄存器寄存器 5151系列单片机片内有二个十六位定时系列单片机片内有二个十六位定时/ /计数器:计数器:定时器定时器0(T0)0(T0)和定时器和定时器1(T1)1(T1)。 两个定时器都有定时或事件计数的功能,可用两个定时器都有定时或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合于定时控制、延时、对外部事件计数和检测等场合 定时定时/ /计数器实际上是计数器实际上是1616位加位加1 1计数器。计数器。 T0T0由由2 2个个8 8位特殊功能寄存器位特殊功能寄存器TH0TH0和和TL0TL0构成,构成, T1T1由由2 2个个8 8位特殊

2、功能寄存位特殊功能寄存TH1TH1和和TL1TL1构成。构成。每个定时器都可由软件设置为定时工作方式或每个定时器都可由软件设置为定时工作方式或 计数工作方式。计数工作方式。T0和和T1受受特殊功能寄存器特殊功能寄存器TMODTMOD和和TCONTCON控制。控制。 1). 定时工作方式定时工作方式 设置为定时工作方式时,定时器计数的脉设置为定时工作方式时,定时器计数的脉冲是由冲是由51单片机片内振荡器经单片机片内振荡器经12分频后产生分频后产生的。的。 每经过一个机器周期定时器每经过一个机器周期定时器(T0或或T1)的数的数值加值加1直至计数满产生溢出。直至计数满产生溢出。如:当如:当8051

3、采用采用12MHz晶体时,每个机器周晶体时,每个机器周期为期为1s,计,计5 个机器周期即为个机器周期即为5 s,即定时,即定时5 s 。 2). 计数工作方式计数工作方式 设置为计数工作方式时,通过引脚设置为计数工作方式时,通过引脚T0(P3T0(P34)4)和和T1(P3T1(P35)5)对外部脉冲信号计数。对外部脉冲信号计数。 当输入脉冲信号产生由当输入脉冲信号产生由1 1至至0 0的下降沿时,计数器的下降沿时,计数器的值加的值加1, 1, 在每个机器周期在每个机器周期CPUCPU采样采样T0T0和和T1T1的输入电平。的输入电平。若前一个机器周期采样值为高,下一个机器周期采样若前一个机

4、器周期采样值为高,下一个机器周期采样值为低,则计数器加值为低,则计数器加 1 1。 由于检测一个由于检测一个1 1至至0 0的跳变需要二个机器周期,故的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。最高计数频率为振荡频率的二十四分之一。 虽然对输入信号的占空比无特殊要求,但为了确虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。持时间至少是一个完整的机器周期。定时计数器的内部逻辑电路结构定时计数器的内部逻辑电路结构 &1C/TC/T寄存器寄存器定时器共有两

5、个控制寄存器:定时器共有两个控制寄存器: 定时器工作模式寄存器定时器工作模式寄存器TMOD(89H) 定时器控制定时器控制TCON(88H)1). 工作模式寄存器工作模式寄存器TMOD(89H) TMOD用于控制用于控制T0和和T1的操作模式。其各位的操作模式。其各位的定义如下:的定义如下: TMOD D7D6D5D4 D3D2D1 D0 (89H)GATE C/T M1 M0GATE C/TM1 M0定时器定时器T0 定时器定时器T1 GATE:门控信号:门控信号 GATE=0,TRx=1时即可启动定时器工作时即可启动定时器工作 ; GATE=1, TRx=1 INTx=1才可启动定时器工作

6、。才可启动定时器工作。 C/T:定时器:定时器/计数器选择位计数器选择位 C/T=1,为计数器方式;,为计数器方式; C/T=0,为定时器方式。,为定时器方式。 M1 M0 工作模式选择位工作模式选择位 M1M0=00 工作方式工作方式0(13位方式)。位方式)。 M1M0=01 工作方式工作方式1(16位方式)。位方式)。 M1M0=10 工作方式工作方式2(8位自动再装入方式)。位自动再装入方式)。 M1M0=11 工作方式工作方式3(T0为为2个个8位方式)。位方式)。 TF1 TR1TF0 TR0 IE1IT1 IE0IT0T1 请求请求有有/无无 T1工作工作启启/停停 T0 请求请

7、求有有/无无 T0 工作工作启启/停停 INT1 请求请求有有/无无 INT1方式方式下沿下沿/ 低低电平电平 INT0请求请求有有/无无 INT0方式方式下沿下沿/低低电平电平 2). 控制寄存器控制寄存器TCON(88H) TCON寄存器寄存器 中定时器控制中定时器控制 仅用了其中高四位,其意义仅用了其中高四位,其意义如下:如下: TF1:T1溢出中断请求标志。溢出中断请求标志。 TF1=1,T1有溢出中断请求。有溢出中断请求。 TF1=0,T1无溢出中断请求。无溢出中断请求。 TR1:T1运行控制位。运行控制位。 TR1=1,启动,启动T1工作。工作。 TR1=0,停止,停止T1工作。工

8、作。 TF0:T0溢出中断请求标志。溢出中断请求标志。 TF0=1,T0有溢出中断请求。有溢出中断请求。 TF0=0,T0无溢出中断请求。无溢出中断请求。 TR0:T0运行控制位。运行控制位。 TR0=1,启动,启动T0工作。工作。 TR0=0,停止,停止T0工作。工作。3 定时器的四种工作方式定时器的四种工作方式 对对TMOD寄存器的寄存器的M1、M0位的设置,可选择四种工作位的设置,可选择四种工作方式,即方式方式,即方式0、方式、方式1、方式、方式2和方式和方式3。下面用下面用THX、TLX(X=1或或0)表示)表示TH1 TL1 TH0 TL0。方式方式 定时器定时器(T0或或T1)工作

9、于工作于13位定时、计数方式。位定时、计数方式。用于计数方式时最大计数值为用于计数方式时最大计数值为 213 8192个脉冲个脉冲用于定时工作时,定时时间为:用于定时工作时,定时时间为: t(213一一T0初值初值) 时钟周期时钟周期12在这种模式下,在这种模式下,16位寄存器位寄存器(THx和和TLx)只用只用13位,其位,其中中THx占高占高8位。其中位。其中TLx占低占低5位,位, TLx的高的高3位末用。位末用。当当TLx的低的低5位溢出时向位溢出时向THx进位进位,而而THx溢出时硬件置溢出时硬件置位位TF0,并申请中断。,并申请中断。 定时、计数溢出否可查询定时、计数溢出否可查询T

10、F0是否置位,如果开是否置位,如果开中断则产生溢出中断。中断则产生溢出中断。 2) .方式方式1 当当TMOD中中M1M0=01时,定时计数器工作在方式时,定时计数器工作在方式1。该模式是一个该模式是一个16位定时计数方式。位定时计数方式。寄存器寄存器TH0和和TL0是以全是以全16位参与操作,位参与操作,计数方式时最大计数计数方式时最大计数 21665536(个外部脉冲个外部脉冲) 用于定时工作方式时,定时时间为:用于定时工作方式时,定时时间为: t(216一一T0初值初值) 时钟周期时钟周期12 16位寄存器位寄存器(THx和和TLx) 中中THx提供高提供高8位、位、TLx提供低提供低8

11、位计数初值位计数初值 3 3). .方式方式2 2 当当TMODTMOD中中M1M0=10M1M0=10时,定时器工作在方式时,定时器工作在方式2 2。方式方式2 2是是8 8位的可自动重装载的定时计数方式。位的可自动重装载的定时计数方式。1616位的计数器被拆成两个位的计数器被拆成两个8 8位,其中位,其中TL0TL0用作用作8 8位计数器,位计数器, TH0TH0用以保持计数初值。当用以保持计数初值。当TL0TL0计数溢出,置计数溢出,置TF0TF0,TH0TH0中的中的初值自动装入初值自动装入TL0TL0,继续计数,循环重复计数。,继续计数,循环重复计数。用于计数工作方式时,最大计数值为

12、:用于计数工作方式时,最大计数值为: 2 28 8256(256(个外部脉冲个外部脉冲) )。 用于定时工作方式时,其定时时间为;用于定时工作方式时,其定时时间为; t t(2(28 8TH0TH0初值初值) )振荡周期振荡周期1212这种工作方式可省去用户重装常数的程序,并可产生精这种工作方式可省去用户重装常数的程序,并可产生精确的定时时间,特别适用作串行口波待率发生器确的定时时间,特别适用作串行口波待率发生器。 4 4). .方式方式3 3 当当TMODTMOD中中M1M0=11M1M0=11时,定时器工作在方式时,定时器工作在方式3 3。若将若将T0T0设置为模式设置为模式3 3,TL0

13、TL0和和TH0TH0被分成为两个互相独立被分成为两个互相独立的的8 8位计数器位计数器TH0TH0和和 TL0 TL0 。 TL0TL0可工作为定时方式或计数方式。占用原可工作为定时方式或计数方式。占用原T0T0的各控制的各控制位、引脚和中断源。即位、引脚和中断源。即C CT T、GATEGATE、TR0TR0、TF0TF0和和T0 (P3.4)T0 (P3.4)引脚、引脚、INT0 (P3.2)INT0 (P3.2)引脚。引脚。 TH0TH0只可用作定时功能,占用定时器只可用作定时功能,占用定时器T1T1的控制位的控制位TR1TR1和和T1T1的中断标志位的中断标志位TF1TF1,其启动和

14、关闭仅受,其启动和关闭仅受TRlTRl的控制。的控制。定时器定时器T1T1无模式无模式 3, 3, 此时,此时,T1T1可工作于方式可工作于方式0 0、1 1、2 2,但不能使用中断方式。但不能使用中断方式。 只有将只有将T1T1用做串行口的波特率发生器时,用做串行口的波特率发生器时,T0T0才工作在才工作在方式方式3 3,以便增加一个定时器。,以便增加一个定时器。4 定时定时/计数器的应用程序设计计数器的应用程序设计1 1)定时器的计数初值)定时器的计数初值C C的计算和装入的计算和装入 如前所述,如前所述,8xx518xx51定时器定时器/ /计数器不同工作方式的模值计数器不同工作方式的模

15、值不同,由于采用加不同,由于采用加1 1计数,因此计数初值应为负值,计计数,因此计数初值应为负值,计算机中用有符号数采用补码表示。算机中用有符号数采用补码表示。 计数初值(计数初值(C C)的求法如下。)的求法如下。 计数方式:计数方式: 计数初值计数初值 C=C=模模-X-X(其中(其中X X为要计的脉冲个数)为要计的脉冲个数)定时方式:定时方式: 计数初值计数初值 C= t / MCC= t / MC补补= =模模t / MCt / MC 其中其中t t为欲定时时间,为欲定时时间,MCMC为为8xx518xx51的机器周期的机器周期MC=12/foscMC=12/fosc 当采用当采用12

16、MHZ12MHZ晶振时,晶振时,MC=1usMC=1us; 当采用当采用6MHZ6MHZ晶振时,晶振时,MC=2usMC=2us。方式0( 13位方式): C=(-64H)补=2000H64H=1F9CH 1F9CH0001 1111 1001 1100B 把把13位中的高八位1111 1100B1111 1100B装入装入TH0TH0, 而把而把13位中的低五位低五位xxx1 1100Bxxx1 1100B装装入TL0TL0。 MOV TH0MOV TH0,#0FCH#0FCH; MOV TL0MOV TL0,#1CH#1CH;( (xxxxxx用用“0 0”填入填入)方式方式1(161(1

17、6位方式位方式) ): C=C=(-64H-64H)补补=10000H-64H=FF9CH=10000H-64H=FF9CH 用指令装入计数初值用指令装入计数初值: MOV TH0MOV TH0,#0FFH#0FFH MOV TL0 MOV TL0,#9CH#9CH例例 要计要计100个脉冲的计数初值个脉冲的计数初值方式方式2(8位自动再装入方式)位自动再装入方式) C=(64H)补)补=100H64H=9CH 初值既要装入初值既要装入TH0,也要装入,也要装入TL0: MOV TH0,#9CH MOV TL0,#9CH2) 定时计数器的初始化编程定时计数器的初始化编程 定时计数器的初始化编程

18、步骤定时计数器的初始化编程步骤:(1)根据定时时间要求或计数要求计算计数器初值;)根据定时时间要求或计数要求计算计数器初值;(2)工作方式控制字送)工作方式控制字送TMOD寄存器;寄存器;(3)送计数初值的高八位和低八位到)送计数初值的高八位和低八位到THX和和TLX寄存寄存 器中;器中;(4)启动定时(或计数),即将)启动定时(或计数),即将TRX置位。置位。 如果工作于中断方式,需要置位如果工作于中断方式,需要置位EA(中断总开关)(中断总开关)及及ETX(允许定时(允许定时/计数器中断)。并编中断服务程序。计数器中断)。并编中断服务程序。1)方式)方式0的应用的应用 例例1:利用:利用T

19、0方式方式0产生产生1 ms的定时,在的定时,在P1.2 引引脚上输出周期为脚上输出周期为2ms的方波。设单片机晶振频的方波。设单片机晶振频率率fosc12MHz。 解:解:(1) 确定工作方式确定工作方式 : (TMOD)=00H (2)计算计算1 ms定时时定时时T0的初值的初值 机器周期机器周期 T = 1fosc12 = 1s 计数个数:计数个数:X =1ms/ls = 1000 设设T0的计数初值为,则的计数初值为,则 x0 (213一一X) 81921000 7192D3 3 应用编程举例应用编程举例 解得:解得:T0初值初值=7192=1C18H=0001110000011000

20、B,其中将高,其中将高8位位11100000 B=E0H赋给赋给TH0,低,低5位位00011000=18H赋给赋给TL0。 (3) 编程方法编程方法 方法一:采用中断工作方式,编程如下:方法一:采用中断工作方式,编程如下:ORG 0000HAJMP MAIN ;转主程序;转主程序MAIN ORG 000BHAJMP IT0P ;转;转T0中断服务程序中断服务程序IT0P ORG 1000H MAIN: MOV SP,#60H ;设堆栈指针;设堆栈指针 MOV TMOD,#00H :设置:设置T0为方式为方式0,定时,定时 MOV TL0 , #18H ;送定时初值;送定时初值 MOV TH0

21、,#0E0H SETB EA ;CPU开中断开中断 SETB ET0 ;T0允许中断允许中断 SETB TR0 ;启动;启动T0定时定时 HERE: SJMP HERE ;等待中断;等待中断 中断服务程序:中断服务程序: ORG 0200H ;T0中断入口中断入口 CPL P1.2 ;输出方波;输出方波 MOV TL0,#18H ;重新装入计数初值;重新装入计数初值 MOV TH0,#0E0H RETI ;中断返回;中断返回 END 查询方式查询方式 MOV TMOD,#00H ;设置;设置T0为方式为方式0,定时,定时 MOV TL0,#18H ;送初值;送初值 MOV TH0,#0E0H

22、SETB TR0 ;启动;启动T0定时定时LOOP: JBC TF0,NEXT ;查询定时时间到否;查询定时时间到否? SJMP LOOPNEXT:MOV TL0,#18H ;重新装入计数初值;重新装入计数初值 MOV TH0,#0E0H CPL P1.2 ;输出方波;输出方波 SJMP LOOP ;重复循环;重复循环2)方式)方式1的应用的应用例例2 如图所示,如图所示,P1接有八个发光二极管,接有八个发光二极管,编程使八个管轮流点亮,编程使八个管轮流点亮,每个管亮每个管亮100ms,设晶,设晶振为振为6MHz。分析分析 利用利用T1T1完成完成100ms100ms的定时,当的定时,当P1P

23、1口线输出口线输出“1 1”时,发光二极管亮,每隔时,发光二极管亮,每隔100ms100ms”1 1”左移一次,采用左移一次,采用定时方式定时方式1 1,先计算计数初值:,先计算计数初值: MC= =2MC= =2s s 100ms/2 100ms/2s =50000=C350H s =50000=C350H (C350HC350H)补补 =10000H-C350H=3CB0H=10000H-C350H=3CB0H 查询方式如下:查询方式如下: ORG 0000HORG 0000H MOV A MOV A,#01H#01H:置第一个:置第一个LEDLED亮亮NEXTNEXT:MOV P1MOV

24、 P1,A A MOV TMOD MOV TMOD,#10H #10H ;T1T1工作于定时方式工作于定时方式1 1 MOV TH1 MOV TH1,#3CH#3CH MOV TL1 MOV TL1,#0B0H#0B0H; 定时定时100100ms ms SETB TR1 SETB TR1 AGAI: JBC TF1,SHIAGAI: JBC TF1,SHI; 100100msms到转到转SHI,SHI,并清并清TF1TF1 SJMP AGAI SJMP AGAISHISHI: RL ARL A SJMP NEXT SJMP NEXT END END中断方式中断方式 ORG 0000H ORG

25、 0000H AJMP MAIN AJMP MAIN ;单片机复位后从;单片机复位后从0000H0000H开始执行开始执行 ORG 001BHORG 001BH AJMP IV1 AJMP IV1 ;转移到;转移到IV1IV1 ORG 0030H ORG 0030H ;主程序;主程序MAINMAIN:MOV AMOV A,#01H #01H MOV P1 MOV P1,A A ;置第一个;置第一个LEDLED亮亮 MOV TMODMOV TMOD,#10H #10H ;T1T1工作于定时方式工作于定时方式1 1 MOV TH1 MOV TH1,#3CH#3CH MOV TL1 MOV TL1,

26、#0B0H #0B0H ;定时;定时100ms100ms SETB ET1 SETB ET1 ;启动;启动T1T1工作工作SETB EASETB EA SETB TR1 SETB TR1 ;允许;允许T1T1中断中断WAITWAIT:SJMP WAIT SJMP WAIT ;等待中断;等待中断 IV1IV1:RL A RL A ;中断服务程序,左移一位;中断服务程序,左移一位 MOV P1MOV P1,A A ;下一个发光二极管亮;下一个发光二极管亮 MOV TH1MOV TH1,#3CH#3CH MOV TL1 MOV TL1,#0B0H #0B0H ;重装计数初值;重装计数初值 RETI

27、RETI ;中断返回;中断返回 ENDEND以上程序进入循环执行以上程序进入循环执行, ,八个八个LEDLED一直循环轮流点亮。一直循环轮流点亮。 3). 方式方式2的应用的应用例例4 由由P3.4引脚引脚(T0)输入一低频信号输入一低频信号(其小于其小于0.5kHZ),要求要求P3.4每每发生一次负跳变时,发生一次负跳变时, P1.0输出一个输出一个500us同步负脉冲,同时同步负脉冲,同时P1.1输出一个输出一个1ms的同步正脉冲。已知晶振频率为的同步正脉冲。已知晶振频率为6MHZ。P3.4P3.4500us500us1ms1ms定时方式定时方式计数方式计数方式 计数方式计数方式(初值(初

28、值FFH)定时方式定时方式1ms1ms500us500usP1.0P1.0P1.1P1.1CLR P1.0 ; P1.0清清0SETB P1.1 ; P1.1置置1SETB TR0 ; 启动定时计数器启动定时计数器DEL2: JBC TF0, RESP2 ;检测第一次;检测第一次500us到否到否 AJMP DEL2RESP2: SETB P1.0 ;P1.0恢复恢复1DEL3: JBC TF0,RESP3 ;检测第二次;检测第二次500us到否到否 AJMP DEL3RESP3: CLR P1.1 ; P1.1复复0 CLR TR0 AJMP BEGIN4) 门控位的应用门控位的应用 门控位

29、门控位GATE为为1时,时,TRx=1,INTx=1才能启动定时器。才能启动定时器。利用这个特性可以测量外部输入脉冲的宽度。利用这个特性可以测量外部输入脉冲的宽度。例例4 利用利用T0门控位测试门控位测试 INT0引脚上出现的正脉冲宽度,已知引脚上出现的正脉冲宽度,已知晶振频率为晶振频率为12MHz,将所测得值最高位存入片内,将所测得值最高位存入片内71H单元,单元,低位存入低位存入70H单元。单元。解:设外部脉冲解:设外部脉冲 由由(P3.2)输入,输入,T0工作于定时方式工作于定时方式 1 (16位计数位计数),GATE设为设为1。测试时,应在。测试时,应在INT0 低电平时,低电平时,设

30、置设置TR0为为1(16位计数位计数);当;当INT0 变为高电平时,就启动计变为高电平时,就启动计数;数; 再次变低时,停止计数。此计数值与机器周期的乘积再次变低时,停止计数。此计数值与机器周期的乘积即为被测正脉冲的宽度。因即为被测正脉冲的宽度。因fosc=12MHZ,机器周期为,机器周期为1us,测试过程如下。测试过程如下。源程序如下:源程序如下: MOV TMOD,#09H ; 设设T0为方式为方式1 MOV TL0,#00H ;设计数初值取最大值;设计数初值取最大值 MOV TH0,#00H MOV R0,#70H JB P3.2, $ ;等;等P3.2(INT0 )变低变低 SETB

31、 TR0 ;启动;启动T0准备工作准备工作 JNB P3.2, $ ;等待;等待P3.2(INT0 ) JB P3.2,$ ; 等待等待P3.2(INT0 ) CLR TR0 ;停止计数停止计数T0从从0开始计数开始计数INT0INT0 09H (TMOD) 1 TR0 0 TR0T0停止计数停止计数 MOV R0,TL0 ;存放结果;存放结果 INC R0 MOV R0,TH0 SJMP $由于靠软件启动和停止计数,有一定的测量误差。由于靠软件启动和停止计数,有一定的测量误差。其可能的最大误差与指令的执行时间有关。其可能的最大误差与指令的执行时间有关。 此例中,在读取定时器的计数之前,已把它

32、停住。此例中,在读取定时器的计数之前,已把它停住。但在某些情况下,不希望在读计数值时打断定时的过但在某些情况下,不希望在读计数值时打断定时的过程,由于我们不可能在同一时刻读取程,由于我们不可能在同一时刻读取THX和和TLX的内的内容。读取一个时恰好另一个产生溢出,在这种情况下,容。读取一个时恰好另一个产生溢出,在这种情况下,读取的计数值有可能是错的。可以解决错读的方法是:读取的计数值有可能是错的。可以解决错读的方法是: 先读先读THX后读后读TLX,再读,再读THX,若两次,若两次读得的读得的THx没有发生变化,则可确定读到的内没有发生变化,则可确定读到的内容是正确的。若前后两次读到的容是正确

33、的。若前后两次读到的THx有变化,有变化,则再重复上述过程,重复读到的内容就应该则再重复上述过程,重复读到的内容就应该是正确的了。下面是按此是正确的了。下面是按此思路编写的程序思路编写的程序段,读到的段,读到的TH0 和和TL0放在放在R1和和R0内:内:RP:MOV A,TH0; MOV R0,TL0; CJNE A,TH0,RP; MOV R1,A方法方法1:1:采用采用T0T0产生周期为产生周期为200ms200ms脉冲,即脉冲,即P1.0P1.0每每100ms100ms取反一次作为取反一次作为T1T1的计数脉冲,的计数脉冲,T1T1对下降沿计数,因此对下降沿计数,因此T1T1计计5 5

34、个脉冲正好个脉冲正好100ms100ms。T0采用方式采用方式1,X= 得得X=3CB0H,T1采用方式采用方式2,计数初值计数初值X = 5=FBH均采用查询方式,均采用查询方式,流程图和程序如下:流程图和程序如下:1621622101003825)扩大计数个数和定时时间)扩大计数个数和定时时间例例3 3 在在P1.7P1.7端接一个发光二极管端接一个发光二极管LEDLED,要求利用定时控制使,要求利用定时控制使LEDLED亮亮一秒灭一秒周而复始,设一秒灭一秒周而复始,设fosc=6MHZfosc=6MHZ。解解: 16: 16位定时最大为位定时最大为 * *2us=131.072ms2us

35、=131.072ms,显然不能满足要求,显然不能满足要求,可用以下两种方法解决。可用以下两种方法解决。 ORG 0000H ORG 0000HMAINMAIN:CLR P1.7CLR P1.7 SETB P1.0 SETB P1.0 MOV TMOD MOV TMOD,#61H#61H MOV TH1 MOV TH1,#0FBH#0FBH MOV TL1 MOV TL1,#0FBH#0FBH SETB TR1 SETB TR1LOOP1:CPL P1.7LOOP1:CPL P1.7 LOOP2 LOOP2:MOV TH0MOV TH0,#3CH#3CH MOV TL0 MOV TL0,#0B0

36、H#0B0H SETB TR0 SETB TR0 LOOP3: JBC TF0 LOOP3: JBC TF0,LOOP4LOOP4 SJMP LOOP3 SJMP LOOP3 LOOP4 LOOP4:CPL P1.0CPL P1.0 JBC TF1 JBC TF1,LOOP1LOOP1 AJMP LOOP2 AJMP LOOP2 END END 程序中用程序中用JBCJBC指令对定时指令对定时/ /计数溢出标志位计数溢出标志位进行检测,当标志位为进行检测,当标志位为1 1时跳转并清标志时跳转并清标志。方法方法2:T0每隔每隔100ms中断一次,利用软件对中断一次,利用软件对T0的中断的中断次数

37、进行计数,中断次数进行计数,中断10次即实现了次即实现了1秒的定时。秒的定时。 ORG 000BH ;T0中断服务程序入口中断服务程序入口 AJMP IP0 ORG 0030H ;主程序开始;主程序开始 MAIN:CLR P1.7 ;T0定时定时100ms MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV R4 MOV R4,#0AH#0AH;中断;中断1010次计数次计数 SETB TR0SETB TR0 SJMP SJMP ;等待中断;等待中断 IP0IP0:DJNZ R4DJNZ R4,RET0RET0; MOV

38、R4MOV R4,#0AH#0AH CPL P1.7 CPL P1.7RET0RET0:MOV TH0MOV TH0,#3CH#3CH MOV TL0 MOV TL0,#0B0H#0B0H SETB TR0 SETB TR0 RETI RETI6 小小 结结 定时计数器应用非常广泛,如定时采定时计数器应用非常广泛,如定时采样、时间测量、产生音响、作脉冲源、制样、时间测量、产生音响、作脉冲源、制作日历时钟、测量波形的频率和占空比、作日历时钟、测量波形的频率和占空比、检测电机转速等。因此应很好掌握。检测电机转速等。因此应很好掌握。 51系列单片机有两个系列单片机有两个16位的定时计数位的定时计数器

39、,有四种不同的工作方式,归纳于下表:器,有四种不同的工作方式,归纳于下表:每启动一次工作每启动一次工作,需装入一次需装入一次计数初值计数初值28=256=100H28=256=100H216=65536=10000H213=8192=2000H 模模 值值 (计数最大值计数最大值)TL0定时,计数定时,计数占用占用TR0、TF0 ;TH0定时,使用定时,使用T1 的的TR1、TF1此时此时T1作波特率作波特率发生器发生器定时、计数范围定时、计数范围小,不用重装时小,不用重装时间常数,多用于间常数,多用于串行通信的波特串行通信的波特率发生器率发生器用于用于定时时间定时时间 65.5ms,计数脉冲

40、计数脉冲 65536 个个场合场合用于用于定时时间定时时间 8.19ms ,计数脉冲计数脉冲 8192 个个场合场合 应用场合应用场合(设设fosc12MHz)同方式同方式0、1第一次装入第一次装入,启动启动工作后工作后,每次每次TL回零后回零后,不用程序不用程序装入装入,由由TH自动自动装入到装入到TL 同左同左 TH TL高八位高八位 TH低八位低八位 TL高八位高八位 TH低五位低五位 TL 计数初值计数初值C的装入的装入方式方式 3 3T0T0两个两个8 8位位 方式方式方式方式 2 28 8位自动位自动重装方式重装方式方式方式 116位定时位定时计数方式计数方式 方式方式 013位定

41、时位定时计数方式计数方式 方方 式式八位八位 定时和计数实质都是对脉冲的计数,只是被定时和计数实质都是对脉冲的计数,只是被计脉冲的来源不同,定时方式的被计脉冲来源于计脉冲的来源不同,定时方式的被计脉冲来源于时钟时钟,计数方式的被计脉冲来源于,计数方式的被计脉冲来源于外部外部,定时方,定时方式的计数初值和被计脉冲式的计数初值和被计脉冲周期周期有关,计数方式的有关,计数方式的和被计脉冲的和被计脉冲的个数个数有关。有关。 无论定时还是计数,当计满规定的无论定时还是计数,当计满规定的 脉冲个数脉冲个数产生溢出(计数初值寄存器回零),置位产生溢出(计数初值寄存器回零),置位TFx , 可可以通过程序查询

42、,如果允许中断,会产生中断。以通过程序查询,如果允许中断,会产生中断。 本章应重点掌握定时计数器的应用设计本章应重点掌握定时计数器的应用设计. 练习:练习: 利用利用51单片机的单片机的T0计数,每计计数,每计10个脉冲,个脉冲,P1.0取反一次,采用查询和中取反一次,采用查询和中断两种方式编程。断两种方式编程。 查询方式查询方式ORG 0000HMOV TMOD,#06HMOV TH0,#0F6HMOV TL0,#0F6HSETB TR0ABC: JNB TF0,$CLR TF0CPL P1.0SJMP ABC 中断方式中断方式ORG 0000HAJMP MAINORG 000BHCPL P

43、1.0RETIMAIN:MOV TMOD,#06HMOV TH0,#0F6HMOV TL0,#0F0HSETB EASETB ET0SETB TR0SJMP $使用方式使用方式2 ,计数初值,计数初值C=100H-0AH=F6H 14以中断方法设计单片机秒、分脉冲发生器,以中断方法设计单片机秒、分脉冲发生器,假定假定P1.0每秒钟产生一个机器周期的正脉冲,每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。每分钟产生一个机器周期的正脉冲。 解解 程序程序1(中断法中断法): 1s10ms64H10msl00 1min1s3CH1s60 设设 fosc12MHz T0.01s10ms 定时时间定时时间t(216一定时器初值一定时器

温馨提示

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

评论

0/150

提交评论