资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2.2 2.2 定时器及其应用定时器及其应用 2.2.1 2.2.1 定时器概述定时器概述两个可编程的定时器两个可编程的定时器/ /计数器计数器T1T1、T0T0;都有定时和事件计数的功能;都有定时和事件计数的功能;可用于定时控制、延时、对外部事件计数和可用于定时控制、延时、对外部事件计数和 检测等场合。检测等场合。1 18051定时器结构2 2对对外外界界发发生生的的事事件件计计数数,当当达达到到程程序序规规定定的的计计数数值值时时,输输出出一一脉脉冲冲信信号号,申申请请中中断断。例例如如一一啤啤酒酒生生产产线线,如如下下图所示图所示。计计 数数24瓶瓶光电信号光电信号24瓶装完申请中断瓶装完申请中断转入中断服务程序装箱转入中断服务程序装箱输送带输送带定时器的计数功能3 31.定时工作方式按8051片内振荡器12分频的脉冲加一,直至溢出。若8051采用12MHz晶振,则机器周期为1us,计数频率为1MHz。 2.计数工作方式通过T0(P3.4)和T1(P3.5)对外部脉冲信号计数;在下降沿处加一;输入脉冲宽度大于2个机器周期。3.T0/T1在对内部时钟或对外部事件计数时,不占用CPU时间。4 42.2 定时器的控制2.2.1 2.2.1 工作模式寄存器工作模式寄存器 TMOD TMOD用于控制用于控制T0T0、T1T1的工作模式。的工作模式。 其低其低4 4位用于控制位用于控制T0T0,高,高4 4位用于控制位用于控制T1T1。 TMOD TMOD不能位寻址,只能以字节设定定时器的不能位寻址,只能以字节设定定时器的 工作模式。工作模式。5 5(1 1) M1M1、M0M0工作方式选择位工作方式选择位 M1 M0 M1 M0 工工 作作 方方 式式 0 0 0 0 方式方式0 0,1313位定时器位定时器/ /计数器。计数器。 0 1 0 1方式方式1 1,1616位定时器位定时器/ /计数器。计数器。 1 0 1 0 方式方式2 2,8 8位常数自动重新装载位常数自动重新装载 1 1 1 1 方方式式3 3,仅仅适适用用于于T0T0,T0T0分分成成两两个个8 8 位计数器,位计数器,T1T1停止计数。停止计数。 ( (2) C/T2) C/T* *计数器模式和定时器模式选择位计数器模式和定时器模式选择位 0 0:定时器模式。:定时器模式。 1 1:计数器模式。计数器模式。6 6(3 3) GATEGATE门控位门控位 0 0:以运行控制位以运行控制位TRXTRX(X=0,1X=0,1)来启动定来启动定时器时器/ /计数器运行。计数器运行。1 1:用用外外中中断断引引脚脚( (INT0INT0* *或或INT1INT1* *) )上上的的高高电平来启动定时器电平来启动定时器/ /计数器运行。计数器运行。7 72.2.2 2.2.2 定时器定时器/ /计数器控制寄存器计数器控制寄存器TCONTCON 可位寻址,低可位寻址,低4 4位与外部中断有关,高位与外部中断有关,高4 4位的功位的功能如下:能如下: (1) TF1(1) TF1、TF0TF0计数溢出标志位计数溢出标志位 (2) TR1 (2) TR1、TR0TR0计数运行控制位计数运行控制位 1 1:启动定时器:启动定时器/ /计数器工作计数器工作 0 0:停止定时器:停止定时器/ /计数器工作计数器工作 8 82.3 2.3 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式 通过设置通过设置TMODTMOD中的中的C/TC/T位选择定时或计数功能;位选择定时或计数功能; 对对M1M1和和M0M0的设置对应于的设置对应于4 4种模式;种模式; 模式模式0 0、1 1、2 2时,时,T0T0与与T1T1的工作模式相同;的工作模式相同; 模式模式3 3时,两个定时器的工作模式不同。时,两个定时器的工作模式不同。 9 92.3.1 2.3.1 方式方式0 0 M1M1、M0M0为为00 00 ,定时器,定时器/ /计数器的框图:计数器的框图: 图6.7 定时器模式013位计数器10102.3.2 2.3.2 方式方式1 1 M1M1、M0M0为为0101,1616位的计数器。位的计数器。 2.32.3.3 .3 方式方式2 2 计数满后自动装入计数初值。计数满后自动装入计数初值。 M1M1、M0=M0=10 10 ,等效框图如下:,等效框图如下: 1111 方方式式2 2为为自自动动恢恢复复初初值值的的(初初值值自自动动装装入入)8 8位位定定 时时器器/ /计计数数器器,TLXTLX作作为为常常数数缓缓冲冲器器,当当TLXTLX计计数数溢溢出出时时,在在置置“1”“1”溢溢出出标标志志TFXTFX的的同同时时,还还自自动动的的将将THXTHX中中的的初初值值送送至至TLXTLX,使使TLXTLX从从初初值值开开始始重重新新计计数数。定时器定时器/ /计数器的方式计数器的方式2 2工作过程如图所示工作过程如图所示( (X=0,1)X=0,1)。1212 省去用户软件中重装初值的程序。精确的确定省去用户软件中重装初值的程序。精确的确定定时时间。定时时间。2.3.4 2.3.4 方式方式3 3 增加一个附加的增加一个附加的8 8位定时器位定时器/ /计数器,从而使计数器,从而使MCS-MCS-5151具有具有3 3个定时器个定时器/ /计数器。计数器。1313 只适用于定时器只适用于定时器/ /计数器计数器T0 T0 ,T1T1不能工作在方不能工作在方式式3 3。T1T1方式方式3 3时相当于时相当于TR1=0TR1=0,停止计数(此时停止计数(此时T1T1可可用来作串行口波特率产生器)。用来作串行口波特率产生器)。1 1工作方式工作方式3 3下的下的T0T0 T0 T0分为两个独立的分为两个独立的8 8位计数器位计数器: :TL0TL0和和TH0 TH0 。TL0TL0使用使用T0T0的状态控制位的状态控制位C/TC/T* *、GATEGATE、TR0TR0,而而TH0TH0被被固定为一个固定为一个8 8位定时器(不能作外部计数模式),并位定时器(不能作外部计数模式),并使用定时器使用定时器T1T1的状态控制位的状态控制位TR1TR1和和TF1TF1,同时占用定同时占用定时器时器T1T1的中断请求源的中断请求源TF1TF1。 各引脚与各引脚与T0T0的逻辑关系如图所示。的逻辑关系如图所示。 141415152 2T0T0工作在方式工作在方式3 3下下T1T1的各种工作方式的各种工作方式 当当T1T1用作串行口的波特率发生器时,用作串行口的波特率发生器时, T0T0才工作才工作在方式在方式3 3。T0T0处于方式处于方式3 3时,时, T1T1可定为方式可定为方式0 0、方式、方式1 1和方式和方式2 2,用来作为串行口的波特率发生器,或不需,用来作为串行口的波特率发生器,或不需要中断的场合。要中断的场合。(1 1)T1T1工作在方式工作在方式0 0 1616(2 2) T1T1工作在方式工作在方式1 1 (3 3) T1T1工作在方式工作在方式2 2 1717定时器定时器/ /计数器对输入信号的要求计数器对输入信号的要求 外部输入的计数脉冲的最高频率为系统振荡器频率的外部输入的计数脉冲的最高频率为系统振荡器频率的1/241/24,例如选用,例如选用1212MHzMHz频率的晶体,则可输入频率的晶体,则可输入500500KHzKHz的外部脉冲。的外部脉冲。对于外部输入信号的占空比并没有什么限制,但为了对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则确保某一给定的电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。故对外部输入这一电平至少要保持一个机器周期。故对外部输入信号的基本要求如图所示,图中信号的基本要求如图所示,图中TcyTcy为机器周期。为机器周期。1818定时器定时器/ /计数器的编程和应用计数器的编程和应用 4 4种工作方式中,方式种工作方式中,方式0 0与方式与方式1 1基本相同,由于方式基本相同,由于方式0 0是为兼容是为兼容MCS-48MCS-48而设,其计数初值计算复杂,在实而设,其计数初值计算复杂,在实际应用中,一般不用方式际应用中,一般不用方式0 0,而采用方式,而采用方式1 1。方式方式1 1应用应用 例例1 1 假设系统时钟频率采用假设系统时钟频率采用6 6MHzMHz,要在要在P1.0P1.0上输出一上输出一个周期为个周期为2 2msms的方波,如图所示。的方波,如图所示。 1919方波的周期用方波的周期用T0T0来确定,让来确定,让T0T0每隔每隔1 1msms计数溢出计数溢出1 1次,次,既既T0T0每隔每隔1 1msms产生一次中断,产生一次中断,CPUCPU相应中断后,在中相应中断后,在中断服务程序中对断服务程序中对P1.0P1.0取反。取反。 (1) (1)计算初值计算初值 设:需要装入设:需要装入T0T0的初值为的初值为X X,则有则有: :(2(21616- -X)210X)210-6-6=110=110-3-3 2 21616-X=500 X=65036-X=500 X=65036 X X化为化为1616进制,即进制,即X=FE0CH=1111111000001100BX=FE0CH=1111111000001100B。 所以,所以,T0T0的初值为:的初值为: TH0=0FEH TL0=0CHTH0=0FEH TL0=0CH(2)(2)初始化程序设计初始化程序设计 2020包括定时器初始化和中断系统初始化,主要是对寄存包括定时器初始化和中断系统初始化,主要是对寄存器器IPIP、IEIE、TCONTCON、TMODTMOD的相应位进行正确的设置,的相应位进行正确的设置,将计数初值送入定时器中。将计数初值送入定时器中。 (3)(3)程序设计程序设计 中断服务程序除了完成要求的产生方波这一工作之外,中断服务程序除了完成要求的产生方波这一工作之外,还要注意将计数初值重新装入定时器中,为下一次还要注意将计数初值重新装入定时器中,为下一次产生中断作准备。产生中断作准备。 参考程序:参考程序: ORG 0000HORG 0000HRESET: AJMP MAIN RESET: AJMP MAIN ;转主程序转主程序 ORG 000BHORG 000BH ;T0T0的中断入口的中断入口 AJMP IT0P AJMP IT0P ;转转T0T0中断处理程序中断处理程序IT0PIT0P ORG 0100HORG 0100HMAIN: MOV SP,#60H MAIN: MOV SP,#60H ;设堆栈指针设堆栈指针 MOV TMOD,#01HMOV TMOD,#01H ;设置设置T0T0为方式为方式1 1 2121 ACALL PT0M0ACALL PT0M0;调用子程序调用子程序PT0M0PT0M0HERE: AJMP HEREHERE: AJMP HERE ;自身跳转自身跳转PT0M0: MOV TL0,#0CHPT0M0: MOV TL0,#0CH;T0T0中断服务程序,中断服务程序,T0T0重新置初值重新置初值 MOV TH0,#0FEH MOV TH0,#0FEH SETB TR0 SETB TR0;启动启动T0T0 SETB ET0 SETB ET0;允许允许T0T0中断中断 SETB EA SETB EA ;CPUCPU开中断开中断 RETRETITOP: MOV TL0,#0CH ITOP: MOV TL0,#0CH ;T0T0中断服务子程序,中断服务子程序,T0T0置初值置初值 MOV TH0,#0FEHMOV TH0,#0FEH CPL P1.0 CPL P1.0 ;P1.0P1.0的状态取反的状态取反 RETIRETI查询方式的参考程序查询方式的参考程序: : MOV TMOD,#01HMOV TMOD,#01H ;设置设置T0T0为方式为方式1 1 2222 SETB TR0 SETB TR0 ;接通接通T0T0LOOP: MOV TH0,#0FEH LOOP: MOV TH0,#0FEH ;T0T0置初值置初值 MOV TL0,# 0CH MOV TL0,# 0CHLOOP1LOOP1:JNB TF0,LOOP1 JNB TF0,LOOP1 ;查询查询TF0TF0标志标志 CLR TR0 CLR TR0 ;T0T0溢出,关闭溢出,关闭T0T0 CPL P1.0 CPL P1.0 ;P1.0P1.0的状态求反的状态求反 SJMP LOOP SJMP LOOP例例2 2 假假设设系系统统时时钟钟为为6 6MHzMHz,编编写写定定时时器器T0T0产产生生1 1秒秒定定时的程序。时的程序。(1 1)定时器)定时器T0T0工作方式的确定工作方式的确定因因定定时时时时间间较较长长,采采用用哪哪一一种种工工作作方方式式?由由定定时时器器各各种工作方式的特性,可计算出:种工作方式的特性,可计算出: 方式方式0 0最长可定时最长可定时16.38416.384msms; ; 2323 方式方式1 1最长可定时最长可定时131.072131.072ms;ms; 方式方式2 2最长可定时最长可定时512512 s s。选方式选方式1 1,每隔,每隔100100msms中断一次,中断中断一次,中断1010次为次为1 1s s。 (2 2)计算计数初值)计算计数初值因为:因为:(2(21616- -X)210X)210-6 -6 = 10= 10-1-1所以:所以:X=15536=3CB0HX=15536=3CB0H因此:因此:TH0=3CHTH0=3CH,TL0=B0H TL0=B0H (3 3)1010次计数的实现次计数的实现对于中断对于中断1010次计数,可使次计数,可使T0T0工作在计数方式,也可工作在计数方式,也可用循环程序的方法实现。本例采用循环程序法。用循环程序的方法实现。本例采用循环程序法。(4 4)程序设计)程序设计 参考程序参考程序 : : 2424 ORG 0000HORG 0000HRESETRESET: LJMP MAIN LJMP MAIN ;上电,转主程序入口上电,转主程序入口MAINMAIN ORG 000BHORG 000BH ;T0T0的中断入口的中断入口 LJMP IT0PLJMP IT0P ;转转T0T0中断处理程序中断处理程序IT0PIT0P ORG 1000HORG 1000H MAIN MAIN: MOV SP,#60H MOV SP,#60H;设堆栈指针设堆栈指针 MOV B,#0AHMOV B,#0AH ;设循环次数设循环次数1010次次 MOV TMOD,#01HMOV TMOD,#01H;设设T0T0工作在方式工作在方式1 1 MOV TL0,#0B0H MOV TL0,#0B0H ;给给T0T0设初值设初值 MOV TH0,#3CHMOV TH0,#3CH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0;允许允许T0T0中断中断 2525 SETB EA SETB EA ;CPUCPU开放中断开放中断 HERE HERE: SJMP HERE SJMP HERE ;等待中断等待中断 ITOPITOP: MOV TL0,#0B0H MOV TL0,#0B0H ;T0T0中断子程序,重装初值中断子程序,重装初值 MOV TH0,#3CH MOV TH0,#3CH ; DJNZ B DJNZ B,LOOPLOOP CLR TR0 CLR TR0 ;1s1s定时时间到,停止定时时间到,停止T0T0工作工作 LOOP LOOP: RETI RETI 方式方式2 2的应用的应用省省去去程程序序中中重重装装初初值值的的指指令令,并并可可产产生生相相当当精精确确的的定定时时时间。时间。 例例3 3 当当T0T0(P3.4P3.4)引引脚脚上上发发生生负负跳跳变变时时,从从P1.0P1.0引引脚脚上上输输出出一一个个周周期期为为1 1msms的的方方波波, ,如如图图所所示示。(系系统统时时钟钟为为6 6MHzMHz)2626(1 1)工作方式选择)工作方式选择T0T0为方式为方式1 1计数,初值计数,初值 0 0FFFFHFFFFH,即外部计数输入端即外部计数输入端T0T0(P3.4P3.4)发生一次负跳变时,发生一次负跳变时,T0T0加加1 1且溢出,溢出且溢出,溢出标志标志TF0TF0置置“1”“1”,发中断请求。在进入,发中断请求。在进入T0T0中断程序中断程序后,把后,把F0F0标志置标志置“1”“1”,说明,说明T0T0引脚上已接收了负跳引脚上已接收了负跳变信号。变信号。T1T1定义为方式定义为方式2 2定时。在定时。在T0T0引脚产生一次负引脚产生一次负跳变跳变后,后,2727启动启动T1T1每每500500 s s产生一次中断,在中断服务程序中对产生一次中断,在中断服务程序中对P1.0P1.0求反,使求反,使P1.0P1.0产生周期产生周期1 1msms的方波。的方波。(2 2)计算)计算T1T1初值初值设设T1T1的初值为的初值为X X:则则 (2 (28 8- -X)210X)210-6-6=510=510-4-4 X=2 X=28 8-250=6=06H-250=6=06H(3 3)程序设计程序设计 ORG 0000HORG 0000H RESET: LJMP MAIN RESET: LJMP MAIN ;复位入口转主程序复位入口转主程序 ORG 000BHORG 000BH JMP IT0P JMP IT0P ;转转T0T0中断服务程序中断服务程序 2828 ORG 001BHORG 001BH LJMP IT1P LJMP IT1P ;转转T1T1中断服务程序中断服务程序 ORG 0100HORG 0100HMAIN: MOV SP,#60HMAIN: MOV SP,#60H ACALL PT0M2 ACALL PT0M2 ;调用对调用对T0T0,T1T1初始化子程序初始化子程序LOOP: MOV C,F0 LOOP: MOV C,F0 ;T0T0产生过中断了吗,产生过产生过中断了吗,产生过 中断,则中断,则F0=1F0=1 JNC LOOP JNC LOOP;T0T0没有产生过中断,则跳到没有产生过中断,则跳到 LOOPLOOP,等待等待T0T0中断中断 SETB TR1 SETB TR1 ;启动启动T1T1 SETB ET1 SETB ET1 ;允许允许T1T1中断中断HERE: AJMP HEREHERE: AJMP HERE2929 PT0M2: MOV TMOD,#26H PT0M2: MOV TMOD,#26H ;初始化,初始化,T1T1为方式为方式2 2定定 时,时,T0T0为方式为方式1 1计数计数 MOV TL0,#0FFH MOV TL0,#0FFH ;T0T0置初值置初值 MOV TH0,#0FFHMOV TH0,#0FFH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断 MOV TL1,#06H MOV TL1,#06H ;T1T1置初值置初值 MOV TH1,#06HMOV TH1,#06H CLR F0 CLR F0;把把T0T0已发生中断标志已发生中断标志F0F0清清0 0 SETB EASETB EA RETRET IT0P: CLR TR0 IT0P: CLR TR0 ;T0T0中断服务程序,停止中断服务程序,停止T0T0计数计数 3030 SETB F0 SETB F0 ;建立产生中断标志建立产生中断标志 RETIRETIIT1P: CPL P1.0IT1P: CPL P1.0;T1T1中断服务,中断服务,P1.0P1.0位取反位取反 RETI RETI在在T1T1定时中断服务程序定时中断服务程序IT1PIT1P中,由于方式中,由于方式2 2是初值可以是初值可以自动重新装载的,省去了自动重新装载的,省去了T1T1中断服务程序中重新装中断服务程序中重新装入初值入初值0606H H的指令。的指令。 例例4 4 利用定时器利用定时器T1T1的方式的方式2 2对外部信号计数,要求每计对外部信号计数,要求每计满满100100个数,将个数,将P1.0P1.0取反。取反。 本例是方式本例是方式2 2计数模式的应用。计数模式的应用。(1 1)选择工作方式)选择工作方式 3131外部信号由外部信号由T1(P3.5)T1(P3.5) 脚输入脚输入, ,每发生一次负跳变计数每发生一次负跳变计数器加器加1 1,每输入,每输入100100个脉冲,计数器产生溢出中断,个脉冲,计数器产生溢出中断,在中断服务程序中将在中断服务程序中将P1.0P1.0取反一次。取反一次。T1T1工作在方式工作在方式2 2的控制字为的控制字为TMOD=60HTMOD=60H。不使用不使用T0T0时,时,TMODTMOD的低的低4 4位可任取,但不能使位可任取,但不能使T0T0进入方式进入方式3 3,这里,这里取全取全0 0。(2 2)计算)计算T1T1的初值的初值X=2X=28 8-100=156=9CH-100=156=9CH 因此,因此,TL1TL1的初值为的初值为9 9CHCH,重装初值寄存器重装初值寄存器TH1=9CHTH1=9CH(3 3)程序设计程序设计 ORG 0000HORG 0000HLJMP MAINLJMP MAINORG 001BHORG 001BH;T1T1中断服务程序入口中断服务程序入口 3232 CPL P1.0CPL P1.0;P1.0P1.0位取反位取反 RETIRETI ORG 0100HORG 0100H MAIN: MAIN:MOV TMOD,#60H MOV TMOD,#60H ;设设T1T1为方式为方式2 2计数计数 MOV TL0,#9CH MOV TL0,#9CH ;T0T0置初值置初值 MOV TH0,#9CH MOV TH0,#9CH SETB TR1SETB TR1 ;启动启动T1T1 HERE: HERE: AJMP HEREAJMP HERE方式方式3 3的应用的应用T0T0工作在方式工作在方式3 3时,时,TL0TL0和和TH0TH0被分成两个独立的被分成两个独立的8 8位定位定时器时器/ /计数器。其中,计数器。其中,TL0TL0可作为可作为8 8位的定时器位的定时器/ /计数计数器;而器;而TH0TH0只能作为只能作为8 8位的定时器。位的定时器。 3333当当T1T1用作串行口波特率发生器时,用作串行口波特率发生器时,T0T0才设置为方式才设置为方式3 3。此时,常把此时,常把T1T1设置为方式设置为方式2 2,用作波特率发生器。,用作波特率发生器。 例例5 5 假设某假设某MCS-51MCS-51应用系统的两个外中断源已被占用,应用系统的两个外中断源已被占用,设置设置T1T1工作在方式工作在方式2 2,作波特率发生器用。现要求增,作波特率发生器用。现要求增加一个外部中断源,并控制加一个外部中断源,并控制P1.0P1.0引脚输出一个引脚输出一个5 5kHzkHz的的方波。设系统时钟为方波。设系统时钟为6 6MHzMHz。(1 1)选择工作方式)选择工作方式设设置置TL0TL0工工作作在在方方式式3 3计计数数,把把T0T0引引脚脚(P3.4P3.4)作作附附加加的的外外中中断断输输入入端端,TL0TL0初初值值设设为为0 0FFHFFH,当当检检测测到到T0T0引引脚脚电电平平出出现现负负跳跳变变时时,TL0TL0溢溢出出,申申请请中中断断,这这相相当当于于跳跳沿沿触触发发的的外外部部中中断断源源。TH0TH0为为8 8位位方方式式3 3定定时时模模式式,定时控制定时控制P1.0P1.0输出输出5 5kHzkHz的方波信号。如图所示。的方波信号。如图所示。3434(2 2)初值计算初值计算TL0TL0的初值设为的初值设为0 0FFHFFH。5kHz5kHz的方波的周期为的方波的周期为200200 s s,因此因此TH0TH0的定时时间为的定时时间为100100 s s。TH0TH0初值初值X X计算如下:计算如下: (2(28 8- -X)210X)210-6-6=110=110-4-4 X=2 X=28 8-100=156=9CH-100=156=9CH3535(3 3)程序设计程序设计 ORG 0000HORG 0000H LJMP MAIN LJMP MAIN ORG 000BHORG 000BH ;T0T0中断入口中断入口 LJMP TL0INTLJMP TL0INT;跳跳T0T0中断服务程序中断服务程序 ORG 001BHORG 001BH ;在在T1T1方式方式3 3时,时,TH0TH0占用占用T1T1的中断的中断 LJMP TH0INT LJMP TH0INT;跳跳TH0TH0中断服务程序中断服务程序 ORG 0100HORG 0100HMAINMAIN:MOV TMOD,#27H MOV TMOD,#27H ;T0T0方式方式3 3计数,计数,T1T1方式方式2 2定定 时时 MOV TL0,#0FFH MOV TL0,#0FFH ;置置TL0TL0初值初值 MOV TH0,#9CH MOV TH0,#9CH ;置;置TH0TH0初值初值 MOV TL1,#dataL MOV TL1,#dataL ;datadata为波特率常数为波特率常数 3636 MOV TH1,#dataH MOV TH1,#dataH MOV TCON,#55H MOV TCON,#55H;允允许T0T0中断中断 MOV IE,#9FHMOV IE,#9FH ;启启动T1T1 TL0INTTL0INT:MOV TL0,#0FFHMOV TL0,#0FFH;TL0TL0中断服中断服务程序,程序,TL0TL0重新装入初重新装入初值 中断中断处理理 TH0INTTH0INT:MOV TH0,#9CHMOV TH0,#9CH ;TH0TH0中断服务程序,中断服务程序,TH0TH0重重新装入初值新装入初值 CPL P1.0CPL P1.0;P1.0P1.0位取反输出位取反输出 RETI RETI 3737门控制位门控制位GATEGATE的应用的应用测量脉冲宽度测量脉冲宽度 GATE1 GATE1可使定时器可使定时器/ /计数器计数器T1T1的启动计数受的启动计数受INT1INT1* *的控制,可测量引脚的控制,可测量引脚INT1INT1* *(P3.3P3.3)上正脉冲的宽度上正脉冲的宽度(机器周期数)。(机器周期数)。3838程序:程序: ORG 0000HORG 0000HRESET: AJMP MAIN RESET: AJMP MAIN ;复位入口复位入口转主程序主程序 ORG 0100HORG 0100H MAIN: MOV SP,#60H MAIN: MOV SP,#60H MOV TMOD,#90H MOV TMOD,#90H;T1T1为方式方式1 1定定时控制字控制字 MOV TL1,#00HMOV TL1,#00H MOV TH1,#00H MOV TH1,#00H LOOP: JB P3.3,LOOP0 LOOP: JB P3.3,LOOP0;等待等待INT1INT1* *低低 SETB TR1SETB TR1;如果如果INT1INT1* *为低,启低,启动T1T1 LOOP1:JNB P3.3,LOOP1 LOOP1:JNB P3.3,LOOP1;等待等待INT1INT1* *升高升高 LOOP2:JB P3.3,LOOP2 LOOP2:JB P3.3,LOOP2 ;等待等待INT1INT1* *降低降低 3939 CLR TR1CLR TR1;停止停止T1T1计数计数 MOV A,TL1MOV A,TL1;T1T1计数值送计数值送A A将将A A中的中的T1T1计数计数值送显示缓冲区值送显示缓冲区转换成显示的代码转换成显示的代码 LOOP3: LCALL DIR LOOP3: LCALL DIR ;调用显示子程序调用显示子程序DIRDIR(略)显示略)显示T1T1计数值计数值 AJMP LOOP3 AJMP LOOP3 ; 执执行行程程序序,使使INT1INT1* *引引脚脚上上出出现现的的正正脉脉冲冲宽宽度度以以机机器器周周期数的形式显示在显示器上。期数的形式显示在显示器上。* *实时时钟的设计实时时钟的设计 1 1实时时钟实现的基本思想实时时钟实现的基本思想 4040如何获得如何获得1 1秒的定时,可把定时时间定为秒的定时,可把定时时间定为100100msms,采用采用中断方式进行溢出次数的累计,计满中断方式进行溢出次数的累计,计满1010次,即得到次,即得到秒计时。秒计时。片内片内RAMRAM中规定中规定3 3个单元作为秒、分、时单元,具体安个单元作为秒、分、时单元,具体安排如下:排如下: 42 42H H:“秒秒”单元单元 ;4141H H:“分分”单元单元;4040H H:“时时”单元单元从秒到分,从分到时是通过软件累加并进行比较的方从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。法来实现的。 2 2程序设计程序设计 (1 1)主程序的设计)主程序的设计流程如图所示。流程如图所示。 4141(2 2)中断服务程序的设计)中断服务程序的设计中断服务程序的主要功能是实中断服务程序的主要功能是实现秒、分、时的计时处理。参现秒、分、时的计时处理。参考程序略。考程序略。4242运行中读定时器运行中读定时器/ /计数器计数器在在读读取取运运行行中中的的定定时时器器/ /计计数数器器时时,需需要要特特别别加加以以注注意意,若若恰恰好好出出现现TLXTLX溢溢出出向向THXTHX进进位位的的情情况况,则则读读得得的的(TLXTLX)值值就就完完全全不不对对了了。同同样样,先先读读(THXTHX)再再读读(TLXTLX)也可能出错。也可能出错。方法:先读(方法:先读(THXTHX),),后读(后读(TLXTLX),),再读(再读(THXTHX)。)。若若两次读得(两次读得(THXTHX)相同,则读得的内容正确。若前后相同,则读得的内容正确。若前后两次读得的(两次读得的(THXTHX)有变化,则再重复上述过程,这有变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程次重复读得的内容就应是正确的。下面是有关的程序,读得的(序,读得的(TH0TH0)和(和(TL0TL0)放置在放置在R1R1和和R0R0内。内。4343RDTIME:MOV A,TH0RDTIME:MOV A,TH0;读(读(TH0TH0) MOV R0,TL0 MOV R0,TL0 ;读(读(TL0TL0) CJNE CJNE A,TH0,RDTIMEA,TH0,RDTIME;比较比较2 2次读得的(次读得的(TH0TH0), ,不相等则重复读不相等则重复读 MOV R1,AMOV R1,A;(;(TH0TH0)送入送入R1R1中中 RETRET 4444
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号