单片机定时器计数器精选PPT.ppt
单片机定时器计数器单片机定时器计数器1第1页,此课件共76页哦第一节 概述 回回忆忆8051结结构构特特点点:由由单单一一内内部部总总线线连连接接各各功功能能模模块块,通通过过特特殊殊功功能能寄寄存存器器(SFR)集集中中控控制制。嵌嵌入入式式结结构构,不不同同型型号号引引脚脚定定义义和和SFR定定义义有有所所不不同同,因因此此,从从两两个个方方面面来来认认识识和和掌掌握某一个功能模块。握某一个功能模块。相关引脚功能相关引脚功能相关相关SFR功能功能2第2页,此课件共76页哦第3页,此课件共76页哦n两个两个16位定时计数器,最大计数范围:位定时计数器,最大计数范围:0000-FFFFH。n相关的相关的SFR:TMOD、TCON、TH0、TL0、TH1、TL1。n相关引脚:相关引脚:T0、T1、INT0、INT1。n4种工作方式。种工作方式。8051定时器定时器/计数器概况计数器概况4第4页,此课件共76页哦T0、T1相关引脚相关引脚T0、T1:计数脉冲输入,定计数脉冲输入,定时方式时不用,作时方式时不用,作I/OINT0、INT1:与定时器运行与定时器运行控制有关,也可以无关,可控制有关,也可以无关,可编程设定编程设定5第5页,此课件共76页哦T0、T1相关相关SFR6第6页,此课件共76页哦定时器定时器/计数器原理计数器原理7第7页,此课件共76页哦定时功能:对固定频率的机器周期计数定时功能:对固定频率的机器周期计数,每个机器周期定时器加每个机器周期定时器加1,计数速率计数速率=Fosc/12计计数数功功能能:对对外外部部引引脚脚(T0和和T1)上上的的负负跳跳变变计计数数,每每产产生生 一一个个负负跳跳变变,计计数数器器加加1,要要求求高高低低电电平平均均要要大大 于于1Tm,计数速率计数速率Fosc/248第8页,此课件共76页哦以以N N位计数器构为核心,要解决以下问题:位计数器构为核心,要解决以下问题:(1 1)、何时控制启动、停止计数?)、何时控制启动、停止计数?(2 2)、如何控制定时还是计数?)、如何控制定时还是计数?(3 3)、如何控制定时)、如何控制定时/计数的长短?计数的长短?(4 4)、如何用查询或中断管理溢出事件?)、如何用查询或中断管理溢出事件?9第9页,此课件共76页哦nGATE 选通门选通门:GATE=0时时,只要只要TRx=1,计数器就开始工作;计数器就开始工作;GATE=1时时,只有只有INTx脚和脚和TRx同时为同时为“1”时时,计数器才开始计数器才开始工作工作.主要用于测量主要用于测量INTx脚上高电平脉冲的宽度脚上高电平脉冲的宽度.nC/T 计数计数/定时方式选择位定时方式选择位:C/T=1时时,计数方式计数方式.即计数器的计数即计数器的计数脉冲来自脉冲来自T0或或T1引脚的外部事件引脚的外部事件.C/T=0时时:定时方式定时方式,计数脉冲来计数脉冲来自内部振荡频率自内部振荡频率fosc的的12分频分频.模式寄存器模式寄存器TMOD(SFR的地址的地址:89H,不可按位寻址不可按位寻址)10第10页,此课件共76页哦nM1、M0 模式选择模式选择:分别对应四种模式分别对应四种模式.nM1 M0=00,方式方式0:13位定时计数器位定时计数器nM1 M0=01,方式方式1:16位定时计数器位定时计数器nM1 M0=10,方式方式2:自动重装入的自动重装入的8位定时计数器位定时计数器nM1 M0=11,方式方式3:T0成为两个独立的成为两个独立的8位计数器位计数器11第11页,此课件共76页哦T=(M-TC)t T=(M-TC)t 其其中中,T:T:定定时时时时间间,M:M:计计数数器器的的模模,TC:TC:计计数数初初值值,t:t:计数器计数脉冲的周期(对于定时方式计数器计数脉冲的周期(对于定时方式t=fosc/12)t=fosc/12)。定时定时/计数器计数器4 4种模式比较种模式比较12第12页,此课件共76页哦nTF1,TF0 定定时时器器T1,T0的的溢溢出出标标志志:计计数数器器溢溢出出时时硬硬件件自自动动置置位位,即即TFx=1,进入中断后再由硬件自动清除进入中断后再由硬件自动清除;nTR1,TR0 计计数数器器T1,T0的的控控制制位位:由由软软件件置置位位(计计数数器器开开始始工工作作)或或清零清零(计数器停止工作计数器停止工作).nIE1,IE0 外外部部中中断断INT1,INT0的的请请求求标标志志:当当单单片片机机检检测测到到INTx引脚上有低电平或下降沿时引脚上有低电平或下降沿时,IEx=1,申请中断申请中断.nIT1,IT0 外外中中断断触触发发类类型型控控制制:ITx=1时时,外外中中断断信信号号的的下下降降沿沿触触发发IEx标志标志,ITx=0时时,外中断信号的低电平触发外中断信号的低电平触发IEx标志标志.控制寄存器控制寄存器TCON(SFRTCON(SFR地址地址:88:88H)H)(LSB)(MSB)13第13页,此课件共76页哦n第一节第一节 概述概述n第二节第二节 模式模式0、模式、模式1及其应用及其应用n第三节第三节 模式模式2及其应用及其应用n第四节第四节 模式模式3及其应用及其应用n第五节第五节 定时器定时器/计数器计数器214第14页,此课件共76页哦Timer/Counter 0/1 Mode 0:13-Bit Counter(Timer 1 shown)15第15页,此课件共76页哦Timer/Counter 0/1 Mode 1:16-Bit Counter(Timer 0 shown)16第16页,此课件共76页哦1、设置设置GATE=0,则则GATE=1,因此因此Y=TR0,这样:这样:TR0=1;启动定时器启动定时器T0运行运行 TR0=0;停止定时器停止定时器T0运行运行我们把这种控制定时器运行的方法叫软触发,最常用。我们把这种控制定时器运行的方法叫软触发,最常用。2、设置设置GATE=1,则则GATE=0,因此因此Y=TR0*INT0电平,电平,进一步令进一步令TR0=1,则则Y=INT0电平,电平,这样:这样:INT0为高电平,启动定时器为高电平,启动定时器T0运行运行 INT0为低电平,停止定时器为低电平,停止定时器T0运行运行我我们们把把这这种种控控制制定定时时器器运运行行的的方方法法叫叫硬硬触触发发,较较少少用用,可可以以用用来来测测量量正脉冲的宽度。正脉冲的宽度。定时器定时器/计数器运行控制方法计数器运行控制方法17第17页,此课件共76页哦n根根据据要要求求给给方方式式寄寄存存器器TMOD送送一一个个方方式式控控制制字字,以以设设定定定定时时器器的的工工作作方方式式;(要要考考虑虑定定时时/计计数数范范围围,重重装装方方式式)n根根据据需需要要给给C/T送送初初值值以以确确定定需需要要的的定定时时时时间间或或计计数数次次数数;(可选,缺省为(可选,缺省为0000)n根根据据需需要要给给中中断断允允许许寄寄存存器器IE送送中中断断控控制制字字,以以开开放放相相应应的中断和设定中断优先级;(可选)的中断和设定中断优先级;(可选)n给给TCON送命令字以启动或禁止送命令字以启动或禁止C/T的运行。的运行。定时器定时器/计数器的初始化方法计数器的初始化方法 18第18页,此课件共76页哦n计数器初值:计数器初值:n设设计计数数模模值值为为M,计计数数初初值值设设定定为为TC,计计数数器器计计满满为为零零所所需需的的计计数数值值为为C,则则:TC=M-C (M=213,216,28)n定时器初值:定时器初值:nT=(M-TC)Tm,T为需要定时时间为需要定时时间 初值初值TC=M-T/Tmn当当定定时时或或计计数数范范围围大大于于某某一一模模式式下下的的计计数数范范围围时时,要要用用软件对溢出计数,以增加定时或计数的范围。软件对溢出计数,以增加定时或计数的范围。初值的计算初值的计算19第19页,此课件共76页哦例例:Fosc=12MHz,试计算定时时间试计算定时时间2ms所需的定时器的初值所需的定时器的初值.n方方式式2、方方式式3 TMAX=0.256ms,所所以以必必须须将将工工作作方方式式设在方式设在方式0或方式或方式1n方式方式0:TC=213-2ms/1us=6192=1830H TL0=10H,TH0=0C1H注注意意1830H到到TH0、TL0的的重重新新表表达达,主主要要是是由由于于TL0已经不是每已经不是每256进进1,而是每而是每32进进1n方式方式1:TC=216-2ms/1us=63536=0F830H TL0=30H,TH0=0F8H20第20页,此课件共76页哦n采采用用查查询询方方式式:程程序序一一直直检检测测TF0(或或TF1),若若TF01(或或TF1=1),说说明明定定时时时时间间到到或或计计满满数数,从从而而开开始始相相应应处理,如:处理,如:while(TF0=0);/while(!TF0);TF0=0;/清除标志位清除标志位 /开始处理溢出事件开始处理溢出事件 n采采用用中中断断方方式式:程程序序初初始始化化时时,设设置置定定时时器器溢溢出出中中断断允允许许后后,内内部部硬硬件件自自动动检检测测到到TF01(或或TF1=1)时时,自自动动响响应应中断,进入中断服务程序。中断,进入中断服务程序。CPU控制控制C/T的方式的方式21第21页,此课件共76页哦例例1:在在P1.7引引脚脚上上输输出出50Hz的的方方波,已知波,已知Fosc=12MHz。22第22页,此课件共76页哦解决定时器解决定时器/计数器应用问题的一般流程计数器应用问题的一般流程 确定定时确定定时/计数对象计数对象 C/T初始化初始化 工作模式工作模式 计算初值计算初值 中断或查询中断或查询 启动启动C/T运行运行 编程实现编程实现23第23页,此课件共76页哦1、确定定时对象、确定定时对象:20ms 或或 10ms?应当为应当为10ms,便于产生方波:每隔便于产生方波:每隔10ms引脚电平取反。引脚电平取反。2、Fosc=12MHz,1Tm=1us,产产生生10ms定定时时,应应选选择择模模式式0、1、2、3?应选择模式应选择模式1,16位定时器,最大范围位定时器,最大范围65.536ms。分析分析:50Hz的方波,周期为的方波,周期为1/50=20ms24第24页,此课件共76页哦3、计算初值、计算初值 TC=65536-10ms/1us=55536=0D8F0H分析分析:50Hz的方波,周期为的方波,周期为1/50=20ms25第25页,此课件共76页哦编程实现(查询方式)编程实现(查询方式)#include/要用到要用到SFRsbit SQW=P17;/*定义输出方波引脚定义输出方波引脚*/main()TMOD=0 x01;/*T0 模式模式1,定时,定时,GATE=0*/TR0=1;/*启动启动 T0 运行运行*/while(1)/*无限循环作为无限循环作为main的结束的结束*/TH0=0 xD8;TL0=0 xF0;/*每次要重新赋每次要重新赋10ms 定时的初值定时的初值*/while(!TF0);TF0=0;/*查询等查询等10ms时间到,并清除标志时间到,并清除标志*/SQW=!SQW;/*引脚每隔引脚每隔10ms电平取反,产生电平取反,产生50Hz方波方波*/26第26页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)#include/*要用到要用到SFR*/sbit SQW=P17;/*定义输出方波引脚定义输出方波引脚*/main()/*主程序主程序*/TMOD=0 x01;/*T0 模式模式1,定时,定时,GATE=0*/TH0=0 xD8;/*赋初值赋初值*/TL0=0 xF0;ET0=1;EA=1;/*允许允许T0中断中断*/TR0=1;/*启动启动 T0 运行运行*/while(1);/*无限循环作为无限循环作为main的结束的结束*/27第27页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)void out_sqw(void)interrupt 1/*中断服务程序中断服务程序*/*TF0 标志被自动清除标志被自动清除*/SQW=!SQW;/*引脚每隔引脚每隔10ms电平取反,产生电平取反,产生50Hz方波方波*/TH0=0 xD8;TL0=0 xF0;/*重赋初值重赋初值*/28第28页,此课件共76页哦例例2:在:在P1.0引脚上输出周期引脚上输出周期1秒,占空比秒,占空比为为20%的方波,已知的方波,已知Fosc=12MHz。29第29页,此课件共76页哦1、确定定时对象、确定定时对象:1s、200ms 或或 800ms?应当小于定时器的最大定时时间,对于模式应当小于定时器的最大定时时间,对于模式1,最长为,最长为65.536ms,为了便于计算,取为了便于计算,取50ms作为定时对象,再用一个字节对溢出作为定时对象,再用一个字节对溢出计数。计数。50ms*4 =200 ms50ms*16=800 ms分析分析:占空比占空比20%的方波,周期为的方波,周期为1s30第30页,此课件共76页哦2、Fosc=12MHz,1Tm=1us,产生产生50ms定时定时,应选择模式应选择模式0、1、2、3?应选择模式应选择模式1,16位定时器,最大范围位定时器,最大范围65.536ms。在所有工在所有工作模式中,模式作模式中,模式1的定时的定时/计数范围是最大的。计数范围是最大的。分析分析:占空比占空比20%的方波,周期为的方波,周期为1s31第31页,此课件共76页哦3、计算初值、计算初值 TC=65536-50ms/1us=15536=3CB0H分析分析:占空比占空比20%的方波,周期为的方波,周期为1s32第32页,此课件共76页哦编程实现(查询方式)编程实现(查询方式)#include/要用到要用到SFRsbit SQW=P10;/*定义输出方波引脚定义输出方波引脚*/bit will_be_high=0;/*定义一个标志位,定义一个标志位,0:将要输出低电平,:将要输出低电平,1:将要输出高电平:将要输出高电平*/unsigned char overflow_counter=16;/*由由800ms低电平开始,减到低电平开始,减到0,时间到,改时间到,改200ms定时,定时,overflow_counter=4*/main()TMOD=0 x10;/*T1 模式模式1,定时,定时,GATE=0*/TH1=0 x3C;TL1=0 xB0;/*赋赋50ms定时初值定时初值*/TR1=1;/*启动启动 T1 运行运行*/33第33页,此课件共76页哦编程实现(查询方式)编程实现(查询方式)for(;)/*无限循环作为无限循环作为main的结束的结束*/*如果要输出高电平,则输出高电平,如果要输出高电平,则输出高电平,4*50ms,下一次将为低电平;否则输出下一次将为低电平;否则输出低电平,低电平,16*50ms,下一次将为高电平下一次将为高电平*/if(will_be _high)overflow_counter=4;SQW=1;will_be _high=0;else overflow_counter=16;SQW=0;will_be _high=1;do while(!TF1);TF1=0;/*查询等查询等50ms时间到,并清除标志时间到,并清除标志*/TH1=0 x3C;TL1=0 xB0;/*每次要重新赋每次要重新赋50ms 定时的初值定时的初值*/while(-overflow_counter);/end of for(;)/end of main34第34页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)#include/要用到要用到SFRsbit SQW=P10;/*定义输出方波引脚定义输出方波引脚*/bit is_high=0;/当前状态当前状态unsigned char overflow_counter=16;/*由由800ms低电平开始,减到低电平开始,减到0,时间到,改,时间到,改200ms定时,定时,overflow_counter=4*/main()TMOD=0 x10;/*T1 模式模式1,定时,定时,GATE=0*/TH1=0 x3C;TL1=0 xB0;/*赋赋50ms定时初值定时初值*/ET1=1;EA=1;/*允许允许T1中断中断*/TR1=1;/*启动启动 T1 运行运行*/SQW=0;/*输出低电平输出低电平*/while(1);/*无限循环作为无限循环作为main的结束的结束*/35第35页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)void out_sqw(void)interrupt 3/*中断服务程序中断服务程序*/*TF1 标志被自动清除标志被自动清除*/TH1=0 x3C;TL1=0 xB0;/*重赋重赋50ms定时初值定时初值*/if(-overflow_counter!=0)return;/*定时未到返回定时未到返回*/if(is_high)overflow_counter=16;SQW=0;is_high=0;else overflow_counter=4;SQW=1;is_high=1;36第36页,此课件共76页哦例例3:在:在P1.0引脚上每隔引脚上每隔2ms产生产生4us的负的负脉冲,已知脉冲,已知Fosc=6MHz,采用采用T0模式模式0。37第37页,此课件共76页哦1、确定定时对象、确定定时对象:2ms 或或 4us?应应当当是是2ms,而而4us负负脉脉冲冲可可以以通通过过指指令令本本身身的的延延时时来来实实现现。如如:P10=0;/1Tm=2us_nop_();/1Tm=2usP10=1;/1Tm=2us分析分析:周期性负脉冲周期性负脉冲38第38页,此课件共76页哦2、指定模式指定模式0,不用选择。,不用选择。3、计算初值、计算初值 TC=213-2ms/2us=7192=1C18H0001 1100 0001 1000B,初值初值:TH0=0E0H,TL0=18H分析分析:周期性负脉冲周期性负脉冲(高高8位位)(低低5位位)39第39页,此课件共76页哦编程实现(查询方式)编程实现(查询方式)#include/要用到要用到SFR#include/包含包含_nop_();sbit Pulse=P10;/*定义输出脉冲的引脚定义输出脉冲的引脚*/main()TMOD=0 x0;TR0=1;/*T0 模式模式,定时定时,GATE=0,启动启动 T0*/while(1)/*无限循环作为无限循环作为main的结束的结束*/TH0=0 xE0;TL0=0 x18;/*每次要重新赋每次要重新赋2ms 定时的初值定时的初值*/while(!TF0);TF0=0;/*查询等查询等2ms时间到,并清除标志时间到,并清除标志*/Pulse=0;_nop_();Pulse=1;/*产生产生4us负脉冲负脉冲*/40第40页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)#include/要用到要用到SFR#include/包含包含_nop_();sbit Pulse=P10;/*定义输出脉冲的引脚定义输出脉冲的引脚*/main()TMOD=0 x0;/*T0 模式模式,定时定时,GATE=0*/TH0=0 xE0;TL0=0 x18;/*赋赋2ms 定时的初值定时的初值*/ET0=1;EA=1;/*允许允许T0中断中断*/TR0=1;/*启动启动 T0 运行运行*/for(;);/*循环结束循环结束,也可以做别的事也可以做别的事*/41第41页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)void out_pulse(void)interrupt 1/*中断服务程序中断服务程序*/*TF0 标志被自动清除标志被自动清除*/TH0=0 xE0;TL0=0 x18;/*重赋重赋2ms定时初值定时初值*/Pulse=0;_nop_();Pulse=1;/*产生产生4us负脉冲负脉冲*/42第42页,此课件共76页哦例例4:利利用用T0门门控控位位测测量量INT0引引脚脚上上出出现现的正脉冲的宽度,并以机器周期数表示。的正脉冲的宽度,并以机器周期数表示。43第43页,此课件共76页哦1、设置设置GATE=0,则则GATE=1,因此因此Y=TR0,这样:这样:TR0=1;启动定时器启动定时器T0运行运行 TR0=0;停止定时器停止定时器T0运行运行我们把这种控制定时器运行的方法叫软触发,最常用。我们把这种控制定时器运行的方法叫软触发,最常用。2、设置设置GATE=1,则则GATE=0,因此因此Y=TR0*INT0电平,电平,进一步令进一步令TR0=1,则则Y=INT0电平,电平,这样:这样:INT0为高电平,启动定时器为高电平,启动定时器T0运行运行 INT0为低电平,停止定时器为低电平,停止定时器T0运行运行我我们们把把这这种种控控制制定定时时器器运运行行的的方方法法叫叫硬硬触触发发,较较少少用用,可可以以用用来来测量正脉冲的宽度。测量正脉冲的宽度。回顾:定时器回顾:定时器/计数器运行控制方法计数器运行控制方法44第44页,此课件共76页哦1、确定定时对象?、确定定时对象?高高电电平平期期间间定定时时器器计计了了多多少少个个机机器器周周期期,因因此此在在上上升升的的时时候候让让(TH0,TL0)=0000并并开开始始计计时时,下下降降后后停停止止,看看计计数数器器的的值值为多少即为所求,假定机器周期数不超过定时器的最大值。为多少即为所求,假定机器周期数不超过定时器的最大值。分析分析45第45页,此课件共76页哦2、应选择模式应选择模式0、1、2、3?应应选选择择模模式式1,16位位定定时时器器,最最大大范范围围65536Tm。在在所所有有工工作作模式中,模式模式中,模式1的范围是最大的。的范围是最大的。3、计算初值、计算初值从从0000开始,但要注意要在从低到高跳变前赋值。开始,但要注意要在从低到高跳变前赋值。分析分析46第46页,此课件共76页哦#include/要用到要用到SFRsbit PPulse=P32;/*定义输入脉冲的引脚定义输入脉冲的引脚*/unsigned char data*p=0 x30;/结果存入结果存入30H开始的开始的2个单元中个单元中main()TMOD=0 x09;TH0=0;TL0=0;/*T0 模式模式1,定时定时,GATE=1*/while(PPulse);TR0=1;/等低电平,准备计时等低电平,准备计时 while(!PPulse);/等高电平后等高电平后,自动开始计时自动开始计时 while(PPulse);TR0=0;/等低电平,停止计时等低电平,停止计时 *p+=TH0;*p=TL0;/存入结果存入结果 while(1);/*循环结束循环结束*/编程实现编程实现47第47页,此课件共76页哦n第一节第一节 概述概述n第二节第二节 模式模式0、模式、模式1及其应用及其应用n第三节第三节 模式模式2及其应用及其应用n第四节第四节 模式模式3及其应用及其应用n第五节第五节 定时器定时器/计数器计数器248第48页,此课件共76页哦Timer/Counter 0 Mode 2:8-Bit Auto-Reload 49第49页,此课件共76页哦Timer/Counter 1 Mode 2:8-Bit Auto-Reload 50第50页,此课件共76页哦例例5:在在P1.7引引脚脚上上输输出出2KHz的的方方波波,已已知知Fosc=12MHz。51第51页,此课件共76页哦1、确确定定定定时时对对象象:250us,便便于于产产生生方方波波:每每隔隔250us引引脚脚电电平平取反。取反。2、Fosc=12MHz,1Tm=1us,产产生生256us定定时时,应应选选择择模模式式0、1、2、3?应应选选择择模模式式2,8位位定定时时器器,最最大大范范围围256us,由由于于自自动动重重装装载载,重重装过程没有引入误差,最理想。装过程没有引入误差,最理想。分析分析:2KHz的方波,周期为的方波,周期为1/2000=500us52第52页,此课件共76页哦3、计算初值、计算初值 TC=256-250us/1us=6分析分析:2KHz的方波,周期为的方波,周期为1/2000=500us53第53页,此课件共76页哦编程实现(查询方式)编程实现(查询方式)#include/要用到要用到SFRsbit SQW=P17;/*定义输出方波引脚定义输出方波引脚*/main()TMOD=0 x02;/*T0 模式模式2,定时,定时,GATE=0*/TH0=6;TL0=6;/*只在此赋初值一次只在此赋初值一次*/TR0=1;/*启动启动 T0 运行运行*/while(1)/*无限循环作为无限循环作为main的结束的结束*/while(!TF0);TF0=0;/*查询等查询等250us时间到,并清除标志时间到,并清除标志*/SQW=!SQW;/*每隔每隔250us电平取反,产生电平取反,产生2KHz方波方波*/54第54页,此课件共76页哦编程实现(中断方式)编程实现(中断方式)#include/*要用到要用到SFR*/sbit SQW=P17;/*定义输出方波引脚定义输出方波引脚*/main()/*主程序主程序*/TMOD=0 x02;/*T0 模式模式2,定时,定时,GATE=0*/TH0=6;TL0=6;TR0=1;/*赋初值并启动赋初值并启动 T0运行运行*/ET0=1;EA=1;/*允许允许T0中断中断*/while(1);/*无限循环作为无限循环作为main的结束的结束*/void out_sqw(void)interrupt 1/*中断服务程序中断服务程序*/SQW=!SQW;/*引脚每隔引脚每隔250us电平取反,产生电平取反,产生2KHz方波方波,不不用反复赋初值用反复赋初值*/55第55页,此课件共76页哦n第一节第一节 概述概述n第二节第二节 模式模式0、模式、模式1及其应用及其应用n第三节第三节 模式模式2及其应用及其应用n第四节第四节 模式模式3及其应用及其应用n第五节第五节 定时器定时器/计数器计数器256第56页,此课件共76页哦Timer/Counter 0 Mode 3:Two 8-Bit Counters57第57页,此课件共76页哦1、TH0计数脉冲来自内部计数脉冲来自内部fosc,所以它只能处于所以它只能处于”定时定时”方式方式;2、TH0分别借用了定时器分别借用了定时器T1的的TR1和和TF1来为自己工作来为自己工作,使使TH0能象能象TL0那样用那样用TR1启动定时启动定时,并用并用TF1来作为来作为TH0的溢出中断的标志的溢出中断的标志;3、由于、由于T1缺少了启动控制信号缺少了启动控制信号TR1和溢出中断标志和溢出中断标志TF1,那么在模那么在模式式3时时,T1是如何工作?是如何工作?没有溢出中断标志没有溢出中断标志TF1,则则T1就不能用中断方式工作就不能用中断方式工作(实际上连实际上连查询也不行查询也不行);没有启动控制信号没有启动控制信号TR1,让它事先设定为自动重装模式,让它事先设定为自动重装模式,则则T0模式模式3会让会让T1自动工作。自动工作。模式模式3时时T0(TH0,TL0)及及T1的各自特点的各自特点:58第58页,此课件共76页哦4,模式模式3就是将单片机原有的就是将单片机原有的T0,T1两个计数器变成三个独立的两个计数器变成三个独立的计数器计数器,其中其中T1要事先设定为模式要事先设定为模式2(串行口的波特率发生器串行口的波特率发生器)。5、注注意意:T0不不用用时时的的处处理理,一一般般置置0方方式式,禁禁止止进进入入方方式式3,以以防止影响防止影响T1的工作。的工作。模式模式3时时T0(TH0,TL0)及及T1的各自特点的各自特点:59第59页,此课件共76页哦将将T0分解为两个计数器分解为两个计数器TL0和和TH0,其中其中TH0借借用了用了T1的的TR1和和TF1T1已无已无TR1,TF1功能功能,建议建议T1做波特率发生器做波特率发生器TH0,TL0和和T1组成组成3个个8位计数器位计数器模式模式3时时T0、T1的工作原理示意图的工作原理示意图60第60页,此课件共76页哦例例6:设设一一个个89S51系系统统已已经经使使用用了了2个个外外部部中中断断,并并置置T1于于模模式式2作作串串口口波波特特率率发发生生器器用用,现现要要求求通通过过T0再再增增加加一一个个外外部部中中断断,同同时时由由P1.0输输出出5KHz的的方方波波。已已知知Fosc=12MHz。61第61页,此课件共76页哦1、已经用掉的资源、已经用掉的资源:2个外部中断、个外部中断、T1(模式模式2)、串口)、串口2、用、用T0实现实现:1个外部中断、定时产生个外部中断、定时产生5KHz方波方波用方式用方式3:TH0、TL0作为作为2个独立的个独立的8位定时器位定时器/计数器。计数器。1个外部中断个外部中断:TL0,计数方式,初值计数方式,初值FFH,每来一个负跳变就每来一个负跳变就溢出,相当于一个边沿触发的外部中断。溢出,相当于一个边沿触发的外部中断。定时产生定时产生5KHz方波:方波:TH0,定时方式,初值定时方式,初值156,每隔,每隔100us使使P1.0取反,产生周期为取反,产生周期为200us的方波。的方波。分析分析62第62页,此课件共76页哦编程实现编程实现#include/要用到要用到SFRsbit SQW_5KHz=P10;/*定义输出脉冲的引脚定义输出脉冲的引脚*/main()TMOD=0 x27;/*GATE=0,T1 模式模式2,定时,定时,T0模式模式3,计数计数*/TH1=0 xE8;TL1=0 xE8;/*T1的初值的初值,产生一种波特率产生一种波特率*/TL0=0 xFF;/*TL0的初值的初值*/TH0=156;/*赋赋100us定时的初值定时的初值*/IE=0 x9F;/*允许所有中断允许所有中断*/PT1=1;/*产生方波优先级最高产生方波优先级最高*/TR0=1;TR1=1;/*启动启动 T0,T1运行运行*/for(;);/*循环结束循环结束,也可以做别的事也可以做别的事*/63第63页,此课件共76页哦编程实现编程实现void No3_int(void)interrupt 1/*中断服务程序中断服务程序*/*进行中断处理进行中断处理,省略省略*/TL0=255;/*重赋重赋0 xFF 计数初值计数初值*/void out_sqw(void)interrupt 3/*中断服务程序中断服务程序*/TH0=156/*重赋重赋100us定时初值定时初值,如果精确定时如果精确定时,应加几个应加几个Tm*/SQW_5KHz=!SQW_5KHz;/*产生产生5KHz方波方波*/64第64页,此课件共76页哦编程实现编程实现void No1_int(void)interrupt 0/*外部中断外部中断0 中断服务程序中断服务程序*/*进行中断处理进行中断处理,省略省略*/void No2_int(void)interrupt 2/*外部中断外部中断1 中断服务程序中断服务程序*/*进行中断处理进行中断处理,省略省略*/void Serial_int(void)interrupt 4/*串口中断服务程序串口中断服务程序*/*进行中断处理进行中断处理,省略省略*/65第65页,此课件共76页哦n第一节第一节 概述概述n第二节第二节 模式模式0、模式、模式1及其应用及其应用n第三节第三节 模式模式2及其应用及其应用n第四节第四节 模式模式3及其应用及其应用n第五节第五节 定时器定时器/计数器计数器266第66页,此课件共76页哦nTF2:溢溢出出标标志志位位。T2溢溢出出时时置置位位,并并申申请请中中断断。此此标标志志必必须须用用软件清除。当软件清除。当T2工作于波特率模式时,工作于波特率模式时,T2溢出并不置位溢出并不置位TF2。nEXF2:当当EXEN2=1,且且T2EX引引脚脚出出现现负负跳跳变变时时,EXF2置置位,申请中断。此标志必须有软件清除。位,申请中断。此标志必须有软件清除。nRCLK、TCLK:串串口口接接收收和和发发送送时时钟钟选选择择位位。1:选选择择T2作作为为串口时钟;串口时钟;0:用:用T1作为串口时钟。作为串口时钟。T2控制寄存器控制寄存器T2CON(地址地址:88H,可按位寻址可按位寻址)67第67页,此课件共76页哦nEXEN2:T2外外部部允允许许位位。当当EXEN2=1时时,若若T2未未用用于于波波特特率率发发生生,则则T2EX引引脚脚出出现现负负跳跳变变后后,造造成成T2捕捕获获或或重重装装载载,并并置置位位EXF2,请求中断。,请求中断。EXEN2=0时,时,T2EX引脚的信号无效。引脚的信号无效。nTR2:T2 启动启动/停止控制位。停止控制位。1:启动;:启动;0:停止:停止nC/T2:0:选择定时器工作方式;:选择定时器工作方式;1:选择计数器工作方式:选择计数器工作方式nCP/RL2:捕捕获获/重重装装载载控控制制位位。1:选选择择捕捕获获功功能能,若若EXEN2=1,在在T2EX引引脚脚上上出出现现负负跳跳变变时时,发发生生捕捕获获操操作作,把把TH2和和TL2的的内内容容送送给给RCAP2H和和RCAP2L;0:选选择择重重装装载载功功能能,若若T2溢溢出出或或在在EXEN2=1条条件件下下T2EX引引脚脚出出现现负负跳跳变变是是,都都会会发发生生自自动动重重装装载,把载,把RCAP2H和和RCAP2L的内容送给的内容送给TH2和和TL2。68第68页,此课件共76页哦nT2OE:T2输出允许控制位。输出允许控制位。1:启动:启动T2的可编程时钟输出功能。的可编程时钟输出功能。nDCEN:T2加加减减计计数数控控制制位位。1:允允许许T2作作为为加加/减减计计数数器器使使用用。具具体体的的计计数数方方向向由由T2EX引引脚脚控控制制,当当T2EX=1时时,T2进进行行加加计计数,当数,当T2EX=0,T2进行减计数。进行减计数。T2模式寄存器模式寄存器T2MOD(地址地址:C9H,不可按位寻址不可按位寻址)69第69页,此课件共76页哦T2T2工作模式工作模式70第70页,此课件共76页哦T2T2:1616位捕获模式位捕获模式71第71页,此课件共76页哦T2T2:1616位自动重装载模式(加计数)位自动重装载模式(加计数)72第72页,此课件共76页哦T2T2:1616位自动重装载模式(减计数)位自动重装载模式(减计数)73第73页,此课件共76页哦T2T2:波特率发生器模式:波特率发生器模式74第74页,此课件共76页哦T2T2:可编程时钟输出模式:可编程时钟输出模式时钟输出频率时钟输出频率=振荡器频率振荡器频率/4*65536 (RCAP2H,RCAP2L)75第75页,此课件共76页哦P178:2、4、7补充题:补充题:1、从从T0输输入入低低频频脉脉冲冲,要要求求该该脉脉冲冲每每发发生生一一次次负负跳跳变变时时由由P1.0输输出出一一个个500us的的负负脉脉冲冲,与与此此同同时时由由P1.1输输出出一一个个宽宽为为1ms的正脉冲。的正脉冲。2、利利用用T0门门控控位位测测试试INT0引引脚脚上上出出现现的的正正脉脉冲冲的的宽宽度度,并并以以机机器器周周期期数数表表示示存存入入内内部部RAM 30H开开始始的的3个个单单元元中中,设设正正脉脉冲的宽度超过了冲的宽度超过了65536Tm。作业作业76第76页,此课件共76页哦