《第七章定时计数器改精选文档.ppt》由会员分享,可在线阅读,更多相关《第七章定时计数器改精选文档.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第七章定时计数器改本讲稿第一页,共四十二页 本章介绍的主要内容本章介绍的主要内容 定时计数器结构和工作原理定时计数器结构和工作原理 定时计数器的控制定时计数器的控制寄存器寄存器 定时计数器的应用编程定时计数器的应用编程本讲稿第二页,共四十二页片内有片内有2 2个个1616位定时位定时/计数器计数器:定时器定时器0(0(T0T0)和定时器和定时器1(1(T1T1)。定时或计数功能,定时或计数功能,应用:控制、延时、计数和检测应用:控制、延时、计数和检测定时定时/计数器实际上是计数器实际上是1616位加位加1 1计数器计数器。T0 T0由由2 2个个8 8位持殊功能寄存器位持殊功能寄存器TH0TH
2、0和和TL0TL0构成,构成,T1 T1由由2 2个个8 8位持殊功能寄存位持殊功能寄存TH1TH1和和TL1TL1构成。构成。可由软件设置为可由软件设置为定时方式定时方式或或计数方式计数方式。T0和和T1受受特殊功能寄存器特殊功能寄存器TMODTMOD和和TCONTCON控控制。制。71 8XX51定时定时/计数器结构和工作原理计数器结构和工作原理本讲稿第三页,共四十二页1.定时工作方式定时工作方式 设置为定时工作方式时,定时器计数的脉设置为定时工作方式时,定时器计数的脉冲是由冲是由51单片机片内单片机片内振荡器经振荡器经12分频分频后产生后产生的。的。每经过一个机器周期定时器每经过一个机器
3、周期定时器(T0或或T1)的数值的数值加加1直至计数满产生溢出。直至计数满产生溢出。如:当如:当8051采用采用12MHz晶体时,每个机器周晶体时,每个机器周期为期为1s,计,计5 个机器周期即为个机器周期即为5 s,即定时,即定时5 s。本讲稿第四页,共四十二页2.计数工作方式计数工作方式 设置为计数工作方式时,通过引脚设置为计数工作方式时,通过引脚T0(P3T0(P34)4)和和T1(P3T1(P35)5)对外部脉冲信号计数。对外部脉冲信号计数。当输入信号由当输入信号由1 1 1 1至至至至0 0 0 0的下降沿的下降沿的下降沿的下降沿时,时,定时器的值加定时器的值加定时器的值加定时器的值
4、加1 1 1 1,每个机器周期每个机器周期每个机器周期每个机器周期CPUCPUCPUCPU采样采样采样采样T0T0T0T0和和和和T1T1T1T1的输入电平的输入电平的输入电平的输入电平。若前一周期为高,下一周期为低,则计数器加若前一周期为高,下一周期为低,则计数器加1 1。由于检测一个由于检测一个1 1至至0 0的跳变需要二个机器周期,的跳变需要二个机器周期,故故最高计数频率为振荡频率的二十四分之一最高计数频率为振荡频率的二十四分之一最高计数频率为振荡频率的二十四分之一最高计数频率为振荡频率的二十四分之一。虽然对输入信号的占空比无特殊要求,但为了确保某个电虽然对输入信号的占空比无特殊要求,但
5、为了确保某个电平在变化之前至少被采样一次,要求平在变化之前至少被采样一次,要求电平保持时间至少电平保持时间至少是一个完整的机器周期是一个完整的机器周期。本讲稿第五页,共四十二页 72 定时计数器的控制定时计数器的控制寄存器寄存器两个:定时器控制寄存器两个:定时器控制寄存器TCON(88H)定时器工作模式寄存器定时器工作模式寄存器TMOD(89H)1.工作模式寄存器工作模式寄存器TMOD(89H)TMOD用于控制用于控制T0和和T1的操作模式。的操作模式。TMOD D7D6D5D4 D3D2D1 D0 (89H)GATE C/T M1 M0GATE C/TM1 M0定时器定时器T0 定时器定时器
6、T1本讲稿第六页,共四十二页 GATE:门控信号:门控信号 GATE=0,TRx=1时即可启动定时器工作;时即可启动定时器工作;GATE=1,TRx=1 时时INTx=1才可启动定时器工作。才可启动定时器工作。C/T:定时器:定时器/计数器选择位计数器选择位 C/T=1,为计数器方式;,为计数器方式;C/T=0,为定时器方式。,为定时器方式。M1 M0 工作模式选择位工作模式选择位 M1M0=00 工作方式工作方式0(13位方式)。位方式)。M1M0=01 工作方式工作方式1(16位方式)。位方式)。M1M0=10 工作方式工作方式2(8位自动再装入方式)。位自动再装入方式)。M1M0=11
7、工作方式工作方式3(T0为为2个个8位方式)。位方式)。本讲稿第七页,共四十二页 TF1 TR1TF0TR0 IE1IT1 IE0IT0T1 请求请求有有/无无 T1工作工作启启/停停 T0 请求请求有有/无无 T0 工作工作启启/停停INT1 请求请求有有/无无INT1方式方式下沿下沿/低低INT0请求请求有有/无无INT0方式方式下沿下沿/低低 2.控制寄存器控制寄存器TCON(88H)定时器控制用定时器控制用高高高高4 4位位位位,低,低4位用于外部中断。位用于外部中断。TF1:T1溢出中断请求标志溢出中断请求标志。TF0TF0:T0T0 TF1=1,T1有溢出中断请求。有溢出中断请求。
8、TF1=0,T1无溢出中断请求。无溢出中断请求。TR1TR1:T1T1运行控制位运行控制位运行控制位运行控制位。TR0TR0:T0T0 TR1=1,启动,启动T1工作。工作。TR1=0,停止,停止T1工作。工作。本讲稿第八页,共四十二页定时计数器的内部逻辑电路结构定时计数器的内部逻辑电路结构&1C/TC/T本讲稿第九页,共四十二页7.3 定时器的四种工作方式定时器的四种工作方式 THX、TLX(X=1或或0)表示)表示TH1 TL1和和TH0 TL0。1.1.方式方式 0 013位位定时、计数方式,定时、计数方式,用于计数方式时最大计数值为用于计数方式时最大计数值为 2 213 8192819
9、2个脉冲个脉冲 用于定时工作时,定时时间为:用于定时工作时,定时时间为:t t(2(21313一一T0初值初值)时钟周期时钟周期1216寄存器寄存器(THx和和TLx)只用只用13位,位,THxTHx占高占高占高占高8 8位,位,位,位,TLx TLx占低占低占低占低5 5位位位位,TLxTLx的高的高的高的高3 3位末用位末用位末用位末用。当当TLx的的低低低低5 5位溢出时向位溢出时向位溢出时向位溢出时向THxTHx进位进位进位进位,而而THxTHx溢出时硬件置位溢出时硬件置位溢出时硬件置位溢出时硬件置位TF0TF0,并申请中断。,并申请中断。本讲稿第十页,共四十二页 定时、计数溢出否可定
10、时、计数溢出否可查询查询查询查询TF0TF0是否置位,如果开中是否置位,如果开中断则产生溢出中断。断则产生溢出中断。2.方式方式1 当当TMOD中中M1M0=01时,定时计数器工作在方式时,定时计数器工作在方式1。该模式是一个该模式是一个1616位位位位定时计数方式。定时计数方式。寄存器寄存器TH0和和TL0是以全是以全16位参与操作,位参与操作,计数方式时最大计数计数方式时最大计数 2 216166553665536(个外部脉冲个外部脉冲)用于定时工作方式时,定时时间为:用于定时工作方式时,定时时间为:t t(2(216一一一一T0T0初值初值初值初值)时钟周期时钟周期时钟周期时钟周期121
11、2 16寄存器寄存器(THx和和TLx)中中THx提供高提供高8位、位、TLx提供低提供低8位计数初值位计数初值 本讲稿第十一页,共四十二页3.3.方式方式2 2 当当TMODTMOD中中M1M0=10M1M0=10M1M0=10M1M0=10时,定时器工作在方式时,定时器工作在方式2 2。方式方式2 2是是8 8 8 8位位位位的可的可自动重装载自动重装载自动重装载自动重装载的定时计数方式。的定时计数方式。1616位的计数器被位的计数器被拆成两个拆成两个拆成两个拆成两个8 8 8 8位位位位,其中,其中TL0TL0TL0TL0用作用作用作用作8 8 8 8位计数器,位计数器,位计数器,位计数
12、器,TH0TH0TH0TH0用以保持计数初值用以保持计数初值用以保持计数初值用以保持计数初值。当。当TL0TL0计数溢出,置计数溢出,置TF0TF0,TH0TH0中的初中的初值自动装入值自动装入TL0TL0,继续计数,循环重复计数。,继续计数,循环重复计数。用于计数工作方式时,最大计数值为:用于计数工作方式时,最大计数值为:2 2 2 28 8256256256256(个外部脉冲个外部脉冲)。用于定时工作方式时,其定时时间为;用于定时工作方式时,其定时时间为;t t t t(2(2(2(28 8 8 8 TH0TH0TH0TH0初值初值初值初值)振荡周期振荡周期振荡周期振荡周期12121212
13、这种工作方式可省去用户重装常数的程序,并可产生这种工作方式可省去用户重装常数的程序,并可产生精精确的定时时间确的定时时间,特别适用作串行口波待率发生器特别适用作串行口波待率发生器。本讲稿第十二页,共四十二页4.4.方式方式3 3 当当TMODTMOD中中M1M0=11M1M0=11M1M0=11M1M0=11时,定时器工作在方式时,定时器工作在方式3 3。若将若将T0T0设置为模式设置为模式3 3,TL0TL0和和TH0TH0被被分成为两个互相独立的分成为两个互相独立的分成为两个互相独立的分成为两个互相独立的8 8 8 8位计数器位计数器位计数器位计数器TH0TH0TH0TH0和和和和TL0T
14、L0TL0TL0。TL0TL0TL0TL0可工作为定时或计数方式可工作为定时或计数方式可工作为定时或计数方式可工作为定时或计数方式。占用原。占用原T0T0的各控制位、引的各控制位、引脚和中断源。即脚和中断源。即C CT T、GATEGATE、TR0TR0、TF0TF0和和T0(P3.4)T0(P3.4)引脚、引脚、INT0(P3.2)INT0(P3.2)引脚。引脚。TH0TH0TH0TH0只可用作定时功能只可用作定时功能只可用作定时功能只可用作定时功能,占用定时器占用定时器占用定时器占用定时器T1T1T1T1的控制位的控制位的控制位的控制位TR1TR1TR1TR1和和和和T1T1T1T1的的的
15、的中断标志位中断标志位中断标志位中断标志位TF1TF1TF1TF1,其启动和关闭仅受,其启动和关闭仅受,其启动和关闭仅受,其启动和关闭仅受TRlTRlTRlTRl的控制的控制的控制的控制。定时器定时器定时器定时器T1T1T1T1无模式无模式无模式无模式3 3 3 3,可工作于方式可工作于方式0 0、1 1、2 2,但当但当但当但当T0T0T0T0工作于工作于工作于工作于方式方式方式方式3 3 3 3时时时时T1T1不能使用中断方式。不能使用中断方式。只有将只有将T1T1用做串行口的波特率发生器时,用做串行口的波特率发生器时,T0T0才工作在方式才工作在方式3 3,以便增加一个定时器。,以便增加
16、一个定时器。本讲稿第十三页,共四十二页7.4 定时计数器的应用程序设计定时计数器的应用程序设计7.4.1 7.4.1 定时器的计数初值定时器的计数初值C C的计算和装入的计算和装入 由于采用加由于采用加1 1计数,因此计数初值应为计数,因此计数初值应为负值负值。计数初值(计数初值(C C)的求法如下:)的求法如下:计数方式:计数方式:计数初值计数初值 C=C=模模-X-X(其中(其中X X为要计的脉冲个数)为要计的脉冲个数)定时方式定时方式:计数初值计数初值 C=t/MC C=t/MC补补=模模t/MCt/MC 其中其中t t t t为欲定时时间为欲定时时间为欲定时时间为欲定时时间,MCMCM
17、CMC为机器周期为机器周期为机器周期为机器周期 MC=12/foscMC=12/fosc 当采用当采用12MHZ12MHZ晶振时,晶振时,MC=1usMC=1us;当采用当采用6MHZ6MHZ晶振时,晶振时,MC=2us MC=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;M
18、OV TL0 MOV TL0,#1CH#1CH;(xxxxxx用用“0 0”填入)填入)方式方式1(161(16位方式位方式):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,#9CH本讲稿第十
19、六页,共四十二页7.4.2 定时计数器定时计数器的初始化编程的初始化编程 定时计数器的初始化编程步骤定时计数器的初始化编程步骤:1)根据)根据定时时间要求定时时间要求或或计数要求计数要求计数要求计数要求计算计数器初值;计算计数器初值;2)工作方式控制字送)工作方式控制字送TMOD寄存器;寄存器;3)送计数初值送计数初值送计数初值送计数初值的高八位和低八位到的高八位和低八位到THX和和TLX寄存寄存 器中;器中;4)启动定时(或计数),即将)启动定时(或计数),即将TRX置位。置位。如果工作于中断方式,需要置位如果工作于中断方式,需要置位EA(中断总开关)及(中断总开关)及ETX(允许定时(允许
20、定时/计数器中断)。并编中断服务程序。计数器中断)。并编中断服务程序。本讲稿第十七页,共四十二页例例例例7-17-1 如图如图7-2所示,所示,P1中接有八个发光二极管,中接有八个发光二极管,编程使八个管轮流点亮,每编程使八个管轮流点亮,每个管亮个管亮100ms100ms,设晶振为,设晶振为6MHz。7.4.3 应用编程举例应用编程举例本讲稿第十八页,共四十二页分析分析 利用利用T1T1T1T1完成完成完成完成100ms100ms100ms100ms的定时的定时的定时的定时,当,当P1P1口线输出口线输出“1 1”时,发光二极管亮,每隔时,发光二极管亮,每隔100ms100ms”1 1”左移左
21、移左移左移一次,采用定一次,采用定时方式时方式1 1,先计算计数初值:,先计算计数初值:MC=2 MC=2s s 100ms/2 100ms/2s=50000=C350H s=50000=C350H (C350HC350H)补补=10000H-C350H=3CB0H=10000H-C350H=3CB0H*用汇编语言编程用汇编语言编程*本讲稿第十九页,共四十二页查询方式如下:查询方式如下:ORG 0030H ORG 0030H MOV A MOV A,#01H;#01H;置第一个置第一个LEDLED亮亮NEXTNEXT:MOV P1MOV P1,A A MOV TMODMOV TMOD,#10H
22、#10H ;T1T1工作于定时方式工作于定时方式1 1 MOV TH1 MOV TH1,#3CH#3CH MOV TL1 MOV TL1,#0B0H#0B0H;定时定时100100ms ms SETB TR1SETB TR1SETB TR1SETB TR1 AGAI:AGAI:JBC TF1JBC TF1,SHI,SHI;100 100msms到转到转SHI,SHI,并清并清TF1TF1 SJMP AGAI SJMP AGAISHISHI:RL A RL A SJMP NEXT SJMP NEXT本讲稿第二十页,共四十二页中断方式中断方式 ORG 0000H ORG 0000H AJMP MA
23、INAJMP MAINAJMP MAINAJMP MAIN ;复位后从;复位后从0000H0000H开始执行开始执行 ORG 001BH ORG 001BH AJMP IV1AJMP IV1AJMP IV1AJMP IV1 ;转移到;转移到IV1IV1 ORG 0030H ORG 0030H ;主程序;主程序MAINMAINMAINMAIN:MOV AMOV A,#01H#01H MOV P1 MOV P1,A A ;置第一个;置第一个LEDLED亮亮 MOV TMOD MOV TMOD,#10H#10H;T1T1工作于定时方式工作于定时方式1 1 MOV TH1 MOV TH1,#3CH#3
24、CH MOV TL1 MOV TL1,#0B0H#0B0H ;定时;定时100ms100ms SETB TR1 SETB TR1 ;启动;启动T1T1工作工作 本讲稿第二十一页,共四十二页 SETB EASETB EA SETB ET1 SETB ET1 ;允许;允许T1T1中断中断WAITWAIT:SJMP WAIT SJMP WAIT ;等待中断;等待中断IV1IV1IV1IV1:RL A RL A ;中断服务程序,左移一位;中断服务程序,左移一位 MOV P1 MOV P1,A A ;下一个发光二极管亮;下一个发光二极管亮 MOV TH1 MOV TH1,#3CH#3CH MOV TL1
25、 MOV TL1,#0B0H#0B0H ;重装计数初值;重装计数初值 RETI RETI ;中断返回;中断返回中断子程序直接用中断子程序直接用中断子程序直接用中断子程序直接用A A A A操作,不好!操作,不好!操作,不好!操作,不好!*用用C C语言编程语言编程*本讲稿第二十二页,共四十二页For(;)For(;)TH1=0 x3cTH1=0 x3c;TL1=0 xb0TL1=0 xb0;/*/*装载计数初值装载计数初值*/*/do do while while(!(!TF1TF1););/*/*查询等待查询等待TF1TF1置位置位*/*/P1=1 P1=1;/*/*定时时间到,下一只定时时
26、间到,下一只LEDLED亮亮*/*/TF1=0 TF1=0;/*/*软件清软件清TF1*/TF1*/查询方式:查询方式:#include#include void main(void)void main(void)P1=0 x01;/*P1=0 x01;/*第一只第一只LEDLED亮亮*/*/TMOD=0 x10 TMOD=0 x10;/*/*定时器定时器1 1方式方式1*/1*/TR1=1 TR1=1;/*/*启动启动T/C0*/T/C0*/本讲稿第二十三页,共四十二页void main(void)void main(void)TMOD=0 x10;/*T1 TMOD=0 x10;/*T1工
27、作在定时方式工作在定时方式1*/1*/P1=0 x01;/*P1=0 x01;/*第一只第一只LEDLED亮亮*/*/TH1=0 x3c;TL1=0 xb0;/*TH1=0 x3c;TL1=0 xb0;/*预置计数初值预置计数初值*/*/EA=1;ET1=1;/*CPU EA=1;ET1=1;/*CPU开中断,允许开中断,允许T1T1中中*/*/TR1=1;/*TR1=1;/*启动启动T1T1开始定时开始定时*/*/do while(1);do while(1);/*/*等待中断等待中断*/*/中断方式:中断方式:#include#include Timer1()interrupt 3 usi
28、ng 1/*T1Timer1()interrupt 3 using 1/*T1中断服务程序中断服务程序*/*/P1=1;/*P1=1;/*下一只下一只LEDLED亮亮*/*/TH1=0 x3c;TL1=0 xb0;/*TH1=0 x3c;TL1=0 xb0;/*计数初值重载计数初值重载*/*/本讲稿第二十四页,共四十二页T0采用方式采用方式1,X=2 216161616100*103/2=3CB0H3CB0H,T1采用方式采用方式2,计数初值计数初值X=285=FBHFBH均采用查询方式,均采用查询方式,流程图和程序如下:流程图和程序如下:例例例例7-27-27-27-2 在在P1.7P1.7
29、端接一个发光二极管端接一个发光二极管LEDLED,要求利用定时控制使,要求利用定时控制使LEDLED亮一秒灭一秒亮一秒灭一秒亮一秒灭一秒亮一秒灭一秒周而复始,设周而复始,设fosc=6MHZfosc=6MHZ。解解:1616位定时最大为位定时最大为2 2 2 216161616*2us=131.072ms*2us=131.072ms*2us=131.072ms*2us=131.072ms,不够。,不够。方法方法1:1:T0T0定时定时100ms100ms100ms100ms,P1.0P1.0每次取反,周期每次取反,周期200ms200ms200ms200ms,输入输入T1T1作计数脉冲,作计数
30、脉冲,T1T1计计5 5个个脉冲正好脉冲正好1s1s。硬件扩展硬件扩展硬件扩展硬件扩展本讲稿第二十五页,共四十二页本讲稿第二十六页,共四十二页 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 TR1LOOP1LOOP1:CPL P1.7:CPL P1.7LOOP2LOOP2:MOV TH0MOV TH0,#3CH#3CH MO
31、V TL0 MOV TL0,#0B0H#0B0H SETB TR0;SETB TR0;放循环外放循环外LOOP3LOOP3:JBC TF0:JBC TF0,LOOP4LOOP4 SJMP SJMP LOOP3LOOP3LOOP4LOOP4:CPL P1.0CPL P1.0 JBC TF1JBC TF1,LOOP1LOOP1 AJMP LOOP2AJMP LOOP2 END END 程序中用程序中用JBCJBC指令指令对定时对定时/计数溢出标志位进计数溢出标志位进行检测,当标志位为行检测,当标志位为1 1时跳转并清标志时跳转并清标志。本讲稿第二十七页,共四十二页方法方法2:T0每隔每隔100ms
32、100ms中断一次中断一次中断一次中断一次,利用软件对,利用软件对T0的中断次数的中断次数进行计数,进行计数,中断中断中断中断1010次次次次即实现了即实现了1秒的定时。秒的定时。ORG 000BH ;T0中断服务程序入口中断服务程序入口 AJMP IP0AJMP 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次计数次计数 SE
33、TB TR0 SETB TR0 SJMP SJMP ;等待中断;等待中断 IP0IP0:DJNZ R4DJNZ R4,RET0RET0;用用R4R4计数不好计数不好!MOV R4 MOV 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 RETI本讲稿第二十九页,共四十二页C C C C语言实现方法语言实现方法语言实现方法语言实现方法1 1 1 1,用中断方式用中断方式用中断方式用中断方式,并用程序计算计数初
34、值并用程序计算计数初值:T0T0定时定时100ms100ms初值初值=1001000/2=50000=1001000/2=50000,即,即-50000-50000。T1T1计数计数5 5个脉冲工作于方式个脉冲工作于方式2 2,计数初值为,计数初值为-5-5#include#include sbit P1_0=P1 sbit P1_0=P10 0;sbit P1_7=P1 sbit P1_7=P17 7;timer0()interrupt 1 using 1 timer0()interrupt 1 using 1/*T0/*T0中断服务程序中断服务程序*/*/P1_0=P1_0=!P1_0P1
35、_0;/*100ms /*100ms到到P1.0P1.0取反取反*/*/TH0=-50000/256 TH0=-50000/256;/*/*重载计数初值重载计数初值*/*/TL0=-50000%256 TL0=-50000%256;timer()interrupt 3 using 2timer()interrupt 3 using 2 /*T1 /*T1中断服务中断服务*/*/P1_ P1_!P1_7;P1_7;/*1s /*1s到,灯变状态到,灯变状态*/*/本讲稿第三十页,共四十二页main()main()P1_7=0;/*P1_7=0;/*置灯初始灭置灯初始灭*/*/P1_0=P1_0=
36、;/*/*保证第一次反向便开始计数保证第一次反向便开始计数 TMOD=0 x61;/*T0 TMOD=0 x61;/*T0方式定时,方式定时,T1T1方式计数方式计数*/*/TH0=-50000/256;TL0=-50000%256;TH1=-5;TL1=-5;*预置计数初值预置计数初值*/*/IP=0 x08;/*IP=0 x08;/*置优先级寄存器置优先级寄存器*/*/EA=1;ET0=1;/*ET1=1;EA=1;ET0=1;/*ET1=1;开中断开中断*/*/TR0=1;TR1=1;/*TR0=1;TR1=1;/*启动定时计数器启动定时计数器*/*/for(;)for(;)/*/*等待
37、中断等待中断*/*/本讲稿第三十一页,共四十二页例例例例-有有P3.4引脚引脚(T0)输入一低频信号输入一低频信号输入一低频信号输入一低频信号(其小于其小于0.5kHZ),要求要求P3.4每发生一次负跳变时,每发生一次负跳变时,P1.0输出一个输出一个500us500us同步负脉冲,同步负脉冲,同时同时P1.1输出一个输出一个1ms的同步正脉冲。已知晶振频率为的同步正脉冲。已知晶振频率为6MHZ。P3.4P3.4500us500us1ms1ms定时方式定时方式计数方式计数方式 计数方式计数方式(初值(初值FFH)定时方式定时方式1ms1ms500us500usP1.0P1.0P1.1P1.1图
38、图7-57-5本讲稿第三十二页,共四十二页 解解按提意,设计方法如图按提意,设计方法如图7-57-5所示。所示。初态初态初态初态P1.1P1.1P1.1P1.1输出高电平输出高电平输出高电平输出高电平(系统复位时实现系统复位时实现系统复位时实现系统复位时实现),P1.1),P1.1),P1.1),P1.1输出低电平,输出低电平,输出低电平,输出低电平,T0T0选方式计数方式选方式计数方式(计一个脉冲,初值为计一个脉冲,初值为FFH)FFH)。当加。当加。当加。当加在在在在P3.4P3.4P3.4P3.4上的外部脉冲负跳变时,上的外部脉冲负跳变时,上的外部脉冲负跳变时,上的外部脉冲负跳变时,T0
39、T0T0T0加加加加1 1 1 1,计数器溢出,程序,计数器溢出,程序,计数器溢出,程序,计数器溢出,程序查询到查询到查询到查询到TF0TF0TF0TF0为为为为1 1 1 1,改变,改变,改变,改变T0T0T0T0为为为为500500 s s定时工作方式定时工作方式定时工作方式定时工作方式,并使,并使P1.0P1.0输出,输出,P1.1P1.1输出。输出。T0T0第一次定时第一次定时500500 s s溢出后,溢出后,溢出后,溢出后,P1.0P1.0P1.0P1.0恢复,恢复,恢复,恢复,T0T0T0T0第二次定时第二次定时第二次定时第二次定时500 s s溢出后,溢出后,P1.1P1.1恢
40、复,恢复,T0T0恢复外部脉冲计数。恢复外部脉冲计数。设定时设定时设定时设定时500500 s s的初始值为的初始值为X X,则:,则:(256(256(256(256X)210X)210X)210X)2106 6 6 6=50010=50010=50010=50010-6-6-6-6 解得解得解得解得 X=6 X=6 X=6 X=6本讲稿第三十三页,共四十二页源程序如下:源程序如下:源程序如下:源程序如下:BEGINBEGIN:MOV TMOD,#6H;:MOV TMOD,#6H;设设设设T0T0为方式外部计数为方式外部计数为方式外部计数为方式外部计数 MOV TH0,#0FFH;计数一个脉
41、冲;计数一个脉冲 MOV TL0,#0FFH MOV TL0,#0FFH CLR P1.1 CLR P1.1 ;P1.1P1.1初值为初值为初值为初值为0 0 SETB TR0 ;启动计数器;启动计数器DELL:JBC TF0,RESP1 ;检测外跳变信号;检测外跳变信号;检测外跳变信号;检测外跳变信号 AJMP DELLRESP1RESP1:CLR TR0:CLR TR0 MOV TMOD,#02H MOV TMOD,#02H ;重置;重置;重置;重置T0T0为为为为500s500s定时定时定时定时本讲稿第三十四页,共四十二页 MOV TH0,#06H MOV TH0,#06H ;重置定时初
42、值;重置定时初值;重置定时初值;重置定时初值 MOV TL0,#06H SETB P1.1 ;P1.1置置1 CLR P1.0 ;P1.0清清0 SETB TR0 ;启动定时计数器启动定时计数器DEL2:DEL2:JBC TF0,RESP2;检测第一次;检测第一次500us到否到否 AJMP DEL2 DEL2RESP:SETB P1.0 ;P1.0恢复恢复1DEL3DEL3:JBC TF0,RESP3;检测第二次检测第二次500us到否到否 AJMP DEL3RESP3:CLR P1.1 ;P1.1复复0 CLR TR0 AJMP BEGIN ;AJMP BEGIN ;思考思考思考思考:如何
43、改为中断方式如何改为中断方式如何改为中断方式如何改为中断方式?本讲稿第三十五页,共四十二页7.4.4 门控位的应用门控位的应用 GATEx=1GATEx=1时时时时,TRx=1且且INTx=1才启动定时器。才启动定时器。利用这个特性可以利用这个特性可以测量外部输入脉冲宽度测量外部输入脉冲宽度。例例7-4 利用利用T0门控位测试门控位测试 INT0引脚上出现的正脉冲宽度,引脚上出现的正脉冲宽度,设晶振设晶振12MHz,将所测得值最高位存入片内,将所测得值最高位存入片内71H单元,低单元,低位存入位存入70H单元。单元。解:设外部脉冲由解:设外部脉冲由(P3.2)输入,输入,T0工作于定时工作于定
44、时方式方式方式方式 1 1 (16位计数位计数),GATE设为设为1。测试时,应在。测试时,应在INT0低电平时,低电平时,设置设置TR0TR0为为为为1 1;当当当当INT0INT0变为高电平时,就启动计数;再次变低变为高电平时,就启动计数;再次变低变为高电平时,就启动计数;再次变低变为高电平时,就启动计数;再次变低时,停止计数时,停止计数时,停止计数时,停止计数。此计数值与机器周期的乘积即为被测正。此计数值与机器周期的乘积即为被测正脉冲的宽度。因脉冲的宽度。因fosc=12MHZ,机器周期为,机器周期为1us,测试过,测试过程如下。程如下。本讲稿第三十六页,共四十二页源程序如下:源程序如下
45、:MOV TMOD,#09H ;设设T0为方式为方式1 MOV TL0,#00H ;设计初值取最大值;设计初值取最大值 MOV TH0,#00H MOV R0,#70H JB P3.2,$;等;等P3.2(INT0)变低变低 SETB 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 ;存放结果
46、;存放结果 INC R0 MOV R0,TH0 SJMP$读者不难编出读者不难编出C语言程序。这种方案被测脉冲的宽度语言程序。这种方案被测脉冲的宽度最最大为大为65535个机器周期个机器周期。由于靠软件启动和停止计数,。由于靠软件启动和停止计数,有一定的有一定的测量误差测量误差测量误差测量误差。其可能的最大误差与指令的执行时间有。其可能的最大误差与指令的执行时间有关。关。此例中,在读取定时器的计数之前,已把它停止。但在此例中,在读取定时器的计数之前,已把它停止。但在某些情况下,不希望在读计数值时打断定时的过程,由于我某些情况下,不希望在读计数值时打断定时的过程,由于我们不可能在同一时刻读取们不
47、可能在同一时刻读取THX和和TLX的内容。读取一个时恰的内容。读取一个时恰好另一个产生溢出,在这种情况下,好另一个产生溢出,在这种情况下,读取的计数值有可能读取的计数值有可能是错的是错的。可以解决错读的方法是:。可以解决错读的方法是:本讲稿第三十八页,共四十二页 先读先读THX后读后读TLX,若两次读得的,若两次读得的THx没没有发生变化,则可确定读到的内容是正确的。有发生变化,则可确定读到的内容是正确的。若前后两次读到的若前后两次读到的THx有变化,则再重复上述有变化,则再重复上述过程,重复读到的内容就应该是正确的了。下过程,重复读到的内容就应该是正确的了。下面是按此面是按此思路编写的程序段
48、,读到的思路编写的程序段,读到的TH0 和和TL0放在放在R1和和R0内:内:RP:MOV A,TH0;MOV R0,TL0;CJNE A,TH0,RP;MOV R1,A本讲稿第三十九页,共四十二页7 6 小小 结结 定时计数器应用非常广泛定时计数器应用非常广泛,如定时采样、,如定时采样、时间测量、产生音响、作脉冲源、制作日时间测量、产生音响、作脉冲源、制作日历时钟、测量波形的频率和占空比、检测历时钟、测量波形的频率和占空比、检测电机转速等。因此应很好掌握。电机转速等。因此应很好掌握。51系列单片机有系列单片机有两个两个16位位的定时计数器,的定时计数器,有有四种四种不同的工作不同的工作方式方
49、式,归纳于下表:归纳于下表:本讲稿第四十页,共四十二页28=256=100H28=256=100H216=65536=10000H213=8192=2000H 模模 值值 (计数最大值计数最大值)TL0定时,计数定时,计数占用占用TR0、TF0;TH0定时,使用定时,使用T1 的的TR1、TF1此时此时T1作波特率作波特率发生器发生器定时、计数范围定时、计数范围小,不用重装时小,不用重装时间常数,多用于间常数,多用于串行通信的波特串行通信的波特率发生器率发生器用于用于定时时间定时时间 65.5ms,计数脉冲计数脉冲 65536 个个场合场合用于用于定时时间定时时间 8.19ms,计数脉冲计数脉
50、冲 8192 个个场合场合 应用场合应用场合(设设fosc12MHz)同方式同方式0、1第一次装入第一次装入,启启动工作后动工作后,每次每次TL回零后回零后,不用不用程序装入程序装入,由由TH自动装入到自动装入到TL每启动一次工作每启动一次工作,需装入一需装入一次计数初值次计数初值 同左同左 TH TL高八位高八位 TH低八位低八位 TL高八位高八位 TH低五位低五位 TL 计数初值计数初值C的装入的装入方式方式 3 3T0T0两个两个8 8位位 方式方式方式方式 2 28 8位自动位自动重装方式重装方式方式方式 116位定时位定时计数方式计数方式 方式方式 013位定时位定时计数方式计数方式