第7章 单片机的定时器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

§5-2定时/计数器一、定时/计数器的结构51子系列单片机内有两个十六位增一定时/计数器TH0计数值高八位TL0计数值低八位TH1计数值高八位TL1计数值低八位TMODTCON工作方式定时/计数控制控制控制P3.4P3.55.2.1定时器的控制1、工作方式控制寄存器TMODTMODM0M1C/GATEM0M1C/GATETTT1T0GATE——门控位。GATE=0启动不受/INT0或/INT1的控制;GATE=1启动受/INT0或/INT1的控制。C/T——外部计数器/定时器方式选择位C/T=0定时方式;计内部脉冲数。机器周期。C/T=1计数方式;计外部脉冲数。M1M0——工作模式选择位(编程可决定四种工作模式)。图5-5定时器工作模式寄存器TMODGATEC/TM10MGATEC/T1M0M控制T1控制T089H和T类同01M0M00011011方式方式0方式1方式2方式301定时器模式计数器模式01与INT无关00与INT有关2、定时/计数器控制寄存器TCON(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0能否启动定时/计数器工作与GATE有关,分两种情况:GATE=0时,若TRi=1,开启Ti计数工作;(i=0或1)若TRi=0,停止Ti计数。GATE=1时,若TRi=1且/INTi=1时开启Ti计数;若TRi=1且/INTi=0时不能开启Ti计数。若TRi=0,停止Ti计数。TR1——定时/计数器1运行控制位。(用法与TR0类似)TCON位地址0DD1D2D3D4D5D6D7IT0IE0IT11IETR0TF0TR1TF188898A8B8C8D8E8F见下一节{00:停T计数01:启T计数00:无T中断(硬件复位){1:有T溢出中断00:无T中断(硬件复位)10:停T计数{1:有T溢出中断1:启T计数{111图5-6定时器工作模式寄存器TCON返回本节三、定时/计数器的四种工作模式M1M0模式说明00013位定时/计数器高八位TH(7~0)+低五位TL(4~0)01116位定时/计数器TH(7~0)+TL(7~0)1028位计数初值自动重装TL(7~0)TH(7~0)113T0运行,而T1停止工作,8位定时/计数。5.2.2定时模式1、模式0计数寄存器TLi低5位+THi8位TLi(5位)THi(8位)TFi中断请求控制BASC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=10~40~7中断允许(T1、T0的等效逻辑结构)C//T=0——定时;C//T=1——对外计数。定时:fosc/12=1/(12/fosc)=1/T波形等间隔,次数已定,时间确定即对机器周期进行计数。左图定时时间为N*TN个方波T计数:脉冲不等间隔。每个下降沿计数一次确认一次负跳变需两个机器周期,所以,计数频率最高为fosc/24。能否启动定时/计数器工作与GATE有关,分两种情况:GATE=0时,若TRi=1,开启Ti计数工作;(i=0或1)(内部控制)若TRi=0,停止Ti计数。GATE=1时,若TRi=1且/INTi=1时开启Ti计数;(外部控制)若TRi=1且/INTi=0时不能开启Ti计数。若TRi=0,停止Ti计数。2、模式1与模式0相似。与模式0的区别:计数位数不同。计数寄存器:THi(高8位)+TLi(低8位)TFi中断TLi(8位)THi(8位)0~70~7控制BASC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=13、模式2与模式0、1的区别:1)计数位数不同;(Tli为8位计数器)2)初值自动重装。(THi为常数寄存器)TFi中断TLi(8位)THi(8位)控制BASC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=14、模式3(T1关闭)T0定时/计数,而T1停止计数,T0分成两独立定时/计数器TL0和TH0。TL0使用C//T、GATE、TR0、/INT0、TF0可进行定时和计数,TH0使用TR1、TF1因此,只能用于定时。TF0中断控制BASC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=1TL0(8位)振荡器1/12TH0TF1中断(a)TL0作8位定时/计数器(b)TH0作8位定时器模式3时,T1可定时为模式0、1、2的定时/计数,但不可中断,所以一般只作串口波特率发生器用。振荡器1/12TL1(5位)TH1(8位)串行口C/T=0C/T=1T1(P3.5)振荡器1/12TL1(8位)TH1(8位)串行口C/T=0C/T=1T1(P3.5)TLi(8位)THi(8位)振荡器1/12C/T=0C/T=1T1(P3.5)串行口(a)T0模式3时T1模式0(b)T0模式3时T1模式1(c)T0模式3时T1模式2编程前确定参数:(1)确定工作模式(2)正确设置IP、IE、TCON和SCON各位的状态。(3)设置计数初值——加1计数计数初值:X=2n-(fosc/12)•T;2n为最大计数值。2n=213=8192(模式0)2n=216=65536(模式1)2n=28=256(模式2、模式3)T表示定时时间。5.2.3定时/计数器的应用编制初始化程序基本步骤:1)确定工作方式,对TMOD和TCON等赋值;2)确定预置定时或计数的初值X;3)根据需要开放中断;4)启动定时/计数器工作(TRi)。一、定时模式0的应用例:设fosc=6MHZ,要求由P1.0输出一个周期为500微秒的方波信号,该方波的周期用T1确定,采用查询方式实现。1、确定计数初值X晶振频率fosc=6MHZ,机器周期=12/fosc=2微秒定时时间T=500/2=250微秒计数初值X=213-(fosc/12)•T=8192-125=8067=1111110000011B2、确定TMOD中的控制字T1设置为模式0,则其控制字为00H。3、向TCON写控制字,启动T1工作若TR1=1,开启T1计数工作;若TR1=0,停止T1计数。=1111110000000011B,FC03H00011TL011111100TH0FCH03H高八位放入TH1中。低五位放入TL1中,高3位填0。MOVTMOD,#00HMOVTL0,#03HMOVTH0,#0FCHMOVIE,#00HSETBTR1LOOP:JBCTF1,LOOP1AJMPLOOPLOOP1:MOVTL0,#03HMOVTH0,#0FCHCLRTF1CPLP1.0AJMPLOOP4、程序清单ORG100H小结:1、MCS-51单片机内有几个定时计数器?如何计数?2、T0、T1有几种工作方式?3、编程应用前要事先确定的参数有几个?TF1TR1TF0TR0IE1IT1IE0IT0M0M1C/GATEM0M1C/GATETTTMODTCON复习:例2、设fosc=6MHz,利用单片机内定时/计数器及P1.0口线输出1000个脉冲,脉冲周期为2mas,试编程。8031P1.0T12msT=12×1/fosc=2us选取T0定时;T1计数。设T0采用中断方式产生周期为2ms方波,T1对该方波计数,当输出至第1000个脉冲时,使TF1置1。在主程序中用查询方法,检测到TF1变1时,关掉T0,停止输出方波。T0、T1参数的确定:T0模式0、定时:脉宽为脉冲周期的一半所以,X=213-1ms/2us=0001111000001100BTH0=0F0H;TL0=0CHT1模式1、计数:N=1000则X=65536-1000=64536=0FC18H(若选模式0也可以,此时X=7192=1C18H)程序:ORG0000HLJMPMAINORG000BHLJMPTOSORG1000HMAIN:MOVTMOD,#50H;T0定时,模式0;T1计数,模式1MOVTL0,#0CHMOVTH0,#0F0HMOVTL1,#18HMOVTH1,#0FCHSETBTR1SETBTR0SETBET0SETBEAWAIT:JNBTF1,WAIT;查询1000个脉冲计够没有到?CLREACLRET0ANLTCON,#0FH;停T0、T1SJMP$TOS:MOVTL0,#0CHMOVTH0,#0F0HCPLP10RETIEND四、定时模式3的应用•例:用定时器T0的定时模式3,分别产生200us和400us的定时中断,使fosc=6MHZ的单片机的P1.0和P1.1上产生400us和800us的方波。•1、计算计数初值机器周期=12×1/fosc=2usT=200us时,X=28-(fosc/12)•T=256-100=156=9CHT=400us时,X=28-(fosc/12)•T=256-200=56=38H2、T0定时模式3控制字TMOD=00000011B•程序清单:RESET:AJMPMAINORG000BHAJMPITOPORG001BHAJMPITIPORG0100HMAIN:MOVSP,#60HACALLPTOM3HERE:AJMPHEREPTOM3:MOVTMOD,#03HMOVTL0,#9CHMOVTH0,#38HSETBTR0SETBTR1SETBTR1SETBET1SETBEARETITOP:MOVTL0,#9CHCPLP1.0RETIITIP:MOVTH0,#38HCPLP1.1RETI五、GATE功能的使用脉冲高电平(计数)长度值存于21H、20H中,脉冲低电平长度存于23H、22H中。电路连接如下图所示。解:复习GATE的用法:GATE=0时,TRi=1,即可启动Ti定时/计数GATE=1时,TRi=1,且=1,才启动定时/计数。INTi80310INT1INTP3.2P3.11被测信号2103T0计数T1计数ORG0000HLJMPMAINORG2000HMAIN:MOVTMOD,#99H;T0、T1均工作在定时,;模式1,GATE=1MOVA,#00H;T0、T1赋计数初值00H,;定时器最大计数值为0000~65536MOVTL0,AMOVTH0,AMOVTL1,AMOVTH1,ATEST0:JBP3.2,TEST0;检测是否到0点(INT0脚)SETBTR0;到0点,TR0=1,做好取计时值准备。TEST1:JNBP3.2,TEST1;检测是否到1点SETBTR1;到1点T0计时;TR1=1,做好T1计时准备。TEST2:JBP32,TEST2;检测是否到2点CLRTR0;到2点,停止T0计时,T1开始计时。MOV20H,TH0;保存T0计时结果MOV21H,TL0TEST3:JBP33,TEST3;检测是否到3点CLRTR1;到3点,停止T1计数MOV22H,TH1;保存T1计数结果MOV23H,TL1LCALLDISPSJMP$小结:1、定时/计数的四种方式是怎样的?2、如何计算计数初值?如何编程送入计数初值?3、GATE的用法是怎样的?

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功