《51单片机定时器78244实用教案》由会员分享,可在线阅读,更多相关《51单片机定时器78244实用教案(66页珍藏版)》请在金锄头文库上搜索。
1、1定时器/计数器及其应用(yngyng)定时器/计数器的应用场合(chngh):定时或延时控制、对外部事件的检测、计数等;MCS-51系列8031、8051单片机有两个16位定时器/计数器(即T0和T1);8032、8052单片机有3个16位定时器/计数器(即T0、T1和T2);第1页/共65页第一页,共66页。2定时器/计数器及其应用(yngyng)所谓计数器就是对外部输入脉冲的计数;所谓定时器也是对脉冲进行计数完成的,计数的是MCS-51内部产生的标准脉冲,通过计数脉冲个数实现定时。所以,定时器和计数器本质上是一致的,在以后的叙述中将定时器 /计数器笼统(lngtng)称为定时器。第2页/
2、共65页第二页,共66页。3第3页/共65页第三页,共66页。4第5章定时器/计数器及其应用(yngyng)5.1定时器的结构及工作原理5.2定时器的TMOD和TCON寄存器5.3定时器的工作方式(fngsh)5.3.1方式(fngsh)05.3.2方式(fngsh)15.3.3方式(fngsh)25.3.4方式(fngsh)35.4定时器的编程和应用第4页/共65页第四页,共66页。5第5章定时器/计数器及其应用(yngyng)5.1定时器的结构及工作(gngzu)原理第5页/共65页第五页,共66页。65.1定时器的结构(jigu)及工作原理组成:两个16位的定时器T0和T1,以及他们的工
3、作(gngzu)方式寄存器TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。工作(gngzu)方式寄存器TMOD:用于设置定时器的工作(gngzu)模式和工作(gngzu)方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态;单片机复位时,两个寄存器的所有位都被清0。8051定时器内部结构框图(kungt)第6页/共65页第六页,共66页。75.1定时器的结构及工作(gngzu)原理两个可编程的定时器/计数器T1、T0。每个定时器内部结构实际上就是一个可编程的加法计数器,由编程来设置它
4、工作在定时状态还是计数状态。两种工作模式(msh):(1)计数器工作模式(msh)就是对外部事件进行计数。计数脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。当输入信号发生由1至0的负跳变(下降沿)时,计数器(TH0,TL0或TH1,TL1)的值增1。计数的最高频率一般为振荡频率的1/24。Why?(2)定时器工作模式(msh)也是通过计数实现的。计数脉冲来自内部时钟脉冲,每个机器周期计数值增1,每个机器周期=12个振荡周期,因此计数频率为振荡频率的1/12。所以定时时间=计数值机器周期。4种工作方式(方式0-方式3)。第7页/共65页第七页,共66页。85.1定时器的结构(ji
5、gu)及工作原理当控制信号定时器工作在定时方式;加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到(zhdo)计时器计满溢出;因为,即一个计数脉冲的周期就是一个机器周期;计数器计数的是机器周期脉冲个数。从而实现定时。当控制信号定时器工作在计数方式;加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到(zhdo)计时器计满溢出;Tx THxTFxTLxTRxINTx定时定时计数计数 控制信号控制信号K“1 1”启动,计数器运行;启动,计数器运行;“0 0”停止,计数器停止;停止,计数器停止;定时器定时器/ /计数器原理框图计数器原
6、理框图加加1 1计数器计数器第8页/共65页第八页,共66页。9控制信号K可以(ky)控制计数器的“启动”和“停止”, TCON(88H)第9页/共65页第九页,共66页。115.1定时器的结构(jigu)及工作原理在每个机器周期的S5P2期间采样检测引脚输入电平。若前一个机器周期采样值为“1”,后一个机器周期采样值为“0”,则计数器加1。新的计数值在检测到输入引脚电平发生“1”到“0”的负跳变(下降沿)后,于下一个机器周期的S3P1期间装入计数器中。由于CPU需要(xyo)两个机器周期来识别一个“1”到“0”的跳变信号,所以最高的计数频率为振荡周期的1/24。P1P2S1振荡周期振荡周期状态
7、周期状态周期机器周期机器周期机器周期机器周期指令周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2P2第11页/共65页第十一页,共66页。125.1定时器的结构(jigu)及工作原理定时/计数器对输入信号的要求外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。输入信号的高、低电平至少要分别(fnbi)保持一个机器周期。如图所示,图中Tcy为机器周期。第12页/共65页第十二页,共66页。13可编程定时器的工作方式、启动、停
8、止、溢出(ych)标志、计数器等都是可编程的通过设置寄存器TMOD,TCON,TH0,TL0,TH1和TL1实现。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定好的工作方式独立工作,不再占用CPU,只有在计数器计满溢出(ych)时才向CPU申请中断,占用CPU。由此可见,定时器是单片机中工作效率高且应用灵活的部件。5.1定时器的结构及工作(gngzu)原理第13页/共65页第十三页,共66页。14第5章定时器/计数器及其应用(yngyng)5.2定时器的TMOD和TCON寄存器第14页/共65页第十四页,共66页。155.2定时器的TMOD和TCON寄存器8051单片机定时器主要
9、有几个特殊功能寄存器组成:TMOD,TCON,TH0,TL0,TH1,TL1。TMOD:设置定时器的工作(gngzu)方式;TCON:控制定时器的启动和停止;TH0和TL0:存放定时器T0的初值或计数结果;TH0存放高8位,TL0存放低8位;TH1和TL1:存放定时器T1的初值或计数结果;TH1存放高8位,TL1存放低8位;第15页/共65页第十五页,共66页。165.2.1工作(gngzu)方式控制寄存器TMOD8位分为两组,高位分为两组,高4位控制位控制T1,低,低4位控制位控制T0。(1) GATE 门控位门控位 0: 以以TRX (X=0,1) 来启动定时器来启动定时器/计数器运行计数
10、器运行(ynxng)。1: 用外中断引脚用外中断引脚 (INT0*或或INT1*) 上的高电平和上的高电平和TRX来来启启 动定时器动定时器/计数器运行计数器运行(ynxng)。(2) M1、M0 工作方式选择位工作方式选择位 M1 M0 工工 作作 方方 式式 0 0 方式方式0,13位定时器位定时器/计数器。计数器。 0 1方式方式1,16位定时器位定时器/计数器。计数器。 1 0 方式方式2,8位常数自动重新装载位常数自动重新装载 1 1 方式方式3,仅适用于,仅适用于T0,T0分成两个分成两个8位计数器,位计数器,T1停止停止(tngzh)计数。计数。(3) C/T* 计数器模式和定时
11、器模式选择位计数器模式和定时器模式选择位0: 定时器模式。定时器模式。 1: 计数器模式。计数器模式。(4) TMOD无位地址,不能位寻址。无位地址,不能位寻址。(5) 复位时,复位时,TMOD所有位均为所有位均为“0”。第16页/共65页第十六页,共66页。17低4位与外部中断有关,后面介绍。高4位的功能如下:(1)TF1、TF0计数溢出标志位定时器T0或T1计数溢出时,由硬件(ynjin)自动将此位置“1”;TFx可以由程序查询,也是定时中断的请求源;(2)TR1、TR0计数运行控制位TRx=1:启动定时器/计数器工作 TRx=0:停止定时器/计数器工作5.2.2控制(kngzh)寄存器T
12、CON第17页/共65页第十七页,共66页。195.2.3定时(dnsh)/计数器的初始化MCS-51单片机的定时器/计数器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)对TMOD赋值,以确定定时器的工作模式;(2)置定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;(3)根据需要(xyo),对IE置初值,开放定时器中断;(4)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。第19页/共65页第十九页,共66页。205.2.3定时(dnsh)/计数器的初始化初值计算:设计数(
13、jsh)器的最大值为M,则置入的初值X为:计数(jsh)方式:X=M-计数(jsh)值定时方式:由(M-X)T=定时值,得X=M-定时值/TT为计数(jsh)周期,是单片机的机器周期。(模式0:M为213,模式1:M为216,模式2和3:M为28)例如:机器周期为例如:机器周期为1s 1s 时,时, 若工作若工作(gngzu)(gngzu)在模式在模式0 0,则最大定时值为,则最大定时值为:2131s =8.192ms:2131s =8.192ms 若工作若工作(gngzu)(gngzu)在模式在模式1,1,则最大定时值为则最大定时值为: : 2161s =65.536ms 2161s =65
14、.536ms第20页/共65页第二十页,共66页。21第5章定时器/计数器及其应用(yngyng)5.3定时器的工作(gngzu)方式第21页/共65页第二十一页,共66页。22MCS-51的定时器T0有4种工作(gngzu)方式:即:方式0,方式1,方式2,方式3。MCS-51的定时器T1有3种工作(gngzu)方式:即:方式0,方式1,方式2。5.3定时器的工作(gngzu)方式第22页/共65页第二十二页,共66页。235.2.1方式0M1、M0设置(shzh)为00,为13位计数器,以T1为例,其框图如下:5.3定时器的工作(gngzu)方式方式0计数(j sh)脉冲输入加1计数器第2
15、3页/共65页第二十三页,共66页。245.3定时器的工作(gngzu)方式方式0TH1 D12 D11 D10 D9 D8 D7 D6 D5TL1 D4 D3 D2 D1 D0n在这种方式下,在这种方式下,16位寄存器位寄存器TH1和和TL1只用只用13位,由位,由TH1的的8位和位和TL1的低的低5位组成。位组成。TL1的高的高3位不定。位不定。n当当TL1的低的低5位计数溢出时,向位计数溢出时,向TH1进位。而进位。而TH1计数溢出计数溢出时,则向中断标志位时,则向中断标志位TF1进位(即硬件将进位(即硬件将TF1置置1),并请),并请求中断。求中断。n可通过查询可通过查询TF1是否置是
16、否置“1”或考察中断是否发生来判定或考察中断是否发生来判定(pndng)定时器定时器T1的操作完成与否。的操作完成与否。第24页/共65页第二十四页,共66页。255.3定时器的工作(gngzu)方式方式0当C/T=0时,为定时(dnsh)工作模式,开关接到振荡器的12分频器输出上,计数器对机器周期脉冲计数。其定时(dnsh)时间为:(213-初值)振荡周期12例如:若晶振频率为12MHz,则最长的定时(dnsh)时间为(213-0)(1/12)12us=8.191ms当C/T=1时,为计数工作模式,开关与外部引脚T1(P3.5)接通,计数器对来自外部引脚的输入脉冲计数。当外部信号发生负跳变时
17、计数器加1。第25页/共65页第二十五页,共66页。265.3定时器的工作(gngzu)方式方式0GATE控制定时器Tx(T1或T0)的条件:(1)当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。TRx=1;计数启动;TRx=0;计数停止;(2)当GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态(zhungti)一起决定(即此时K=TRxINTx),当且仅当TRx=1且INTx=1(高电平)时,计数启动;否则,计数停止。返回返回(fnhu)第26页/共65页第
18、二十六页,共66页。275.3.2方式1M1、M0=01,为16位的计数器,除位数外,其他(qt)与方式0相同。其定时时间为:(216-初值)振荡周期12例如:若晶振频率为12MHz,则最长的定时时间为(216-0)(1/12)12us=65.536ms5.3定时器的工作(gngzu)方式方式1第27页/共65页第二十七页,共66页。285.3.3方式2M1、M0=10,为自动恢复初值的8位计数器,等效框图(kungt)如下:TLx作为8位计数器,THx作为重置初值的缓冲器。5.3定时器的工作(gngzu)方式方式2THx作作为为常常数数缓缓冲冲器器,当当TLx计计数数(j sh)溢溢出出时时
19、,在在置置“1”溢溢出出标标志志TFx的的同同时时,还还自自动动的的将将THx中中的的初初值值送送至至TLx,使使TLx从从初初值值开开始始重重新新计计数数(j sh)。定定时时器器/计计数数(j sh)器器的的方方式式2工工作作过过程程如如图图 (x=0, 1) 。第28页/共65页第二十八页,共66页。29优点:方式0和方式1用于循环重复定时或计数时,在每次计数器挤满溢出后,计数器复0。若要进行新一轮的计数,就得重新(chngxn)装入计数初值。这样一来不仅造成编程麻烦,而且影响定时精度。而方式2具有初值自动装入的功能,避免了这个缺点,可实现精确的定时。缺点:只有8位计数器,定时时间短、计
20、数范围小。其定时时间为: (28-初值)振荡周期12若晶振频率为12MHz,则最长的定时时间为(28-0)(1/12)12us=0.256ms5.3定时器的工作(gngzu)方式方式2方式(fngsh)2工作过程图 (x=0, 1) 。第29页/共65页第二十九页,共66页。305.3.4方式3只适用于定时器/计数器T0。T1不能工作在方式3。如果将T1置为方式3,则相当于TR1=0,停止计数(此时T1可用来作串行口波特率产生器)。1.工作方式3下的T0T0在方式3时被拆成两个独立的8位计数器:TH0和TL0。8位计数器TL0使用T0的状态控制(kngzh)位C/T*、GATE、TR0、INT
21、0,它既可以工作在定时方式,也可以工作在计数方式。8位定时器TH0被固定为一个8位定时器(不能作外部计数模式),并使用定时器T1的状态控制(kngzh)位TR1,同时占用定时器T1的中断请求源TF1。此时,定时器TH0的启动或停止只受TR1控制(kngzh)。TR1=1时,启动TH0的计数;TR1=0时,停止TH0的计数5.3定时器的工作(gngzu)方式方式3第30页/共65页第三十页,共66页。315.3定时器的工作(gngzu)方式各引脚与各引脚与T0的逻辑关系如图所示的逻辑关系如图所示: 第31页/共65页第三十一页,共66页。322.T0工作(gngzu)在方式3下T1的各种工作(g
22、ngzu)方式注意:当T0处于方式3时,T1仍可设置为方式0、方式1和方式2。当时由于TR1、TF1和T1的中断源都已被定时器T0(中的TH0)占用,所以定时器T1仅有控制位C/T来决定其工作(gngzu)在定时方式或计数方式。当计数器计满溢出时,不能置位“TF1”,而只能将输出送往串口。所以,此时定时器T1一般用作串口的波特率发生器,或不需要中断的场合。(1)T1工作(gngzu)在方式05.3定时器的工作(gngzu)方式第32页/共65页第三十二页,共66页。33(2)T1工作(gngzu)在方式1(3) T1工作工作(gngzu)在方式在方式25.3定时器的工作(gngzu)方式第33
23、页/共65页第三十三页,共66页。34第5章定时器/计数器及其应用(yngyng)5.4定时器的编程和应用(yngyng)第34页/共65页第三十四页,共66页。355.4定时器的编程和应用(yngyng)编程说明MCS-51单片机的定时器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)确定工作方式字:对TMOD寄存器正确赋值;(2)确定定时初值:计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;初值计算:设计数器的最大值为M,则置入的初值X为:计数方式:X=M-计数值定时方式:由(M-X)T=定时值,得X=M-定时值/TT为计数周期,是单片机的机器周期
24、。(模式0M为213,模式1M为216,模式2和3M为28)(3)根据需要,对IE置初值,开放定时器中断;(4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位,置位以后(yhu),计数器即按规定的工作模式和初值进行计数或开始定时。第35页/共65页第三十五页,共66页。365.4定时器的编程和应用(yngyng)例 5-1 要 在 P1.0上 输 出 一 个 周 期 为 2ms的 方 波 , 假 设 系 统 振 荡 频 率 采 用(ciyng)12MHz。利用T0方式0产生1ms的定时方波的周期用T0来确定,让T0每隔1ms计数溢出1次,即TF0=1;查询到TF0=1则CPU对P1.
25、0取反。即要使即要使P1.0P1.0每隔每隔1ms1ms取反取反一次。一次。第36页/共65页第三十六页,共66页。375.4定时器的编程和应用(yngyng)第一步:确定工作方式字方式0(13位)最长可定时8.192ms;方式1(16位)最长可定时65.536ms;方式2(8位)最长可定时256s。T0为方式0,M1M0=00定时工作状态,C/T=0GATE=0,不受INT0控制,T1不用(byng)全部取“0”值。故TMOD=00H第37页/共65页第三十七页,共66页。385.4定时器的编程和应用(yngyng)第二步:计算(jsun)1ms定时的初值X 设初值为X,则有:(213-X)
26、1210-61/12=110-3可求得:X=8192-1000=7192X化为16进制,即X=1C18H=1,1100,0001,1000B。所以,T0的初值为:TH0=E0HTL0=18HTH0 1 1 1 0 0 0 0 0TL0 1 1 0 0 0第38页/共65页第三十八页,共66页。39第三步:程序设计采用查询TF0的状态(zhungti)来控制P1.0的输出,同时要重新装入初值。5.4定时器的编程和应用(yngyng)第39页/共65页第三十九页,共66页。40参考程序:ORG0100HMAIN:MOVTMOD,#00H;设置T0为方式0MOVTL0, #18H;送计数初值MOVT
27、H0, #0E0H;送计数初值SETBTR0 ;启动T0LOOP:JBC TF0,NEXT;查询定时时间到,转NEXT,同时清TF0SJMPLOOP;重复(chngf)循环NEXT:MOVTL0,#18H;T0重置初值MOVTH0,#0E0H;T0重置初值CPLP1.0 ;P1.0的状态取反SJMPLOOP;重复(chngf)循环END第40页/共65页第四十页,共66页。41例5-2将例5-1中的输出方波周期改为1秒。分析:周期为1s的方波要求500ms的定时。(1)T0工作方式的确定因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:方式0(13位)最长可定时8.192ms
28、;方式1(16位)最长可定时65.536ms;方式2(8位)最长可定时256s。所以采用定时器定时加软件计数的方法来实现(shxin)延长定时。选方式1,定时50ms,软件计数10次。50ms10=500ms。所以,TMOD=01H5.4定时器的编程和应用(yngyng)以上(yshng)各方式都不满足要求第41页/共65页第四十一页,共66页。42(2)计算(jsun)计数初值因为:(216-X)1210-61/12=5010-3所以:X=15536=3CB0H因此:TH0=3CH,TL0=B0H(3)10次计数的实现设计一个软件计数器,初始值设为10。每隔50ms定时时间到,产生溢出标志T
29、F0,程序查询到TF0=1,则软件计数器减1。这样减到0时就获得了500ms的定时。5.4定时器的编程和应用(yngyng)第42页/共65页第四十二页,共66页。43(4)程序设计(参考(cnko)程序)MAIN:MOVTMOD,#01H;设T0工作在方式1MOVTL0,#0B0H;给T0设初值MOVTH0,#3CHMOVR7, #10;软件计数器初值SETBTR0;启动T0LOOP:JBCTF0,NEXT;查询定时时间到,转NEXT,同时清TF0SJMPLOOPNEXT:DJNZR7,EXIT;R7不等于0,则不对P1.0取反CPL P1.0MOVR7,#10;重置软件计数器初值EXIT:
30、MOVTL0,#0B0H;T0中断子程序,重装初值MOVTH0,#3CHSJMPLOOPEND第43页/共65页第四十三页,共66页。44以上的定时程序中,程序都要重置计时器初值,这样从定时器溢出发出溢出标志,到重装完定时器初值,在开始计数,之间总会有一段时间间隔,使定时时间增加了若干微秒,造成定时不够精确。为了(wile)减小这种定时误差,单片机中设置了工作方式2(自动重装初值),则可避免上述因素,省去程序中重装初值的指令,实现精确定时。但是工作方式2的缺点是只有8位计数器,定时时间受到很大限制。5.4定时器的编程和应用(yngyng)第44页/共65页第四十四页,共66页。45例5-3利用
31、T0方式2产生(chnshng)250us的定时,在P1.0引脚上输出周期为500us的方波(要求精确定时)。(设系统振荡为12MHz)(1)工作方式选择实现精确定时,采用方式2。对于12MHz晶振,方式2的最大计数时间为28=256us,所以可实现250us的精确定时。故,设置TMOD=02H。(2)计算初值设初值为X:则(28-X)1210-61/12=25010-6X=28-250=6=06H(3)程序设计采用查询TF0的状态来控制P1.0的输出。5.4定时器的编程和应用(yngyng)第45页/共65页第四十五页,共66页。46(4)参考程序MAIN:MOV TMOD,#02H;置T0
32、方式2MOV TH0,#06H;送计数初值MOV TL0,#06HSETBTR0;启动T0LOOP:JBCTF0,NEXT;查询定时时间到,转NEXT,同时清TF0SJMPLOOPNEXT:CPLP1.0;输出(shch)取反SJMP LOOP;重复循环END5.4定时器的编程和应用(yngyng)第46页/共65页第四十六页,共66页。47GATE门可使定时器Tx(T0或T1)的启动计数( jsh)受INTx*的控制,可测量引脚INTx*(P3.2或P3.3)上正脉冲的宽度(机器周期数)。以T1为例:门控制位GATE的应用测量脉冲(michng)宽度回顾回顾(hug)当GATE=1时,K=T
33、RxINTxK第47页/共65页第四十七页,共66页。48例5-4利用T1门控位GATE测试INT1*(P3.3)引脚上出现的正脉冲的宽度。分析:根据设计要求,将T1设定为定时工作模式、方式1、GATE=1;当TR1=1时,一旦(ydn)INT1*(P3.3)引脚上出现高电平就开始计数,直到出现低电平为止。然后读取TH1、TL1中的计数值,分别送到寄存器A和B中。由于T1工作在定时方式,计数器计数的是机器周期的脉冲数;将脉冲数转化成时间,就可得到正脉冲的宽度。门控制位GATE的应用(yngyng)测量脉冲宽度第48页/共65页第四十八页,共66页。49ORG0100HMAIN: MOVTMOD
34、,#90H;T1为方式1定时控制字MOVTL1,#00H;计数器初值为0MOVTH1,#00HLOOP: JBP3.3,LOOP;等待INT1*低SETBTR1;如INT1*为低,启动T1LOOP1:JNBP3.3,LOOP1;等待INT1*升高,开始计数LOOP2:JBP3.3,LOOP2;等待INT1*降低,停止计数CLRTR1;停止T1计数MOVA,TL1;T1计数值的低8位送AMOVB,TH1;T1计数值的高8位送B由于定时器最长为16位计数器,因此(ync)被测脉冲高电平的宽度不能超过65536个机器周期。参考参考(cnko)(cnko)程序程序: :第49页/共65页第四十九页,共
35、66页。50例5-5当T0(P3.4)引脚上发生负跳变时,从P1.0引脚上输出 一 个 周 期 为 1ms的 方 波 ,如 图 所 示 。 (系 统 振 荡 为6MHz)两个(lin)计数器同时使用5.4定时器的编程和应用(yngyng)第50页/共65页第五十页,共66页。51(1)工作方式选择T0为方式1计数,初值0FFFFH,即外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,把F0标志置“1”,说明T0引脚上已接收了负跳变信号(xnho)。T1定义为方式2定时。在T0引脚产生一次负跳变后,启动T1每500s产生一次
36、中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。TMOD=0010,0101=25H(2)计算T1初值设T1的初值为X:则(28-X)210-6=510-4X=28-250=6=06H5.4定时器的编程和应用(yngyng)第51页/共65页第五十一页,共66页。52MAIN:MOV TMOD, #25H ;初始化,T1为方式2定时,T0为方式1计数MOVTL0,#0FFH;T0置初值MOVTH0,#0FFHSETBTR0 ;启动T0MOVTL1,#06H;T1置初值MOVTH1,#06HLOOP0: JBC TF0,NEXT0;查询T0有无负跳变(tio bin),有则
37、转到NEXT0SJMPLOOP0NETX0: CPL P1.0;P1.0取反SETBTR1;启动T1LOOP1: JBC TF1,NEXT1;查询T1定时时间到否,到则转到NEXT1SJMPLOOP1NEXT1: CPL P1.0;P1.0取反SJMPLOOP1END(3) 程序设计(chn x sh j)第52页/共65页第五十二页,共66页。535.4定时器的编程和应用(yngyng)T0方式3时,TL0和TH0被分成两个独立的8位定时器/计数器。其中(qzhng),TL0:8位定时器/计数器;TH0:8位定时器。当T1作串行口波特率发生器时,T0才设置为方式3。第53页/共65页第五十三
38、页,共66页。54以上例题均采用查询的方法,这种方法很简单,但是在定时器整个计数的过程中,CPU要不断地查询溢出标志TFx的状态,很难执行其他操作,占用了CPU的工作时间,使得CPU的工作效率不高。若采用中断的方式(fngsh)来实现,可大大提高CPU的工作效率。我们下一章学习中断,学习完之后再返回来分析和比较两者的区别与特点。5.4定时器的编程和应用(yngyng)第54页/共65页第五十四页,共66页。55本章结束!第55页/共65页第五十五页,共66页。565.4定时器的编程和应用(yngyng)例例5-6 假设假设(jish)某某MCS-51应用系统的两个外中断源应用系统的两个外中断源
39、已被占用,设置已被占用,设置T1工作在方式工作在方式2,作波特率发生器用。,作波特率发生器用。现要求增加一个外部中断源,并控制现要求增加一个外部中断源,并控制P1.0引脚输出一个引脚输出一个5kHz的方波。设系统振荡为的方波。设系统振荡为6MHz。第56页/共65页第五十六页,共66页。57(1)选择工作方式TL0为方式3计数,把T0引脚(P3.4) 作附加的外中断输入端,TL0初值设为0FFH,当检测到T0引脚电平出现负跳变时,TL0溢出,申请中断,这相当于跳沿触发的外部(wib)中断源。TH0为8位方式3定时,控制P1.0输出5kHz的方波信号。如图所示。5.4.3方式(fngsh)3的应
40、用第57页/共65页第五十七页,共66页。58(2)初值计算TL0的初值设为0FFH。5kHz的方波的周期为200s,TH0的定时(dnsh)时间为100s。TH0初值X计算如下:(28-X)210-6=110-4X=28-100=156=9CH(3)程序设计ORG0000HLJMPMAINORG000BH;T0中断入口LJMPTL0INT;跳T0中断服务程序ORG001BH;在T1方式3时,TH0占用T1的中断LJMPTH0INT;跳TH0中断服务程序5.4.3方式(fngsh)3的应用第58页/共65页第五十八页,共66页。59ORG0100HMAIN: MOVTMOD,#27H;T0方式
41、3计数,T1方式2定时MOVTL0,#0FFH;置TL0初值MOVTH0,#9CH;置TH0初值MOVTL1,#dataL;data为波特率常数MOVTH1,#dataHMOVTCON,#55H;启动T0、T1,设置外部中断(zhngdun)为跳沿触发MOVIE,#9FH;开中断(zhngdun)TL0INT:MOVTL0,#0FFH ;TL0中断(zhngdun)服务程序,TL0重新装入初值中断(zhngdun)处理TH0INT:MOVTH0,#9CH;TH0中断(zhngdun)服务程序,TH0重新装入初值CPLP1.0;P1.0位取反输出RETI5.4.3方式(fngsh)3的应用第59
42、页/共65页第五十九页,共66页。601.实时(shsh)时钟实现的基本思想如何获得1秒的定时,可把定时时间定为100ms,采用中断方式进行溢出次数的累计,计满10次,即得到秒计时。片内RAM中规定3个单元作为秒、分、时单元,具体安排如下:42H:“秒”单元;41H:“分”单元;40H:“时”单元从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。5.4.5实时(shsh)时钟的设计第60页/共65页第六十页,共66页。612.程序设计(shj)(1)主程序的设计(shj)流程如图所示。5.4.5实时时钟(shzhng)的设计第61页/共65页第六十一页,共66页。62(2) 中断服务程
43、序的设计中断服务程序的设计中断服务程序的主要功中断服务程序的主要功能是实现秒、分、时的能是实现秒、分、时的计时处理计时处理(chl)。参。参考程序略。考程序略。5.4.5实时(shsh)时钟的设计第62页/共65页第六十二页,共66页。63在读取运行中的定时器/计数器时,需注意:若恰好出现TLX溢出向THX进位的情况,则读得的(TLX)值就完全不对。同样,先读(THX)再读(TLX)也可能出错。方法:先读(THX),后读(TLX),再读(THX)。若两次读得(THX)相同,则读的内容正确。若前后两次读的(THX)有变化,则再重复上述过程,这次(zhc)重复读得的内容就应是正确的。下面是有关的程
44、序,读得的(TH0)和(TL0)放置在R1和R0内。5.4.6运行(ynxng)中读定时器/计数器第63页/共65页第六十三页,共66页。64RDTIME:MOVA,TH0;读(TH0)MOVR0,TL0;读(TL0)CJNEA,TH0,RDTIME;比较(bjio)2次读得的(TH0);不相等则重复读MOVR1,A;(TH0)送入R1中RET5.4.6运行(ynxng)中读定时器/计数器第64页/共65页第六十四页,共66页。65谢谢您的观看(gunkn)!第65页/共65页第六十五页,共66页。内容(nirng)总结1。8032、8052单片机有3个16位定时器/计数(j sh)器(即T0、 T1和T2)。每个定时器内部结构实际上就是一个可编程的加法计数(j sh)器,由编程来设置它工作在定时状态还是计数(j sh)状态。计数(j sh)脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。“0”停止,计数(j sh)器停止。时钟周期:是振荡源信号经二分频后形成的时钟脉冲信号,用S表示。指令周期:是指CPU执行一条指令所需要的时间。R7不等于0,则不对P1.0取反第六十六页,共66页。