(1)M1M0=10时,定时器工作在方式2,8位的可自动重装载的定时/计数方式.(2)16位的计数器被拆成两个8位,其中TL0作为自加 的8位计数器,TH0不负责计数但负责放置待自动重新载入的初值.当TL0计数溢出,置TF0,TH0中的初值自动装入TL0,继续计数, 循环重复计数.TH0/TL0赋相同的值.NOTE:(3)用于计数工作方式时,最大计数值为:28=2 56(个外部脉冲).(MOVTL0,#00H)用于定时工作方式时,其定时时间为;t=(28—TH0初值 )×时钟周期×12(4)这种工作方式可省去用户重装常数的程序,并可产生精确的定时时间,特别适用作串行口波特率发生器.(串行口工 作方式1)Tm机器周期分析:fosc=6MHz1Tm=2?s1kHz方波周期=1/f=1/1kHz=1ms 半个方波周期=500?s=0.5ms500us÷2us=250若选择方式2工作,8位定时器最大数值为:28= 256=0FFH+1(记忆!)可以满足要求.计算初值:256-250=6.(小软件)例3:从P1.0脚输出频率=1kH z方波.设:晶振=6MHz.利用T1定时中断.Th:半周期T:周期 ORG0000H AJMPMAIN ORG001BH ;T1的中断矢量 CPLP1.0 ;中断服务:P1.0取非 RETI ;中断返回MAIN:MOVTMOD,#20H ;选T1方式2(00100000) MOVTH1,#06H ;赋重装值 MOVT L1,#06H ;赋初值 SETBEA ;开总中断 SETBET1 ;开T1中断 SETBTR1 ;启动T1 SJMP$ ;原地等待中断 END初始化 方式0(了解,一般不用)定时器T0/T1工作于13位定时计数方式(1)用于计数方式时最大计数值为213=8192个脉冲( 2)用于定时工作方式时,定时时间为:t=(213一T0初值)×时钟周期×12(3)在这种模式下,16寄存器(TH x和TLx)只用13位,其中THx占高8位,TLx占低5位,TLx的高3位未用.(4)当TLx的低5位溢出时向THx进位,而TH x溢出时硬件置位TF0,并申请中断.(5)定时、计数溢出否可查询TF0是否置位,如果开中断则产生溢出中断.Tm机器周期 方式3(SplitTimerMode了解):Timer0被分割成两个8位定时/计数器TL0和TH0,并占用原本是Timer1 使用的TF1/TR1标志位和运行控制位;TL0使用T0的状态控制位GATE、C/T、TR0;TH0被固定为一个8位定时器(不能作 外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1.振荡器?12TL0( 8位)TF0申请中断T0端TR0位GATE位INT0端≥1&C/T=0C/T=1控制=1开关接通或门与 门TH0(8位)TF1申请中断TR1位控制=1Timer工作方式3结构:?T0成为两个8位Timer? T1的TF1,TR1借给TH05.5定时计数器的初始化编程(重点,熟练掌握)(1)确定是定时还是计数方式,定时的话 ,TMOD中的C/T为O,计数时C/T=l;(2)确定定时/计数时是否受外部的硬件信号控制.若不受外部INT0或INT1 引脚控制时,TMOD中的GATE位为0,否则需设成1;(3)决定计数器的模式,模式0时最大计数值为8192且不能自动载入;模式1 时最大计数值为65536,同时计数器没有自动载入的功能;模式2时最大计数值为256,可自动载入计数值;模式3时有两个计数器,其最大 计数值都是256;(4)将前3个步骤的结果结合起来,成为一个BYTE的数据赋给TMOD寄存器;GATEC/TM1 M0GATEC/TM1M0T1 T0(5)决定寄存器TH0/TLO,TH1/TL1的设置值,由于8051上的计数器都属于可载入式的上加型计数器 (Up-Couner),所以正确的设置值应该是:该计数器的最大可计数值减去欲计数值,然后将该结果分成两部分后,再传到THx和TLx 两个寄存器;(6)根据需要,如果工作于中断方式,需要开放中断,置位EA(中断总开关)及ETx(允许定时/计数器中断),并编中断服 务程序,对IE/IP寄存器编程;(7)在适当的时机中将TCON中的TR1和TR0位设成1,开始让Timer动作。 例4:如右图所示,P1口接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,设晶振为6MHz.分析:利用T1完成1 00ms的定时,当P1口线输出“1”时,发光二极管亮,每隔100ms”1”左移一次,采用定时方式1,先计算计数初值: (1)Tm=2us(2)100ms/2us=50,000 (小软件)(3)65536-5000 0=15536=3CB0H(熟练掌握)①查询方式如下:(Keil演示) ORG0000H MOVA,#01H ;置第一个LED亮 MOVTMOD,#10H;T1工作于定时方式1,0001 0000NEXT:MOVP1,A MOVTH1,#3CH MOVTL1,#0B0H ;定时100ms SETBTR1 ;启动定时器AGAI: JBCTF1,SHI ;100m s到,TF1=0,转SHI,并清TF1 SJMPAGAI ;Jumpifthebitissetand clearthebitSHI: RLA ;A=02H SJMPNEXT END②中断方式(K eil演示) ORG0000H AJMPMAIN ;单片机复位后从 0000H开始执行 ORG001BH ;定时器T1中断服务程序 AJMPIN T1_SERV ;转移到INT1_SERV ORG0030H ;主程序MAIN: MOV A,#01H MOVP1,A ;置第 一个LED亮 MOVTMOD,#10H ;00010000T1工作于定时方式1 MOVT H1,#3CH MOVTL1,#0B0H ;定时100ms SETBEA SETBET1 ;允许T1中断 SETBTR1 ;启动T1工作 SJMP$ ;等待中断 INT1_SERV:RLA ;中断服务程序,左移一位 MOVP1,A ;下一个发 光二极管亮 MOVTH1,#3CH MOVTL1,#0B0H ;special重装计数初值 RETI ;中断返回 END以上程序进入循环执行,八个LED一直循环轮流点亮.例5: 在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮1秒灭1秒周而复始,设fosc=6MHz.分析:16位定时最大 为2162us=131.072ms,显然不能满足要求,可用以下两种方法解决.(长定时special)fosc=6MHz 方式0:Tmax=2^132us=81922=16.384ms方式1:Tmax=2^162us=131.072ms(了解 这个数量级)方式2/3:Tmax=2^82us=0.512msfosc=12MHz方式0:Tmax=2^131us=8. 192ms方式1:Tmax=2^161us=65.536ms(了解这个数量级)方式2/3:Tmax=2^81us=0.25 6msT:周期分析:fosc=6MHz,1Tm=2us,T=2s,半个方波周期=1s=1000ms1000ms÷2u s=500,000若选择方式1工作,16位定时器最大值为65,536<500,000所以设定:采用10100ms的方式 对于100ms,100ms/2us=50,00065536-50000=15536D=3CB0H(不要算错)解1:T0每 隔100ms中断一次,利用软件对T0的中断次数进行计数,中断10次即实现了1秒的定时.(重要,KEIL演示) ORG000 0H AJMPMAIN ORG000BH AJMPT0INT ORG0030H MAIN:CLRP1.7 MOVTMOD,#01H MOVTH0,#3CHMOVTL0,#0B0H MOVR7,#10 ;中 断10次计数 SETBET0SETBEA SETBTR0 SJMP $ T0INT:DJNZR7,RET0 CPLP1.7 MOVR7,#10 RET0: MOV TH0,#3CH MOVTL0,#0B0H RETI END解2:采用T0产生周期为200 ms脉冲,即P1.0每100ms取反一次作为T1的计数脉冲,T1对下降沿计数,因此T1计5个脉冲正好1000ms.(加了硬件spe cial)T0采用方式1,定时器模式,X=65536-100,000/2=15536=3CB0H,T1采用方式2,计数 器模式计数初值X=256-5=251=0FBH均采用查询方式,流程图和程序如下: ORG0000H MAIN: CLRP1.7 SETBP1.0 MOVTMOD,#61H ;01100001 T1计数器方式2T0定时器方式1 MOVTH1,#0FBH ;定时器1赋初值 MO VTL1,#0FBH SETBTR1LOOP1:CPLP1.7LOOP2:MOVTH0,#3CH MOVTL0,#0B0H SETBTR0 ;程序中用JBC指令对定时/计数溢出标志位LOOP3:JB CTF0,LOOP4 ;进行检测,当标志位为1时跳转并清标志 SJMPLOOP3 LOOP4:CPL P1.0 JBCTF1,LOOP1 AJMPLOOP2 END例6: 有P3.4引脚(T0)输入一低频信号(其小于0.5kHz),要求P3.4每发生一次负跳变时,P1.0输出一个500us同步负脉冲 ,同时P1.1输出一个1ms的同步正脉冲.已知晶振频率为6MHz.P3.4500us1ms定时方式计数方式计数 方式(初值FFH)定时方式1ms500usP1.0P1.1解:按题意,初态P1.1输出高电平(系统复位时实 现),P1.1输出低电平,T0选方式2计数方式(计一个脉冲,初值为FFH).当加在P3.4(T0)上的外部脉冲负跳变时,T0加1 ,计数器溢出,程序查询到TF0为1,改变T0为500?s定时工作方式,并使P1.0输出0,P1.1输出1.T0第一次定时500?s 溢出后,P1.0恢复为1,T0第二次定时500?s溢出后,P1.1恢复为0,T0恢复外部脉冲计数.(领会其思路)设定时500us 的初始值为X,则: X=256-500/2=6源程序如下:BEGIN:MOVTMOD,#06H ;00 000110T0计数模式方式2MOVTH0,#0FFH ;计数一个脉冲 MOVTL0,#0FFHCLRP1.1 ;P1.1初值为0 SETBTR0 ;启动计数器DELL:JBCTF0,RESP1 ;检测外跳变信号 AJMPDELLRESP1:CLRTR0MOVTMOD,#02H ;0 0000010T0定时模式方式2500us MOVTH0,#06H;重置定时初值 MOVTL0,#06H SETBP1.1;P1.1置1 CLRP1.0;P1.0清0题意要求 S ETBTR0;启动定时计数器DEL2:JBCTF0,RESP2;检 测第一次500us到否AJMPDEL2RESP2:SETBP1.0 ;P1.0恢复1,题意要求DEL3:JBCTF0,RESP3;检测第二次5 00us到否AJMPDEL3RESP3:CLRP1.1 ;P1.1复0,题意要求CLRTR0AJMPBEGIN例 7如图所示,如果要在P1.0产生周期为3ms、占空比为2/3的脉冲波,应该如何编写程序。(fosc=12MHz)(分析,占空比, 理解) ORG0000H LJMPMAINMAIN: MOVTMOD,#01H MOVTL0,#18H MOV TH0,#0FCH ;1ms定时 MOVR2,#02H SETBTR0LOOP: JBCTF0,CPLP ;查询 方式 AJMPLOOPCPLP: MOVTL0,#18H MOVTH0,#0FCH ;重新赋值 JBP1.0,CP LP1 CPLP1.0 MOVR2,#02H AJMPLOOPCPLP1: DJNZR2,LOOP CPLP 1.0 AJMPLOOP ENDkeil5.6门控位GATE的应用门控位GATE为1时,TRx=1 ,INTx=1才能启动定时器.利用这个特性可以测量外部输入脉冲的宽度.例8:利用T0门控位测试INT0引脚上出现的正脉冲宽度 ,已知晶振频率为12MHz,将所测得值最高位存入片内71H单元,低位存入70H单元.解:设外部脉冲由INT0(P3.2)输入, T0工作于定时方式1(16位计数),GATE设为1. 测试时,应在INT0为低电平时,设置TR0为1(16位计数);当INT 0变为高电平时,就启动计数;再次变低时,停止计数.此计数值与机器周期的乘积即为被测正脉冲的宽度. 因fosc=12MHz, 机器周期为1us,测试过程如下:源程序如下:(分析)MOVTMOD,#09H;00001001 T0GATE=1方式1MOVTL0,#00H;设置初值MOVTH0,#0 0HMOVR0,#70HJBP3.2,$;等待INT0 (P3.2)低SETBTR0;启动T0准备工作JNB P3.2,$;等待INT0(P3.2)升高JBP3.2,$ ;等待INT0(P3.2)降低CLRTR0 ;停止计数T0从0开始计数INT009H(TMOD)1TR00 TR0T0停止计数TMOV@R0,TL0;存放结果 INCR0MOV@R0,TH0SJMP$ 这种方案被测脉冲的宽度最大为65535个机器周期.由于靠软件启动和停止计数,有一定的测量误差 .其可能的最大误差与指令的执行时间有关.此例中,在读取定时器的计数之前,已把它停住.但在某些情况下,不希望 在读计数值时打断定时的过程,由于我们不可能在同一时刻读取THx和TLx的内容.读取一个时恰好另一个产生溢出,在这种情况下,读取的计 数值有可能是错的.可以解决错读的方法是:先读THx后读TLx,若两次读得的THx没有发生变化,则可确定读到的内容是 正确的.若前后两次读到的THx有变化,则再重复上述过程,重复读到的内容就应该是正确的了.下面是按此思路编写的程序段,读到的TH0和 TL0放在R1和R0内: ……REPEAT: MOVA,TH0; MOVR0,TL0; CJ NEA,TH0,REPEAT; MOVR1,A ……1.定时器/计数器对输入信号的要求 外部输入的计数脉冲的最高频率为系统振荡器频率的1/24,例如选用12MHz频率的晶体,则可输入500kHz的外部脉冲. 对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期.故对 外部输入信号的基本要求如图所示,图中Tcy为机器周期.扩展:8052系列有TIMER2SFR:T2CONT2MODR CAP2LRCAP2HTL2TH2PIN:T2(P1.0)T2EX(P1.1).Timer2in Auto-ReloadModeTimer2inCaptureModeTimer2asaBaudRateG enerator第5章单片机的定时器/计数器(学生事先必须预习,本章是一个难点、重点)5.1计数概念的引入 5.2定时器/计数器的工作原理5.3和定时器/计数器有关的6个寄存器5.4定时器的四种工作方式5.5定时计数器的初 始化编程(熟练掌握)5.6门控位GATE的应用5.1计数概念的引入生活中计数的例子处处可见.例:录音机上 的计数器、家里面用的电度表、汽车上的里程表等等.再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测量长度,怎么测 法呢?用尺量?不现实,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的方法,用一个周长是1米的轮子,将电缆绕在上面一周,由线 带轮转,这样轮转一周不就是线长1米嘛,所以只要记下轮转了多少圈,就可以知道走过的线有多长. 从一个生活中的例子看起:一个 水盆在水龙头下,水龙头没关紧,水一滴滴地滴入盆中.水滴不断落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满.录音机上的计数器 最多只计到999….那么单片机中的计数器有多大的容量呢?8051单片机中有两个计数器,分别称之为Timer0和Timer1,这两个 计数器分别是由两个8位的RAM单元(TH/TL)组成的,即每个计数器都是16位的计数器,最大的计数量是65536(记忆!FFF FH+1).计数与定时的内在统一 8051中的计数器除了可以作为计数之用外,还可以用作时钟,时钟的用途当然很大,如打铃器 ,电视机定时关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢?时钟的秒针,走一圈需要走60次,耗费的时间是 60s,所以时间就转化为秒针走的次数了,可见,计数的次数和时间之间的确十分相关.那么它们的关系是什么呢?那就是秒针每1次走动的时间 正好是1秒.因此只要计数脉冲的间隔相等,则计数值就代表了时间的流逝.溢出 让我们再来看水滴的例子,当水不断落下,盆中 的水不断变满,最终有一滴水使得盆中的水满了.这时如果再有一滴水落下,就会发生什么现象?水会漫出来,用个术语来讲就是“溢出over flow”.水溢出是流到地上,而计数器溢出后将使得TF0变为“1”.一旦TF0由0变成1,就是发生了变化,产生了变 化就会引发事件,就象定时的时间一到,闹钟就会响一样.引发的事件,就是系统需要响应定时/计数中断服务程序了,现在我们来研究另一个问题 :要有多少个计数脉冲才会使TF0由0变为1.任意定时及计数的方法刚才已研究过,计数器的容量是16位,也就是最大 的计数值到65536,因此计数计到65536就会产生溢出.问题是在现实生活中,经常会有少于65536个计数值的要求,如包装线上,一 打为12瓶,一瓶药片为100粒,怎么样来满足这个要求呢?提示:如果是一个空的盆要10000滴水滴进去才会满,我在开始 滴水之前就先放入一勺水,还需要10000滴嘛?我们采用预置数的方法,要计数100次,那就先放进65436,再来100 个脉冲,不就到了65536了吗.定时也是如此,假设每个脉冲是1us,则计满65536个脉冲需时65.536ms.如果现在只要10m s定时怎么办?10个ms为10,000个us,所以,只要在计数器里面放进65536-10000=55536就可以了.1.51 系列单片机片内有两个十六位定时/计数器: 定时器0(Timer0)和定时器1(Timer1)Note:随着单片机型号的不同, 内部定时器的个数会不一样2.两个定时器都有定时或事件计数的功能,可用于(1)内部定时控制;(2)对外部事件计数和检测等场合3 .定时/计数器实质是加1计数器. T0由2个8位SFRTH0和TL0构成, T1由2个8位SFRTH1和TL1构成 .5.2定时器/计数器的工作原理4.每个定时器都可由软件设置为定时工作方式(C/T=0)或计数工作方式(C/T=1) (MOVTMOD,#H)5.T0和T1受特殊功能寄存器TMOD和TCON控制.6.定时器/计数器一旦启动,便可以和C PU并行工作,对提高CPU工作效率和简化外围电路大有益处.7.定时工作方式(1)设置为定时工作方式时,定时器计数的脉冲是由 51单片机片内振荡器经12分频后产生的.(2)每经过一个机器周期定时器(T0或T1)的数值加1直至计数满产生溢出.(记忆!)如 :当8051采用12MHz/6MHz/11.0592MHz(12/)晶体时,每个机器周期为1us/2us/1.085us,计数值 加1,耗费一个机器周期,相当于消耗了1us/2us/1.085us振荡器?12TLxTHx(8位)( 8位)TFx申请中断TxPinTRx位GATE位INTxPin≥1&C/T=0C/T=1=1接通= 0断开或门与门TF1TR1TF0TR0IE1IT1IE0IT0TCONGAT EC/TM1M0GATEC/TM1M0TMOD复习:(1)振荡 周期Tc(Clock):也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期.(晶振频率的倒数)(2)状态周期Ts(St atus):每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的.(用的少)(3)机器周期Tm(Machine):一个机 器周期包含6个状态周期S1-S6,也就是12个时钟周期.在一个机器周期内,CPU可以完成一个独立的操作.(12MHz~1us6 MHz~2us记忆)(4)指令周期Ti:它是指CPU完成一条操作所需的全部时间.每条指令执行时间都是有一个或几个机器周期组 成.MCS51系统中,有单周期指令、双周期指令和四周期指令.8.计数工作方式(1)设置为计数工作方式时,通过引脚T0(P 3.4)和T1(P3.5)对外部脉冲信号计数.(2)当输入脉冲信号产生由1至0的下降沿时,定时器的值加1,在每个机器周期,CP U采样引脚T0和T1的输入电平.若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1.(3)由于检测一个1至0的跳 变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一.(4)虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前 至少被采样一次,要求电平保持时间至少是一个完整的机器周期.5.3和定时器/计数器有关的6个寄存器1-4.TH0 (TimerHigh)定时器/计数器0高字节(8Ch)TL0(TimerLow)定时器/计数器0 低字节(8Ah)TH1定时器/计数器1高字节(8Dh) TL1 定时器/计数器1低字节(8Bh)TF1/TF0:Timer1/0ov erFlowflag.定时器溢出中断申请标志位SetbyhardwarewhentheTimer/Counter 1/0overflows.Clearedbyhardwareasprocessorvectorstothei nterruptserviceroutine.=0定时器未溢出;=1定时器溢出申请中断,进中断后自动清零.5 .TCON:定时器/计数器控制寄存器,用于T/C的管理与控制TIMER/COUNTERCONTROLREGISTER.BI TDDRESSABLE(88h)按bit记忆,TR/TF/IE/IT(Run/overFlow/Edge/Type)高 四位被定时器使用,低四位被外部中断使用TF1TR1TF0TR0IE1IT1IE0IT0T1 请求有/无T1工作启/停T0请求有/无T0工作启/停INT1 请求有/无INT1方式下沿/低电平INT0请求有/无INT0方式下沿/低电平TR1/TR0 :T1/T0运行控制位Timer1/0Runcontrolbitnote:Set/clearedbysoftw aretoturnTimer/Counter1/0ON/OFFTR1/0=1,启动T0计数(SETBTR0) TR1/0=0,停止T0计数(CLRTR0)TF1TR1TF0TR0IE1IT1IE0IT 0T1请求有/无T1工作启/停T0请求有/无T0工作启/停INT 1请求有/无INT1方式下沿/低电平INT0请求有/无INT0方式下沿/低电平 定时器T0/T1中断申请过程: 定时/计数器可按片内机器周期定时,也可对由T0/T1引脚外部输入一个负脉冲进行加法计数在已 经开放T0/T1中断允许(SETBET0/SETBEA)且已被启动(SETBTR0)的前提下,T0/T1加满溢出时,TF0 /TF1标志位自动置“1”,检测到TCON中TF0/TF1变“1”后,将自动产生指令:LCALL000BH/LCALL001 BH执行中断服务程序,TF0/TF1标志位会自动清“0”,以备下次中断申请.6.TMOD定时器方式寄存器Timer /CounterModecontrolregister.Notbitaddressable(89H)只能按字节操作 用于控制T0和T1的操作模式(MOVTMOD,#H)记忆!M0M1C/TGATEM0M1C/TG ATE(89H)D0D1D2D3D4D5D6D7TMOD定时器T0定时器T1(1) GATE:门控位Timer可由软件与硬件两者控制?GATE=0——普通用法Timer的启/停由软件对TRx位 写“1”/“0”控制 (SETBTRx)?GATE=1——门控用法Timer的启/停由软件对TRx 位写“1”/“0”和在INTx引脚上出现的信号的高/低共同控制WhenGATE=0,TIMER/COUNTERx willrunonlywhileTRx=1(softwarecontrol)WhenTRx(inTCON) issetandGATE=1,TIMER/COUNTERxwillrunonlywhileINTxpinis high(hardwarecontrol).GATE位的状态决定定时器/计数器运行控制取决于TRx一个条件还是TRx 和引脚这两个条件.0:是否计数,仅取决于TRx的状态.1:由INTx的输入电平和TRx的状态这两个条件来确定.计数 器是否计数是由TRx和INTx二个条件来控制的.Whenthisbitissetthetimerwillon lyrunwhenINT1(P3.3)/INT0(P3.2)ishigh.Whenthisbitisc lear,thetimerwillrunregardlessofthestateofINT1.振荡器 ?12TLxTHx(8位)(8位)TFx申请中断TxPinTRx位GATE位INTxPi n≥1&C/T=0C/T=1=1接通=0断开或门与门TF1TR1TF0TR0IE1 IT1IE0IT0TCONGATEC/TM1M0GATEC/TM1 M0TMOD(2)C/T:计数器/定时器选择位=1(Counter)外部事件计数器.对Tx引脚的负脉 冲计数=0(Timer)片内时钟定时器.对机器周期脉冲计数定时TimerorCounterselector .SetforCounteroperation(inputfromTxinputpin);Cleared forTimeroperation(inputfrominternalsystemclock).M0M1C /TGATEM0M1C/TGATE(89H)D0D1D2D3D4D5D6D7TM OD定时器T0定时器T1C/T位控制的电子开关决定了定时器or计数器的工作模式.0(T-Timer):电子开 关打在上面,定时器工作模式;1(C-Counter):电子开关打在下面,计数器工作模式,计数脉冲为P3.4(T0)、P3.5(T 1)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加1.Whenthisbitissetthetimerwi llcounteventsonT1(P3.5)/T0(P3.4).Whenthisbitisclear,th etimerwillbeincrementedeverymachinecycle.方式0:00:13位Ti mer——用它无益,不要记它!方式1:01:16位Timer——经常用到方式2:10:8位自动重装的Timer——经常用 到方式3:11:T0分为2个8位Timer;(3)M1,M0:工作方式定义位(定义4种方式):M1M0O perationMode00013-bitTimer(MCS-48compatible)01116-b itTimer/Counter1028-bitAuto-ReloadTimer/Counter113Sp littimermode(Timer0)TL0isan8-bitTimer/Countercontrolled bythestandardTimer0controlbits,TH0isan8-bitTi merandiscontrolledbyTimer1controlbits(Timer1) Timer/Counter1stopped5.4定时器的四种工作方式 比较:串行口也有四种工作方式,不要混淆 对TMOD寄存器的M1、M0位的设置,可选择四种工作方式,即方式0、方式1、方式2和方式3(重点看方式1/2)方式1— —16位的定时/计数器(常用)振荡器?12THxTLx(8位)(8位)TFx申请中断TxPin TRx位GATE位INTxPin≥1&C/T=0C/T=1控制=1开关接通或门与门1.该模式是一个1 6位定时/计数方式.寄存器TH0和TL0是以全16位参与操作,THx赋高8位,TLx赋低8位(1)计数工作方式时,最大计数2 ^16=65536(个外部脉冲)TH0=TL0=FFH,FFFFH=65535(2)定时工作方式时,定 时时间为:t=(2^16一T0初值)×时钟周期×122.TMOD选方式:写“M1,M0”=01选方式1 NOTE:Tm机器周期3.若不用门控位(GATE=0),直接用软件写TRx控制启/停若使用门控位(GATE=1) ,先置位TRx,然后由INTx端的高/低电平来控制其启/停4.若允许中断,还须先置位ETx、EA等中断允许控制位,并编写中断服务程序;若不用中断,可查询“计数溢出标志TFx”的方式工作,但溢出标志TFx须软件清0(JBCTF0,)分析:已知fosc=6MHz则:(振荡周期)1Tc=1/6MHz=1/6us(机器周期)1Tm=12Tc=121/6us=2?s(12MHz~1us,6MHz~2us记忆!)?粗略地说:Tmin?2?s=0.002ms16位定时器最大数值为:216=65536=0FFFFH+1 TH0=TL0=0FFH故选择方式1工作可以得到:Tmax=65536?2=131072?s=131.072ms TH0=TL0=00H例1:若晶振频率为6MHz,计算单片机在定时器方式1的条件下的最小与最大定时时间:分析:已知fosc=6MHz则:(机器周期)1Tm=12Tc=12/6MHz=2?s100ms÷2?s=5000016位定时器最大数值为:216=65536(=0FFFFH+1)故选择方式1工作可以满足要求.计算初值:65536-50000=15536=3CB0H小软件(考试时带计算器,不要算错,WINDOWS自带计算器)例2:要求对T0产生100ms定时进行初始化.(晶振=6MHz)(笔算)由分析得知:T0选择方式1,初值=3CB0HGATEC/TM1M0GATEC/TM1M0TMODXXXX0001初始化:MOVTMOD,#01H;选T0方式100000001MOVTH0,#3CH ;赋初值高8位MOVTL0,#0B0H ;赋初值低8位SETBTR0 ;启动T0定时若需要定时器0产生中断还应当写如下语句:SETBET0 ;开T0中断允许SETBEA ;开总中断允许以及相应的中断服务程序方式2——8位自动重装的定时/计数器(常用)振荡器?12TLx(8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制=1开关接通或门与门THx(8位)溢出位门开 |
|