系列单片机定时器计数器.ppt
第七章第七章 51系列单片机的定时器系列单片机的定时器/计数器计数器7 71 1 定时器定时器/计数器概述计数器概述711 定时方法定时方法在单片机控制系统中,定时的方法有:在单片机控制系统中,定时的方法有:1.软件定时软件定时 靠执行一个循环程序以进行时间延迟。特点是靠执行一个循环程序以进行时间延迟。特点是:时间精确,时间精确,且不需外加硬件电路。缺点是且不需外加硬件电路。缺点是:定时时要占用定时时要占用CPU,增加,增加CPU的的开销。开销。2硬件定时硬件定时 使用硬件电路来完成。方法是使用硬件电路来完成。方法是:定时功能全部由硬件电路完定时功能全部由硬件电路完成,不占成,不占CPU的时间。缺点是的时间。缺点是:定时参数一旦设定,修改比较困定时参数一旦设定,修改比较困难。适用于:时间较长的定时难。适用于:时间较长的定时3可编程定时器可编程定时器 通过系统对时钟脉冲的计数来实现。通过程序可以改变计通过系统对时钟脉冲的计数来实现。通过程序可以改变计数值,也就改变了定时时间。同时可编程定时器具有定时和计数值,也就改变了定时时间。同时可编程定时器具有定时和计数功能。数功能。7.1.2 定时器定时器/计数器的结构计数器的结构 MCS-51系列单片机有两个系列单片机有两个16位的定时器,分别为位的定时器,分别为T0和和T1。它们都有它们都有定时定时和和事件计数事件计数的功能的功能,可用于可用于定时控制定时控制、延时延时、对外部对外部事件计数事件计数和和检测检测等场合等场合。T0由两个由两个8位特殊功能寄存器位特殊功能寄存器TH0和和TL0构成;构成;T1由由TH1和和TL1构成。构成。T0、T1由软件设置为由软件设置为定时器工作方式定时器工作方式或或计数方式计数方式及其及其他灵他灵活多样的可控功能方式活多样的可控功能方式。T0、T1的功能都由特殊功能寄存器的功能都由特殊功能寄存器TMOD和和TCON所控所控制。制。AT89C51定时器结构:定时器结构:定时器工作方式定时器工作方式:每个机器周期使定时器(:每个机器周期使定时器(T0或或T1)的)的数值加数值加1直至计数溢出。直至计数溢出。计数器工作方式:计数器工作方式:在每个机器周期的在每个机器周期的S5P2期间采样期间采样T0和和T1引脚,若某一个机器周期采样值为引脚,若某一个机器周期采样值为1,下一个机器周期采样值,下一个机器周期采样值为为0,则计数器加,则计数器加1。最高计数频率为振荡频率的。最高计数频率为振荡频率的1/24。8位寄存器位寄存器TMOD和和TCON,用来设置,用来设置T0和和T1的的操作模操作模式式和控制功能。当系统复位时,两个寄存器所有位被清和控制功能。当系统复位时,两个寄存器所有位被清0。72 定时器定时器/计数器的控制计数器的控制GATE C/T M1 M0 GATE C/T M1 M01.1.工作模式寄存器工作模式寄存器TMODTMOD (89H(89H,不能位寻址只能由字节设置定时器工作模式,不能位寻址只能由字节设置定时器工作模式)定时器定时器T0T0工作模式定义工作模式定义M1M1、M0M0:工作模式控制位工作模式控制位 (定义定义4 4 种方式种方式 ):):0 00 0:模式模式0 0 13 13位定时器位定时器作用不大作用不大0 10 1:模式模式1 1616位定时器位定时器经常用到经常用到1 01 0:模式模式2 可自动重装的可自动重装的8 8位定时器位定时器经常用到经常用到1 11 1:模式模式3 T0T0分为分为2 2个个8 8位定时器;位定时器;T1T1不工作不工作几乎几乎无无用用 定时器定时器T1T1工作模式定义工作模式定义C/T C/T:计数器计数器/定时器选择位定时器选择位 0 0 片内时钟片内时钟定时器定时器。对。对机器周期脉冲机器周期脉冲计数定时计数定时 1 外部事件外部事件计数器计数器。对。对T0(T1)引脚的引脚的负脉冲负脉冲计数;计数;GATE C/T M1 M0 GATE C/T M1 M0T1T0GATEGATE门控位门控位:定时器可由软件与硬件两者控制定时器可由软件与硬件两者控制 GATE=0 GATE=0 普通用法普通用法 定时器的定时器的启启/停停由由软件软件对对TR0TR0(TR1)TR1)位写位写“1 1”/“0 0”控制控制,不管不管INT0INT0、INT1INT1的电平。的电平。(89H)(89H)GATE=1 GATE=1 门控用法门控用法 INT0INT0或或INT1INT1引脚为高电平且由软件使引脚为高电平且由软件使TR0TR0或或TR1TR1置置1 1时时,才能启动定时器工作。,才能启动定时器工作。2.2.定时器定时器控制控制寄存器寄存器TCON TCON(88H(88H,可位寻址,可位寻址)TF0(TF1):TF0(TF1):定时器定时器0/10/1计数溢出标志位。计数溢出标志位。=1=1 计数溢出计数溢出;=0=0 计数未满计数未满 TF0(TF1)可用于可用于申请中断申请中断或或供供CPUCPU查询查询。在进入中断服务程序时会在进入中断服务程序时会自动清零自动清零;但在查询方式时必须但在查询方式时必须软件清零软件清零。TR0TR0(TR1):TR1):定时器定时器0/10/1运行控制位。运行控制位。=1=1 启动计数;启动计数;=0=0 停止计数停止计数 在程序中用指令在程序中用指令“SETB TR1SETB TR1”使使TR1TR1位置位置1 1,定时器定时器T1T1便开始计数。便开始计数。IT0IE0IT1IE1TR0 TF0TR1TF188H89H8AH8BH8CH8DH8EH8FH定时器T0/T1 中断申请过程a在已经开放在已经开放T0/T1T0/T1中断允许且已被启动的前提下:中断允许且已被启动的前提下:aT0/T1T0/T1加满溢出加满溢出时时 TF0/TF1TF0/TF1标志位自动置标志位自动置“1 1”检测到检测到TCONTCON中中TF0/TF1TF0/TF1变变“1 1”后后,将产生指令:将产生指令:LCALL 000BHLCALL 000BH/LCALL 001BHLCALL 001BH 执行中断服务程序执行中断服务程序,TF0/TF1TF0/TF1标志位会自动清标志位会自动清“0 0”,以备下次中断申请。以备下次中断申请。定时定时/计数器可按片内计数器可按片内机器周期机器周期定时,也可对由定时,也可对由T0/T1T0/T1引脚输入一个引脚输入一个负脉冲负脉冲进行加法计数进行加法计数7.3 定时器计数器的四种工作模式及应用 1.模式0及应用(以T0为例)振荡器振荡器 12TL0 TH0 (5位位)(8位位)TF0申请申请中断中断 TR0TR0GATEGATEINT0INT0端端11&C/T=0C/T=1控制控制=1开关接通开关接通或门或门与门与门T0引脚引脚M0(0)M1(0)C/T定时器(定时器(T0或或T1)的高)的高8位和位和低低5位(其余三位为位(其余三位为0)组成)组成一个一个13位定时器位定时器/计数器计数器。当当TL0的低的低5位溢出时,向位溢出时,向TH0进位;进位;TH0溢出时,向中断溢出时,向中断标志位标志位TF0进位(硬件置进位(硬件置TF0),并申请中断),并申请中断。C/T=0时时定时器工作方式定时器工作方式,控制开关接通振荡,控制开关接通振荡器器12分频输出端,分频输出端,T0对机器周期计数。其定时时对机器周期计数。其定时时间为:间为:t=(213T0初值)初值)X振荡周期振荡周期X 12 当当C/T=1时作时作外部事件计数器外部事件计数器,控制开关使引,控制开关使引脚脚T0()与()与13位计数器相连,外部计数脉冲下降位计数器相连,外部计数脉冲下降沿使计数器加沿使计数器加1。011GATE=0时,时,INT0信号无效。信号无效。B点电点电位取决于位取决于TR0的状态,于是,由的状态,于是,由TR0一位就可控制计数开关一位就可控制计数开关K,开启或关,开启或关断断T0。若软件使。若软件使TR0置置1,便接通计数,便接通计数开关开关K,启动,启动T0在原值上加在原值上加1计数,直计数,直至溢出。若至溢出。若TR0=0,则关断计数开关,则关断计数开关K,停止计数。,停止计数。GATE=1时,必须时,必须 INT0=1且且TR0=1时,时,B点才点才是高电平,计数开关是高电平,计数开关K闭合,闭合,T0开始计数。开始计数。INT0由由1变变0时,时,T0停止计数。停止计数。设定时器设定时器T0工作于工作于模式模式0,定时时间定时时间为为1ms,fosc=6MHZ。试确定试确定T0的的初值初值,计算,计算最大定时时间最大定时时间T。解:解:当当T0为工作模式为工作模式0时,加时,加1计数器为计数器为13位。设位。设T0的初值为的初值为X。则则(213X)1/(6106)12=110-3S (213X)12/6=1000 X=7692转换为二进制数:转换为二进制数:X=1111000001100B T0的低的低5位:位:01100B=0CH T0的高的高 8位:位:11110000B=F0HT0的最大定时时间应于的最大定时时间应于13位计数器各位全为位计数器各位全为1,即,即(TH0)=FFH,(,(TL0)=1FH。即。即X=0。则则 T=21312/6MHZ=16.384ms 例例1:利用利用T0工作于模式工作于模式0产生产生1ms的定时的定时,在引脚上输出周期在引脚上输出周期为为2ms的方波。设单片机晶振频率的方波。设单片机晶振频率fosc=12MHZ。解:解:(1)选择工作模式)选择工作模式 要在引脚上输出周期为要在引脚上输出周期为2ms的方波,只要使每隔的方波,只要使每隔1ms取取反一次即可。反一次即可。T0模式字为模式字为TMOD=00H,即,即T0模式模式0,为定时状态,为定时状态,不受不受INT0控制控制,TR0作为开关。作为开关。(2)计算)计算1ms定时时定时时T0的值的值 设设T0的计数初值为的计数初值为X,则,则(213X)110-6s=1 X 10-3 X=7192D=11100000 11000B=E018H TH0初值为初值为E0H,TL0初值为初值为18H。例例2:(3)查询方式)查询方式 查询方式在定时器计数过程中,查询方式在定时器计数过程中,CPU要不断查询溢出要不断查询溢出标志位标志位TF0的状态。这就占用了很多的状态。这就占用了很多CPU的工作时间,使的工作时间,使CPU的效率下降。的效率下降。程序清单:程序清单:MOV TMOD,#00H ;设置;设置T0为模式为模式0 MOV TL0,#18H ;送初值;送初值 MOV TH0,#0E0H ;SETB TR0 ;启动;启动T0LOOP:JBC TF0,NEXT ;查询定时时间到期否;查询定时时间到期否?SJMP LOOPNEXT:MOV TL0,#18H ;重装时间常数;重装时间常数 MOV TH0,#0E0H ;CPL P1.0 ;输出取反;输出取反 SJMP LOOP ;重复循环;重复循环#includemain()P1_0=0;TMOD=0X00;TL0=0X18;TH0=0XE0;TR0=1;while(1)if(TF0=1)TF0=0;TL0=0X18;TH0=0XE0;P1_0=P1_0;(4)定时器溢出中断程序)定时器溢出中断程序程序清单如下:程序清单如下:主程序:主程序:MAIN:MOV TMOD,#00H ;设置;设置T0模式模式0 MOV TL0,#18H ;送初值;送初值 MOV TH0,#0E0H ;SETB EA ;CPU开中断开中断 SETB ET0 ;T0中断允许中断允许 SETB TR0 ;启动;启动T0HERE:SJMP HERE ;等待中断,返回主程序;等待中断,返回主程序中断服务程序:中断服务程序:ORG 000BH ;T0中断的入口中断的入口 AJMP CTC0 ;跳转;跳转CTC0:MOV TL0,#18H ;重装初值;重装初值 MOV TH0,#0E0H ;CPL P1.0 ;输出方波;输出方波 RETI ;中断返回;中断返回#includemain()P1_0=0;TMOD=0X00;TL0=0X18;TH0=0XE0;EA=1;ET0=1;TR0=1;while(1);void inte_T0()interrupt 1TL0=0X18;TH0=0XE0;P1_0=P1_0;振荡器振荡器 12TL0 TH0 (8位位)(8位位)TF0申请申请中断中断TR0TR0GATEGATEINT0INT0端端11&C/T=0C/T=1控制控制=1开关接通开关接通或门或门与门与门T0引脚引脚M0(1)M1(0)C/T2 2、模式、模式1 1及其应用及其应用(以(以T0为例)为例)TH0/TL0TH0/TL0赋初值赋初值:TH0TH0赋高赋高8 8位,位,TL0TL0赋低赋低8 8位位 TMODTMOD选方式选方式:写写“M1,M0M1,M0”=01=01 选方式选方式1 1 若不用门控位若不用门控位,直接用软件写直接用软件写TR0TR0控制控制T0T0计数启计数启/停停 若使用门控位,先置位若使用门控位,先置位TR0TR0,然后由,然后由INT0INT0端的端的高高/低电平低电平来控制其启来控制其启/停停 若要允许若要允许中断中断,还须先置位,还须先置位ET0ET0、EAEA等中断允许控制位,并编写等中断允许控制位,并编写中断服务中断服务程序程序 若不用中断,可若不用中断,可查询查询“计数溢出标志计数溢出标志TF0TF0”的方式工作,但溢出标志的方式工作,但溢出标志TF0TF0须软件清须软件清0 0与模式与模式0唯一的差别是:唯一的差别是:在模式在模式1中,寄存器中,寄存器TH0和和TL0是是以全部以全部16位参与操作。位参与操作。用于定时工作方式时,定时时间为:用于定时工作方式时,定时时间为:t=(216T0初值)初值)X 振荡周期振荡周期X 12用于计数方式时,计数长度为:用于计数方式时,计数长度为:216=65536(个外部脉冲)(个外部脉冲)例例3:用定时器用定时器T1产生一个产生一个50HZ的方波,由输出的方波波形的方波,由输出的方波波形如图所示。仍使用程序查询方式,如图所示。仍使用程序查询方式,fosc=12MHZ。解解:方波周期:方波周期T=1/50HZ=0.02s=20ms,用,用T1定时定时10ms。计数初值计数初值X为:为:X=21612 X 10 X 1000/12=6553610000=55536=0D8F0H源程序如下:源程序如下:MOV TMOD,#10H ;T1模式模式1,定时,定时 SETB TR1 ;启动;启动T1LOOP:MOV TH1,#0D8H ;装入;装入T1计数初值计数初值 MOV TL1,#0F0H JNB TF1,$;T1没有溢出等待没有溢出等待 CLR TF1 ;产生溢出清标志位;产生溢出清标志位 CPL P1.1 ;取反;取反 SJMP LOOP ;循环;循环#includemain()P1_1=1;TMOD=0 x10;TH1=0XD8;TL1=0XF0;TR1=1;while(1)if(TF1)TR1=0;TF1=0;TH1=0XD8;TL1=0XF0;P1_1=P1_1;TR1=1;分析分析:已知:已知foscfosc =6MHz=6MHz 则:则:(振荡周期)(振荡周期)1Tc=1/6MHz1Tc=1/6MHz (机器周期)(机器周期)1Tm=12Tc=12/6MHz=1Tm=12Tc=12/6MHz=2 2 S S 粗略地说:粗略地说:Tmin Tmin 2 2 S S 16 16位定时器最大数值为:位定时器最大数值为:2 21616=65536=0FFFFH+1=65536=0FFFFH+1 故选择故选择方式方式 1 1 工作可以得到:工作可以得到:Tmax=65536Tmax=65536 2=1310722=131072 S S若晶振频率为若晶振频率为6MHz6MHz,计算单片机的最小与最大,计算单片机的最小与最大定时时间:定时时间:附录:附录:振荡器振荡器 12TR0TR0GATEGATEINT0INT0端端11&C/T=0C/T=1控制控制=1开关接通开关接通或门或门与门与门T0引脚引脚M0(0)M1(1)C/TTL0(8位位)TF0申请申请中断中断TH0(8位位)溢溢出出位位门开门开三、模式三、模式2 2及应用(以及应用(以T0T0为例为例)16位计数器被拆成两个,位计数器被拆成两个,TL0作作8位计数器,位计数器,TH0用以保存初值。用以保存初值。TL0计计数溢出量,不仅使数溢出量,不仅使TF0置置1,而且还把,而且还把TH0中的内容重新装入中的内容重新装入TL0中中,继续计继续计数,循环重复。数,循环重复。在程序初始化时,在程序初始化时,TL0和和TH0由软件赋予相同的初值。由软件赋予相同的初值。在定时器工作方式时,其定时时间(在定时器工作方式时,其定时时间(TF0溢出周期)为溢出周期)为:t=(28TH0初值)初值)X 振荡周期振荡周期X 12 在计数方式时,最大的计数长度为在计数方式时,最大的计数长度为28=256(个外部脉冲)。(个外部脉冲)。这种工作模式可省去用户软件中重装常数的语句,并可产生相当准确的这种工作模式可省去用户软件中重装常数的语句,并可产生相当准确的定时时间,特别适用于串行口波特率发生器。定时时间,特别适用于串行口波特率发生器。例例4:当引脚上的电平发生负跳变时,从输出一个当引脚上的电平发生负跳变时,从输出一个500s的同步脉冲。的同步脉冲。请编写程序实现该功能。请编写程序实现该功能。解:解:(1)模式选择)模式选择 选选T0为模式为模式2,对外部事件计数方式。,对外部事件计数方式。当引脚上出现负脉冲,当引脚上出现负脉冲,T0计数器加计数器加1,TF0置置1;使使T0为为500s定时工作方式,并使输出由定时工作方式,并使输出由1变为变为0。T0定时到产生溢出,使恢复高电平,定时到产生溢出,使恢复高电平,T0恢复外部事件计数恢复外部事件计数方式。方式。如图所示。如图所示。(2)计算初值计算初值 T0工作在外部事件计数方式工作在外部事件计数方式,当计数器初值为当计数器初值为0FFH时,时,再加再加1计数器就会溢出。计数器就会溢出。T0工作在定时器方式时工作在定时器方式时,设晶体振荡频率为,设晶体振荡频率为6MHZ,500s相当于相当于250个机器周期。因此,初值个机器周期。因此,初值X为为 (28X)2s=500sX=28250=6=06H(3)程序清单)程序清单START:MOV TMOD,#06H ;设置设置T0为模式为模式2,外部计数方式,外部计数方式 MOV TH0,#0FFH ;T0计数初值计数初值 MOV TL0,#0FFH SETB TR0 ;启动启动T0计数计数LOOP1:JBC TF0,PTF01 ;查询查询T0溢出标志,溢出标志,TF0=1时转移时转移 JMP LOOP1 ;TF0=0等待等待PTF01:CLR TR0 ;停止计数停止计数 MOV TMOD,#02H ;设置设置T0模式模式2,定时器方式,定时器方式 MOV TH0,#06H ;T0定时定时500s初值初值 MOV TLO,#06H CLR P1.0 ;清清0 SETB TR0 ;启动定时启动定时500sLOOP2:JBC TF0,PTF02 ;查询溢出标志,定时到查询溢出标志,定时到TF0=1转移转移 SJMP LOOP2 ;TF0=0等待等待PTF02:SETB P1.0 ;置置 1(到了第一个到了第一个500s)CLR TR0 ;停止计数停止计数 SJMP START#includemain()P1_0=1;while(1)TMOD=0X06;TH0=0XFF;TL0=0XFF;TR0=1;if(TF0)TR0=0;TF0=0;TMOD=0X02;TH0=0X06;TL0=0X06;P1_0=0;TR0=1;while(!TF0);/if(TF0)TF0=0;P1_0=1;/TR0=0;分析:分析:foscfosc =6MHz=6MHz 1 1机器周期机器周期 =2=2 S S 1KHz1KHz方波周期方波周期 =1=1 mS mS 半半个方个方波波周期周期 =500=500 S S 500uS2 uS=250 500uS2 uS=250 定时器最大若选择方式定时器最大若选择方式2 2 工作工作,8,8位数值为:位数值为:2 28 8=256=0FFH+1 =256=0FFH+1 可以满足要求。可以满足要求。计算初值计算初值:256256250=250=6 6从从P1.0 P1.0 脚输出频率脚输出频率=1KHz=1KHz方波。方波。设:晶振设:晶振=6MHz=6MHz。利用。利用T1T1定时中断。定时中断。Th:半周期:半周期T:周期:周期附录:附录:ORG 0000HORG 0000H AJMP AJMP MAINMAIN ORG 001BH ORG 001BH;T1T1的中断矢量的中断矢量 CPL P1.0 CPL P1.0 ;中断服务:取非中断服务:取非 RETI RETI ;中断返回;中断返回MAIN:MAIN:MOV TMOD MOV TMOD,#20H#20H MOV TH0 MOV TH0,#6#6 MOV TL0 MOV TL0,#6#6 SETB ET1 SETB ET1 SETB EA SETB EA SETB TR1 SETB TR1 HERE:HERE:AJMP AJMP HERE HERE ;原地等待中断;原地等待中断 ENDEND初初始始化化;选;选T1T1方式方式2 2;赋;赋重装值重装值;赋;赋初值初值;开;开T1T1中断中断;开总中断;开总中断;启动;启动T1T1#includemain()P1_0=1;TMOD=0X20;TH1=0X06;TL1=0X06;EA=1;ET1=1;TR1=1;while(1);void inre_T1(void)interrupt 3P1_0=P1_0;振荡器振荡器 12TL0(8位位)TF0申请申请中断中断T0T0端端C/T=0C/T=1控制控制=1开关接通开关接通TH0(8位位)TF1申请申请中断中断TR1TR1位位控制控制=1四、模式四、模式3及应用及应用GATEGATEM0(0)M1(0)C/TINT0INT0端端11&或门或门与门与门TR0TR0 TL0用原来的用原来的C/T,TF0和和T0引脚,引脚,INT0引脚。功能和操作与模式引脚。功能和操作与模式0、模、模式式1完全相同。完全相同。TH0只作简单的内部定时功能,占用定时器只作简单的内部定时功能,占用定时器T1的的TR1和和TF1。定时器定时器T1无模式无模式3。T0T0成为双成为双8 8位定时器位定时器 T1T1不再有定时器功能不再有定时器功能 TF1TF1,TR1TR1出借给出借给TH0TH0 振荡器振荡器 12TL0(8位位)TF0申请申请中断中断T0T0端端C/T=0C/T=1控制控制=1开关接通开关接通TH0(8位位)TF1申请申请中断中断TR1TR1位位控制控制=1GATEGATEM0(0)M1(0)C/TINT0INT0端端11&或门或门与门与门TR0TR0 在定时器在定时器T0模式模式3时,时,T1仍可设置为模式仍可设置为模式02。计数开关。计数开关K已被接通,已被接通,C/T切换其定时器或计数器工作方式就可使切换其定时器或计数器工作方式就可使T1运行。寄存器溢出时,只能运行。寄存器溢出时,只能将输出送入串行口或用于不需要中断的场合。将输出送入串行口或用于不需要中断的场合。一般情况下,当定时器一般情况下,当定时器T1设置为模式设置为模式2,用作串行口波特率发生器时,用作串行口波特率发生器时,定时器定时器T0才设置为工作模式才设置为工作模式3。例例5:设某用户系统中已使用了两个外部中断源,并置定时器设某用户系统中已使用了两个外部中断源,并置定时器T1为为模式模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,作串行口波特率发生器用。现要求再增加一个外部中断源,并由引脚上输出一个并由引脚上输出一个5KHZ的方波。的方波。fosc=12MHZ。解:解:设设T0工作模式工作模式3计数方式,把计数方式,把T0的引脚作附加的外部中断源的引脚作附加的外部中断源输入,输入,TL0的计数初值为的计数初值为FFH,当检测到,当检测到T0引脚电平出现由引脚电平出现由1到到0的负跳变时,的负跳变时,TL0产生溢出,申请中断。这相当于边沿触发的外产生溢出,申请中断。这相当于边沿触发的外部中断源。部中断源。T0模式模式3下,下,TL0作计数用,而作计数用,而TH0可作为可作为8位的定时器,定位的定时器,定时控制引脚输出时控制引脚输出5KHZ的方波信号如图所示。的方波信号如图所示。TL0的计数初值为的计数初值为FFH。TH0的计数初值的计数初值X计算如下:计算如下:方波为方波为5KHZ,故周期,故周期T=1/(5KHZ)=0.2ms=200s 所以用所以用TH0定时定时100s时,时,TH0的初值的初值X计算如下:计算如下:(28-X)1s=100sX=256-100=156=9CH程序如下:程序如下:MOV TMOD,#27H ;T0为模式为模式3,计数方式;,计数方式;T1为模式为模式2,定时方式,定时方式 MOV TL0,#0FFH ;置;置TL0计数初值计数初值 MOV TH0,#156(9CH);置;置TH0计数初值计数初值 MOV TH1,#data ;dataJ是根据波特率要求设置的常数是根据波特率要求设置的常数 MOV TL1,#data MOV TCON,#55H ;外中断;外中断0、1边沿触发,启动边沿触发,启动T0,T1 MOV IE,#9FH ;开放全部中断;开放全部中断 TL0溢出中断服务程序(由溢出中断服务程序(由000B转来)转来)TL0INT:MOV TL0,#0FFH ;TL0重赋初值重赋初值 (中断处理)中断处理)RETITH0溢出中断服务程序(由溢出中断服务程序(由001B转来)转来)TH0INT:MOV TH0,#156(9CH);TH0重赋初值重赋初值 CPL P1.0 ;取反输出;取反输出 RETI计算计数器的计数初值:编程时将计数初值送THi、TLi;可编程器件在使用前需要进行初始化:确定TMOD控制字:编程时将控制字送TMOD;开中断(如果使用中断方式):编程实置位EA、ETi TRi位置位控制定时器的启动和停止。例题1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500s的方波脉冲,并由 输出。试以中断方式实现。8051P1.0P1.0500s TMOD确定T1控制T0控制X XX XX XX X1 10 00 00 0M0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATE控制字10H 要产生500s 的方波脉冲,只需在端以250s为间隔,交替输出高低电平即可实现。为此,定时间应为250s 。使用6z晶振,则一个机器周期为2s,设待求计数初值为,则:计算计数器的计数初值;(216X)210-6=25010-6 即216X=125 X210FF83H所以,初值为:TH1=0FFH,TL1=83H6-125=10000H-7DH 采用中断方式:编程时打开全局和局部中断。由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止。TR11,启动;TR10,停止。程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 001BH LJMP INTT1 ;T1中断入口INTT1:MOV TH1,#0FFH ;重新设置初值 MOV TL1,#83H ;输出取反 RETI ORG 1000HMAIN:MOV TMOD,#10H ;T1为方式1 MOV TH1,#0FFH MOV TL1,#83H ;初值 SETB EA ;允许中断 SETB ET1 SETB TR1 ;启动定时 SJMP$;等待中断主程序:中断处理程序:#includemain()TMOD=0 x00;TL0=0X18;TH0=0XE0;P1_0=0;EA=1;ET0=1;TR0=1;while(1);void inter_T0()interrupt 1 TL0=0X18;TH0=0XE0;P1_0=P1_0;例题2:设晶振频率fOSC=6MHz,分别讨论各种工作方式下最长定时时间。解:1.由fOSC=6MHz可知,MC=2us;2.由于是加1计数,所以最长定时应是计数初值最小时(即为0时)的定时时间。所以此时有:方式0:(2130)2us=214方式1:(2160)2us=217方式2、3 (280)2us=29注意:以上是当fOSC=6MHz,即MC=2us时各种方式下的定时时间,若fOSC=12MHz,则最长定时时间将缩短一半。第五章上机实验(1)1.分别用2种定时方式使P1口输出信号,轮流点亮8个LED,每个LED点亮时间为50ms。方式1:利用调用延时子程序方式;方式2:利用定时器定时50ms,设晶振频率为12MHz;参考习题13。2.每个LED点亮时间为2s。参考P9596 接口实训(一)一.定时器/计数器应用实训。T1控制T0控制0 01 10 00 0X XX XX XX XM0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATE控制字02H3.题目中没有指明用T0还是T1,可任意,我 们用T0。确定TMOD控制字 计算计数器的计数初值;(28X)210-6=50010-6 即28X=250 X28-250=100H-FAH 06H所以,初值为:TH0=06H,TL0=06H 采用中断方式:编程时打开全局中断:置位EA 局部中断:置位ET0。置位TR0位控制定时器的启动。程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP INTT0 ;T0中断入口INTT0:;输出取反 RETI ORG 1000HMAIN:MOV TMOD,#02H ;T0为方式2 MOV TH0,#06H MOV TL0,#06H ;初值 SETB EA ;允许中断 SETB ET0 SETB TR0 ;启动定时 SJMP$;等待中断主程序:中断处理程序:8051RLED7.RLED0.题13 思路:1.通过分别送“1”给8个灯;2.每次持续时间20分之一秒,即50ms,由定时器T0来定时,又知fOSC=6MHz,由例题2可知可用方式1。T1控制T0控制1 10 00 00 0X XX XX XX XM0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATE控制字01H确定TMOD控制字 计算计数器的计数初值;(216X)210-6=5010-3 即216X=25000 X216-25000=10000H-61A8H 9E58H所以,初值为:TH1=9EH,TL1=58H 采用中断方式:编程时打开全局中断:置位EA 局部中断:置位ET0。置位TR0位控制定时器的启动。程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP INTT0 ;T0中断入口 ORG 1000HMAIN:MOV TMOD,#01H ;T0为方式1 MOV TH0,#9EH MOV TL0,#58H ;初值 SETB EA ;允许中断 SETB ET0 SETB TR0 ;启动定时 MOV A,#01H ;LED0先亮 MOV P1,A ;SJMP$;等待中断主程序:中断处理程序:INTT0:MOV TH0,#9EH ;重新设置初值 MOV TL0,#58H RL A ;依次点亮 RETIRLED3RLED0RLED1RLED2RLED4RLED5RLED6RLED78051上机实验1:方法1.调用50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。下面为延时子程序清单:DEL:MOV R7,#200 ;1MCDEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$;2MC DJNZ R7,DEL1 ;2MC RET ;2MC延时时间:t=1+200(1+1+2*123+2)+2 50000us=50ms程序清单:ORG 1000H MOV A,#01HLOOP:MOV P1,A LCALL DEL RL A SJMP LOOP ORG 1100HDEL:MOV R7,#200DEL1:MOV R6,#123 NOP DJNZ R6,$DJNZ R7,DEL1 RET主程序子程序上机实验2:P9596 接口实训1.定时器/计数器应用实训实训内容:利用T0定时,产生2s定时,使得P1口输出信号,控制8个发光二极管循环点亮,设fOSC=12MHz,。难点:P1口输出信号,控制8个发光二极管循环点亮的解题思路见习题5-13,但此处由于定时时间长达2s,所以单靠一个定时器不能解决问题。可以采取硬件定时和软件计数(或硬件计数)结合方式。方法2:见习题13,但时间常数为3CB0H硬件定时与软件计数结合方式解题思路:让T0作定时器用,如T0可以定时50ms,每当定时时间到,在T0中断处理程序中一个寄存器内容加1,同时判断是否加到2000/50=40,如果不到40,则直接返回,如果计到40,说明2s时间到,使P1口循环点亮8个发光二极管后再返回。T0工作在方式1,控制字01H,计数初值:(216X)110-6=5010-3 即216X=50000 X216-50000=10000H-C350H 3CB0H所以,初值为:TH1=3CH,TL1=B0H程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP INTT0 ;T0中断入口 ORG 1000H ORG 1000HMAINMAIN:MOV TMODMOV TMOD,#01H#01H ;T0T0为方式为方式1 1 MOV TH0 MOV TH0,#3CH#3CH MOV TL0 MOV TL0,#B0H#B0H ;初值;初值 SETB EA SETB EA ;允许中断;允许中断 SETB ET0SETB ET0 SETB TR0 SETB TR0 ;启动定时;启动定时 MOV A,#01H ;LED0MOV A,#01H ;LED0先亮先亮 MOV P1,A ;MOV P1,A ;MOV R0,#0 MOV R0,#0 SJMP$SJMP$;等待中断;等待中断主程序:中断处理程序:INTT0INTT0:MOV TH0MOV TH0,#3CH#3CH ;重新设置初值;重新设置初值 MOV TL0MOV TL0,#B0H#B0H INC R0 INC R0 CJNE R0,#40,NEXT CJNE R0,#40,NEXT ;不等直接返回;不等直接返回 MOV R0,#0 ;2sMOV R0,#0 ;2s到到 RL A RL A ;依次点亮;依次点亮 NEXT:RETINEXT:RETI*硬件定时与硬件计数结合方式解题思路:将引脚与引脚即T1脚连接起来。让T0作定时器用,T1座计数器用,如T0可以定时50ms,每当定时时间到,在T0中断处理程序中通过给T1脚输入负脉冲,使T1计数,当计数到2000/50=40时,说明2s时间到,在T1的中断处理程序中使P1口循环点亮8个发光二极管。*第五章上机实验(2)交通灯控制(定时器延时法)-详见指导书 第五章上机实验(3)中断控制应用-参考教材p9596一级中断部分。8051RLED7.RLED0.INT0INT0每当INT0引脚输入的中断请求(边沿触发)被响应后,的状态取反后从输出。第五章上机实验(4)外部中断实验(急救车与交通灯)-详见指导书