1、第5章-MCS-51的定时器计数器.5.1 5.1 定时定时/计数器计数器的结构的结构图图4.4 4.4 定时定时/计数器的结构框图计数器的结构框图 5.2 5.2 定时定时/计数器计数器的功能的功能pT0 T0 和和 T1 T1n增量增量式、式、下降沿下降沿计数计数n各位各位全都为全都为 1 1 时,再输入一个脉冲时,再输入一个脉冲p溢出溢出回零回零pTF0TF0 或或 TF1 TF1 置位置位,发中断申请发中断申请p定时与计数的不同:定时与计数的不同:时钟脉冲信号时钟脉冲信号n定时,定时,内内部的时钟振荡器部的时钟振荡器n计数,计数,外外部引脚部引脚1.1.计数功能计数功能p原理原理n对对
2、外部外部事件事件计数计数p计数脉冲计数脉冲来自引脚来自引脚 T0(P3.4)T0(P3.4)或或 T1(P3.5)T1(P3.5)负跳变负跳变(由由1 1变成变成0)0)时时,计数值,计数值 增加增加 1p对外部输入脉冲的要求对外部输入脉冲的要求n被采样的电平被采样的电平至少至少要维持要维持一个机器周期一个机器周期,否则会否则会漏计数漏计数n最高计数频率:晶振频率的最高计数频率:晶振频率的1/241/242.2.定时功能定时功能p原理原理n通过通过计数计数实现实现p计数脉冲计数脉冲内部内部时钟脉冲时钟脉冲p每个机器周期,计数值每个机器周期,计数值 加加 1 1p定时时间定时时间计数值计数值机器
3、周期机器周期5.3 5.3 定时定时/计数器计数器的工作方式和控制寄存器的工作方式和控制寄存器p1.1.方式寄存器方式寄存器 TMODTMODp2.2.控制寄存器控制寄存器 TCONTCON位位D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0字节地址字节地址TMODTMODGATEGATE C/TC/TM1M1M0M0GATEGATEC/TC/TM1M1M0M089H 89H 位位D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0字节地址字节地址TCONTCONTF1TF1TR1TR1TF0TF0 TR0TR0 IE1IE1IT1IT1IE0IE0IT0IT088
4、H88H不可位寻址不可位寻址可位寻址可位寻址1.1.方式寄存器方式寄存器 TMODTMOD位位D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0字节地址字节地址TMODTMOD GATEGATEC/TC/TM1M1 M0M0GATEGATEC/TC/TM1M1M0M089H 89H 表表4.2 4.2 定时定时/计数器工作方式设置表计数器工作方式设置表 M1 M0M1 M0工作方式工作方式功能说明功能说明0 00 00 01313位位定时器定时器/计数器计数器(TH(TH的的8 8位和位和TLTL的低的低5 5位位)0 10 11 11616位位定时器定时器/计数器计数器1 01
5、 02 2自动重装入初值自动重装入初值的的 8 8位位 定时器定时器/计数器计数器 1 11 13 3T0 T0 分成分成两个两个独立独立的的 8 8位位 定时器定时器/计数器计数器T1 T1 在在 方式方式3 3 时时 停止工作停止工作 T1T0pC/T C/T 定时器方式或计数器方式选择位定时器方式或计数器方式选择位nC/T=1C/T=1,计数器,计数器nC/T=0C/T=0,定时器,定时器pGATE GATE 门控标志位门控标志位nGATE=1GATE=1pTR0/TR1=1TR0/TR1=1且且/INT0(/INT0(或或/INT1)/INT1)高电平高电平,才才工作工作用于测量用于测
6、量/INT0(/INT0(或或/INT1)/INT1)端出现的端出现的正正脉冲脉冲的的宽度宽度nGATE=0GATE=0pTR0/TR1=1TR0/TR1=1,就就工作工作2.2.控制寄存器控制寄存器 TCONTCON位位D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0字节地址字节地址TCONTCONTF1TF1TR1TR1TF0TF0 TR0TR0IE1IE1 IT1IT1 IE0IE0IT0IT088H88HpTF0TF0/TF1 TF1 溢出标志位溢出标志位n计满溢出计满溢出时,由时,由硬件硬件置置 1 1n中断响应后,中断响应后,硬件自动清硬件自动清 0 0pTR1/T
7、R0 TR1/TR0 运行控制位运行控制位n软件软件置置 1 1 后,开始工作后,开始工作n系统复位时,清系统复位时,清 0 0 查询方式时,查询方式时,查询方式时,查询方式时,此位可作状态查询此位可作状态查询此位可作状态查询此位可作状态查询注意:注意:注意:注意:查询后,由软件清查询后,由软件清查询后,由软件清查询后,由软件清0 0 0 05.4 5.4 定时定时/计数器计数器的的4 4种工作方式种工作方式pT0T0n4 4种:方式种:方式0 0、1 1、2 2、3 3pT1T1n3 3种:方式种:方式0 0、1 1、2 2p设置为设置为方式方式3 3,将,将停止停止工作工作n作为串行通信口
8、的作为串行通信口的波特率发生器(方式波特率发生器(方式2 2)1.1.方式方式 0 0pTMODTMOD的的M1M0M1M0为为0000p1313位计数:位计数:TL0TL0的的低低5 5位位(高(高3 3位未用)位未用)TH0 TH0的的8 8位位nTL0TL0的低的低5 5位溢出时,向位溢出时,向TH0TH0进位进位nTH0TH0溢出时,置位溢出时,置位TCONTCON中的中的TF0TF0标志,发出标志,发出中断请求中断请求p计数计数个数个数MM与计数与计数初值初值NNnM=2M=21313N Np2 21313:溢出时的计数值:溢出时的计数值p定时时间定时时间 t tnt=Mt=M机器周
9、期机器周期=(2=(21313N)N)机器周期机器周期nN=2N=21313-t/-t/机器周期机器周期p计数初值计数初值 N=8191 N=81910 0p计数范围:计数范围:1 1819281922.2.方式方式 1 1pTMODTMOD的的M1M0M1M0为为0101n1616位:位:TL0 TL0 TH0 TH0p计数个数计数个数M M与计数初值与计数初值N N:M M2 21616N Nn定时时间定时时间 t=M t=M机器周期机器周期n计数初值计数初值 N=65535 N=655350 0;计数范围:;计数范围:1 165536655363.3.方式方式 2 2pTMODTMOD的
10、的M1M0M1M0为为1010n自动重装初值的自动重装初值的8 8位位计数方式:计数方式:pTL0TL0:8 8位定时位定时/计数器;计数器;TH0TH0:8 8位位初值寄存器初值寄存器p计数个数计数个数M M与计数初值与计数初值N N:M M2 28 8N Nn定时时间定时时间 t=M t=M机器周期机器周期n计数初值计数初值 N=255 N=2550 0;计数范围:;计数范围:1 1256256较精确的较精确的脉冲信号发生器脉冲信号发生器T1T1在在方式方式2 2,作为,作为波特率发生器波特率发生器定时器定时器/计数器计数器 的的 初值计算初值计算p设设n计数器计数的计数器计数的最大值:最
11、大值:M Mn计数值:计数值:N Nn初值:初值:X XpX X的计算方法的计算方法 n计数状态:计数状态:X=M X=M N Nn定时状态:定时状态:X=M X=M 定时时间定时时间/T/TpT=12 T=12 晶振频率晶振频率4.4.方式方式 3 3pTMODTMOD的的M1M0M1M0为为11 11n只适用于只适用于T0T0nT0T0分成为两个独立的分成为两个独立的8 8位计数器位计数器pTL0TL0、TH0TH0pTL0TL0:定时器和计数器:定时器和计数器n占用占用T0T0的控制位的控制位pTH0TH0:定时器定时器n仅仅借用借用T1T1的的 TR1 TR1、TF1TF1n不受门控;
12、不受门控;启、停受启、停受TR1TR1控制控制n溢出时,置位溢出时,置位 TF1TF1pT1T1:n只能作定时器只能作定时器,波特率发生器波特率发生器n原则上,仍可按方式原则上,仍可按方式0 0、1 1、2 2工作工作n不能使用不能使用TR1TR1和和TF1TF1,也,也不能不能发出发出中断请求中断请求n方式设定后,自动运行;要方式设定后,自动运行;要停止工作停止工作,只需,只需设设定为方式定为方式3 3nT1T1溢出判断溢出判断p通过在线通过在线“飞读飞读”TH1”TH1和和TL1TL1,判断是否溢出。,判断是否溢出。p串行通信应用中串行通信应用中nT1T1:串行口波特率发生器,工作于方式:
13、串行口波特率发生器,工作于方式2 2nT0T0:工作于方式:工作于方式3 3n可充分利用单片机的定时可充分利用单片机的定时/计数器资源。计数器资源。5.5 5.5 定时定时/计数器计数器的设计举例的设计举例p5151单片机的定时单片机的定时/计数器,常工作于计数器,常工作于中断中断场合场合p应用设计步骤应用设计步骤n(1)(1)计算定时计算定时/计数器的初值计数器的初值n(2)(2)主程序中,初始化主程序中,初始化p定时定时/计数器的初始化计数器的初始化p中断初始化中断初始化TH0TH0、TL0TL0、TH1TH1、TL1TL1、TMODTMOD、TCONTCON、IPIP、IEIEn(3)(
14、3)中断服务程序设计中断服务程序设计 例例11方式方式1 1p利用定时利用定时/计数器计数器T0T0的方式的方式1 1,产生一个,产生一个50Hz50Hz的方波,此方的方波,此方波由波由P1.0P1.0引脚输出,晶振频率为引脚输出,晶振频率为12 MHz12 MHz。p思路:思路:nf=50Hzf=50Hz,则其周期为,则其周期为T=1/50=0.02sT=1/50=0.02sn计满计满0.01s0.01s,P1.0P1.0输出输出0 0,再计满,再计满0.01S0.01S,P1.0P1.0输出输出1 1pT0T0产生产生0.01s0.01s定时定时实现方法实现方法查询方式:查查询方式:查TF
15、0TF0标志标志中断方式:中断服务程序中断方式:中断服务程序p解题步骤解题步骤n(1)(1)定时定时 0.01s 0.01s的初值计算的初值计算p机器周期机器周期=12 12 MHz=1 s=12 12 MHz=1 sp0.01s0.01s内内 T0 T0 需要计数需要计数 N N 次次 N=0.01s 1 s=0.01/(10N=0.01s 1 s=0.01/(10-6-6)=10000)=10000 p若用若用方式方式1 1的的16 16 位计数器位计数器,T0,T0 的初值的初值X X为为 X=MX=MN=2N=2161610000=5553610000=55536n(2)T0(2)T0
16、的的TMODTMOD的初始化的初始化pGATE=0GATE=0,C/T=0C/T=0,M1M0=01,M1M0=01,即:即:T0T0的方式的方式1 1n(3)(3)实现方法实现方法p查询的方法和中断的方法查询的方法和中断的方法实现方法实现方法p(1)(1)查询方式查询方式n查询查询T0T0的的TF0TF0:为:为1 1,定时时间到,对,定时时间到,对P1.0P1.0取反操作取反操作n缺点:占用缺点:占用CPUCPUORG0000HLJMPMAIN;跳转到主程序;跳转到主程序ORG0100H ;主程序;主程序MAIN:MOVTMOD,#01H;置;置T0工作于方式工作于方式1LOOP:MOVT
17、H0,#0D8H;装入计数初值;装入计数初值MOVTL0,#0F0H SETBTR0;启动定时器;启动定时器T0JNBTF0,$;TF0=0,定时,定时时间未到时间未到,等待等待CLRTF0 ;TF0=1,定时时间到,清,定时时间到,清TF0CPLP1.0 ;P1.0取反输出取反输出SJMPLOOP ENDp(2)(2)中断方式中断方式p定时到,定时到,TF0=1TF0=1,向,向CPUCPU申请中断,申请中断,CPUCPU响应中断后,执响应中断后,执行中断程序,中断程序中对行中断程序,中断程序中对P1.0P1.0取反操作取反操作ORG0000HLJMPMAIN;跳转到主程序跳转到主程序 OR
18、G000BH;T0的中断入口地址的中断入口地址LJMPT0_INT;转向中断服务程序转向中断服务程序 ORG0100HMAIN:MOVTMOD,#01H;置置T0工作于方式工作于方式1MOVTH0,#0D8H;装入计数初值装入计数初值MOVTL0,#0F0H SETBET0;T0开中断开中断SETBEA;CPU开中断开中断SETBTR0;启动启动T0;继续执行主程序其它部分继续执行主程序其它部分SJMP$;等待中断等待中断T0_INT:;P1.0取反输出取反输出CPL P1.0 ;重装入计数初值重装入计数初值MOV TH0,#0D8H MOV TL0,#0F0H ;中断返回中断返回RETIEN
19、DT0_INT:;重装入计数初值重装入计数初值MOV TH0,#0D8H MOV TL0,#0F0H;P1.0取反输出取反输出CPL P1.0;中断返回中断返回RETIEND 例例22方式方式1 1p利用定时利用定时/计数器计数器T1T1产生一个产生一个1Hz1Hz的方波,此方波的方波,此方波由由P0.0P0.0引脚输出,晶振频率为引脚输出,晶振频率为6MHz6MHzp思路:思路:pf=1Hzf=1Hz,T=1sT=1sn此题转化为此题转化为p由定时器产生:由定时器产生:0.5s 0.5s 定时定时机器周期机器周期=12/6MHz=2*10=12/6MHz=2*10-6-6s s65536*2
20、*1065536*2*10-6-6 s=0.131072s=131072ss=0.131072s=131072sp0.5s0.5s定时,实现方法定时,实现方法nT1T1:方式方式1 1p完成完成100ms100ms定时定时p在中断程序里设置一个在中断程序里设置一个“软时钟软时钟”,即一个,即一个CLOCK=30HCLOCK=30H内存单元内存单元每中断一次,每中断一次,CLOCKCLOCK加加1 1,CLOCKCLOCK累计累计5 5次次(即(即0.5s0.5s),对),对P0.0P0.0取反操作取反操作解题步骤:解题步骤:p(1)(1)确定初值确定初值N Np计数值计数值 M Mt/Tcy
21、t/Tcy 1001010010-3-3/(210/(210-6-6)5000050000N N2 21616M M6553665536500005000015536=3CB0H15536=3CB0Hp即应将即应将3CH3CH送入送入TH1TH1、0B00B0送入送入TL1TL1中。中。p(2)(2)初始化控制字初始化控制字TMODTMODnGATE=0GATE=0,C/T=0C/T=0,M1M0=01M1M0=01,即:,即:T1T1的方式的方式1 1;实现程序:实现程序:;*伪指令伪指令*LED BITP0.0CLOCKDATA30H;*主程序入口地址主程序入口地址*ORG0000HLJM
22、PMAIN;跳转至主程序跳转至主程序;*中断入口地址中断入口地址*ORG001BHLJMPT1_INT;跳转至跳转至T1中断服务程序中断服务程序ORG 0030HMAIN:;*中断初始化中断初始化*MOV TMOD,#10HMOV TH1,#3CH;装入计数初值装入计数初值MOV TL1,#0B0H SETB ET1;开放开放T1中断中断SETB EA;开放总中断开放总中断SETB TR1;启动启动T1时钟时钟;继续执行主程序其它部分继续执行主程序其它部分SJMP$;等待中断等待中断;*T1中断服务程序中断服务程序*T1_INT:PUSHACC;保护现场保护现场PUSHPSWCLRTR1MOV
23、 TH1,#3CH;重新装入计数初值重新装入计数初值MOV TL1,#0B0H SETBTR1INCCLOCK;软时钟加软时钟加1MOVA,CLOCKCJNEA,#5,TMPLTMPL:JCRETURN;不到不到0.5s返回返回CPLLED;到到0.5s闪烁变换闪烁变换MOVCLOCK,#0;软时钟清零软时钟清零RETURN:POPPSWPOPACC RETIEND 例例33方式方式2 2p利用定时利用定时/计数器计数器T0T0产生一个产生一个1kHz1kHz的方波,此方波的方波,此方波由由P0.0P0.0引脚输出,晶振频率为引脚输出,晶振频率为6MHz6MHzn机器周期机器周期=12/6MH
24、z=2*10=12/6MHz=2*10-6-6s sp思路:思路:pf=1kHzf=1kHz,T=1msT=1msn此题转化为此题转化为p由定时器产生:由定时器产生:500s 500s 定时定时p500s500s定时,实现方法定时,实现方法nT0T0:方式方式2 2p即自动重装初值的即自动重装初值的8 8位计数位计数方式方式p开放开放T0T0中断,在中断程序里对中断,在中断程序里对P0.0P0.0取反取反操作操作解题步骤:解题步骤:p(1)(1)计数初值计数初值N Np计数值计数值 M Mt/Tcy t/Tcy 5001050010-6-6/(210/(210-6-6)250250N N2 2
25、8 8M M25625625025006H06Hp06H06H送入送入TH0TH0和和TL0TL0p(2)(2)初始化控制字初始化控制字TMODTMODnGATE=0GATE=0,C/T=0C/T=0,M1M0=10M1M0=10,即:,即:T0T0的方式的方式2 2;实现程序:实现程序:;*伪指令伪指令*LED BITP0.0;*主程序入口地址主程序入口地址*ORG0000HLJMPMAIN;跳转至主程序跳转至主程序;*中断入口地址中断入口地址*ORG00BHLJMPT0_INT;跳转至跳转至T1中断服务程序中断服务程序ORG 0100HMAIN:;*中断初始化中断初始化*MOV TMOD,
26、#02HMOV TH0,#06H;装入计数初值装入计数初值MOV TL0,#06H SETB ET0;开放开放T0中断中断SETB EA;开放总中断开放总中断SETB TR0;启动启动T0时钟时钟;继续执行主程序其它部分继续执行主程序其它部分SJMP$;等待中断等待中断;*T0中断服务程序中断服务程序*T0_INT:CPLLED;不需重新装入计数初值不需重新装入计数初值RETIEND定时定时/计数器门控位计数器门控位GATE的应用的应用p当当GATE=0GATE=0时时n定时定时/计数器的运行计数器的运行只只受控于:受控于:TR0(或或TR1)p当当GATE=1GATE=1时时n定时定时/计数
27、器的运行受控于:计数器的运行受控于:pTR0(和和TR1)和和INT0(或或INT1)在在TR0=1(或或TR1=1)时时若若INT0=1(或或INT1=1),则,则启动启动计数;计数;若若INT0=0(或或INT1=0),则,则停止停止计数。计数。可以利用这一点可以利用这一点测试测试外部外部输入脉冲输入脉冲的的宽度。宽度。例例4GATE=4GATE=1p利用利用T0T0的门控位的门控位GATEGATE,编程实现检测外部输入脉,编程实现检测外部输入脉冲的宽度。冲的宽度。/INT0(P3.2)TMOD=#09HTH0=TL0=#00h等待等待INT0INT0变变低低电平电平后后TR0=1TR0=
28、1T0T0开始开始计时计时计时开始计时开始计时停止计时停止T0T0停止停止计时计时源程序:源程序:ORG 00hMOV TMOD,#09H;设置设置 T0 为方式为方式 1,定时方式工作,定时方式工作,;GATE=1MOV TL0,#00H;设计数初值为设计数初值为0MOV TH0,#00HMOV R0,#30H;地址指针送地址指针送R0JBP3.2,$;等待等待INT0变低变低SETB TR0;启动定时器启动定时器JNBP3.2,$;等待等待INT0变高变高电平电平JBP3.2,$;启动计数,并等待启动计数,并等待INT0再次变低再次变低CLRTR0;停止计数器停止计数器MOV R0,TL0
29、;读取计数值读取计数值INCR0MOV R0,TH0;读取计数值读取计数值SJMP$END寻找待测脉冲的寻找待测脉冲的下降沿下降沿p不足:不足:n如果机器周期为如果机器周期为1/12MHZ,则这种方法的,则这种方法的最大最大被测脉冲宽度被测脉冲宽度为为65.536微秒微秒n由于靠软件启动和停止计数,有一定的由于靠软件启动和停止计数,有一定的测量误测量误差,差,其中最大可能的误差由指令的时序确定。其中最大可能的误差由指令的时序确定。ORG 0000HLJMP MAINORG 000BH LJMP DVT0ORG 0030H MAIN:.CLRR1.DVT0:INCR1RETI定时定时/计数器用于
30、计数器用于外部外部中断扩展中断扩展p扩展方法扩展方法n将定时将定时/计数器设置为计数器设置为计数器计数器方式方式p计数初值设定为计数初值设定为满程满程n将待扩展的将待扩展的外部中断源外部中断源接到定时接到定时/计数器的计数器的外部外部计数引脚计数引脚p从该引脚输入一个下降沿信号,计数器从该引脚输入一个下降沿信号,计数器加加1 1后便产生后便产生定时定时/计数器溢出计数器溢出中断中断。例例5 5 定时定时/计数器扩展计数器扩展外部外部中断中断p利用利用T0T0扩展一个外部中断源扩展一个外部中断源n步骤步骤p将将T0T0设置为计数器方式,按设置为计数器方式,按方式方式2工作工作pTH0TH0、TL
31、0TL0的初值均为的初值均为0FFHpT0T0允许中断,允许中断,CPUCPU开放中断开放中断p初始化程序初始化程序MOV TMOD,#06H;置置T0为计数器方式为计数器方式2MOV TL0,#0FFH;置计数初值置计数初值MOV TH0,#0FFHSETB EA;CPU开中断开中断SETB ET0;允许允许T0中断中断SETB TR0;启动启动T0工作工作 例例6 6 定时定时/计数器对外部事件计数器对外部事件计数计数p利用利用T1T1对外部事件计数对外部事件计数n要求要求p计计10001000个脉冲后,点亮指示灯个脉冲后,点亮指示灯指示灯指示灯低电平点亮低电平点亮p晶振频率为晶振频率为1
32、2MHz12MHz解题步骤:解题步骤:p计数方式计数方式n计数初值计数初值N Np计数值计数值 M M10001000N N2 21616M M655366553610001000FC18HFC18HpGATE=0GATE=0,C/T=1C/T=1,M1M0=01M1M0=01ledledbit P1.0bit P1.0;红灯红灯orgorg00h00h;主程序入口主程序入口ljmpljmpmainmainorgorg001Bh001Bh;定时器定时器 1 1 中断入口地址中断入口地址ljmpljmpi_t1i_t1orgorg030h030hmain:main:setbsetbled_red
33、led_red;点亮红灯点亮红灯movmovtmod,#51htmod,#51h;T1;T1 工作在方式工作在方式 1 1,用于计数,用于计数movmovTH1,#0FChTH1,#0FCh;设定时器初值设定时器初值movmovTL1,#018hTL1,#018h;设定时器初值设定时器初值setbsetbet1et1;中断中断 T1 T1 允许允许setbsetbeaea;总中断允许总中断允许setbsetbTR1TR1;定时器定时器 T1 T1 开始计数开始计数sjmpsjmp$;等待中断等待中断i_t1:i_t1:clrclrledledclrclrTR1TR1;定时器定时器 T1 T1 计数计数 停止停止 retireti;中断返回中断返回endend小结小结p两个两个T/CT/Cp定时定时/计数计数p四种工作方式:重点是四种工作方式:重点是方式方式1 1、2 2p两个控制寄存器:两个控制寄存器:TMODTMOD、TCONTCONp初值的计算初值的计算p典型应用典型应用p作业:作业:P123P123:5.85.8、5.95.9、5.105.10此课件下载可自行编辑修改,仅供参考!此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢感谢您的支持,我们努力做得更好!谢谢