《最新单片机定时器幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新单片机定时器幻灯片.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机定时器单片机定时器 1 1定时器定时器 用于实时控制,定时采样、定时启用于实时控制,定时采样、定时启动等。当定时时间与设定值相等,执动等。当定时时间与设定值相等,执行规定操作。行规定操作。 K1K1接内部时钟时,脉冲源是振荡频接内部时钟时,脉冲源是振荡频率的率的1212分之一,即对机器周期计数,分之一,即对机器周期计数,为定时方式,所以定时时间为:为定时方式,所以定时时间为: T = T = 计数值计数值* *机器周期机器周期2 2计数器计数器生产线上产品计数生产线上产品计数。每个产品通过得。每个产品通过得到一个脉冲信号,计数器记录脉冲个到一个脉冲信号,计数器记录脉冲个数,当计数值与设定
2、值相等,启动包数,当计数值与设定值相等,启动包装机器。装机器。检测转速检测转速。电机转动一圈发出一个脉。电机转动一圈发出一个脉冲,计数器记录一秒时间内脉冲个数,冲,计数器记录一秒时间内脉冲个数,显示转速。显示转速。K1K1接外部脉冲时,工作在计数状态,接外部脉冲时,工作在计数状态,当当T0T0或或T1T1有一个有一个1 1到到0 0的跳变时,计数的跳变时,计数器加一。计数操作中,每个机器周期器加一。计数操作中,每个机器周期的的S5P2S5P2期间采样外部输入信号,当一期间采样外部输入信号,当一个机器周期采样值为高电平,另一个个机器周期采样值为高电平,另一个机器周期采样值为低电平时,计数器机器周
3、期采样值为低电平时,计数器加一。所以识别一个跳变要占两个机加一。所以识别一个跳变要占两个机器周期。因此外部计数脉冲高低电平器周期。因此外部计数脉冲高低电平宽度每个至少要保持一个机器周期。宽度每个至少要保持一个机器周期。两个16位可编程定时/计数器: 定时 计数 波特率发生器四种工作模式:13位定时/计数器 16位定时/计数器 8位定时/计数器(自动装入常数) 8位定时/计数器 (两个独立8位,仅定时/计数器0有) MCS-51的定时的定时/计数器主要由几个专用寄存器组成:计数器主要由几个专用寄存器组成:TL0:定时定时/计数器计数器0低八位计数值低八位计数值TH0:定时定时/计数器计数器0高八
4、位计数值高八位计数值TL1:定时定时/计数器计数器1低八位计数值低八位计数值TH1:定时定时/计数器计数器1高八位计数值高八位计数值TMOD:控制寄存器,控制定时控制寄存器,控制定时/计数器方式计数器方式 的工作方式的工作方式TCON:控制寄存器,控制定时控制寄存器,控制定时/计数器的起停计数器的起停 指示溢出中断标志指示溢出中断标志GATEC/TM1M0GATEC/TM1M0T1T0一、定时器方式寄存器一、定时器方式寄存器TMOD(8989H H)TMODTMOD的地址为的地址为8989H H,不可按位寻址,不可按位寻址,只能用字节指令设置定时器工作方式。只能用字节指令设置定时器工作方式。低
5、半字节定义定时器低半字节定义定时器T T0 0,高半字节定高半字节定义定时器义定时器T T1 1。复位时,复位时,TMODTMOD所有位均所有位均为零为零。 M1 M0工作方式功能说明0 0方式013位计数器0 1方式116位计数器1 0方式2自动再装入8位计数器1 1方式3定时器0:分成两个8位计数器1 1)功能选择位)功能选择位 C/TC/T:=0=0,定时功能,计数内部机器周期脉冲;定时功能,计数内部机器周期脉冲;=1=1,计数功能,计数引脚,计数功能,计数引脚T0(T1)T0(T1)输入的输入的负脉冲。负脉冲。 2 2)方式选择位)方式选择位M1M1、M0M0:4 4种工作方式:种工作
6、方式:3 3)门控方式选择位)门控方式选择位GATEGATE : =0=0,非门控方式非门控方式( (内部启动内部启动) ):TRx=1TRx=1,启动定时器工作;启动定时器工作;TRx=0TRx=0,停止定时器工作。停止定时器工作。=1=1,门控方式,门控方式( (外部启动外部启动) ):TRx=1TRx=1且引脚且引脚INTx=1INTx=1才启动。才启动。确定定时器工作方式指令:确定定时器工作方式指令:MOV TMOD,#方式字方式字例例:设:设T0T0用方式用方式2 2非门控定时,非门控定时,T1T1用用方式方式1 1门控计数。门控计数。MOVTMOD,#0D2HTMOD各位定义及具体
7、意义各位定义及具体意义TCON的位地址位88H,可按位寻址。复位时,TCON所有位均为零。 1 1)启动控制位)启动控制位TR0TR0、TR1TR1=0=0,停止定时器工作停止定时器工作=1=1,启动定时器工作,启动定时器工作例:启动例:启动T0T0:SETBSETBTR0TR0二、二、定时器控制定时器控制/ /状态寄存器状态寄存器TCON(8888H H)位位8FH8EH8DH 8CH 8BH 8AH89H88H意义意义TF1TR1TF0TR0IE1IT1IE0IT02 2)溢出中断标志位)溢出中断标志位TF0TF0、TF1TF1定时器溢出使定时器溢出使TFx=1TFx=1,引起中断请求,引
8、起中断请求,CPUCPU响应响应TxTx中断后,自动清中断后,自动清0 0 TFxTFx。可用软件检测可用软件检测TFxTFx,必须软件清必须软件清0 0。WAITWAIT:JBC TF0JBC TF0,NEXTNEXT;检测检测T0T0是否溢出是否溢出 SJMPSJMP WAITWAIT ;未溢出,继续检测未溢出,继续检测NEXTNEXT: ;溢出,溢出,TF0TF0清清0 0,处理,处理溢出溢出TCON各位定义及具体的意义各位定义及具体的意义三、可预置初值的三、可预置初值的1616位加位加1 1计数器计数器TH0TH0、TL0TL0、 TH1 TH1、TL1TL1预置预置T0T0初值指令:
9、初值指令:MOVTH0,#XHMOVTL0,#XL 由方式选择位由方式选择位M1M1、M0M0设定设定一、一、 方式方式0 0 13 13位定时位定时/ /计数器。计数器。 THx 8THx 8位和位和TLxTLx低低5 5位组成位组成1313位加位加1 1 计数器,此种计数器,此种方式与方式与MCSMCS4848系列兼容,如果不是为系列兼容,如果不是为了兼容的目的,一般不用方式了兼容的目的,一般不用方式0.0. 方式方式0 0的全部功能,方式的全部功能,方式1 1都可以都可以代替。代替。1、方式、方式0介绍介绍当M1M0两位为00时,为工作方式0(13位)C/T=0时,作为定时器方式工作,T
10、0对机器周期计数,其定时时间为: (213- T0初值初值)时钟周期时钟周期12 非门控方式:当非门控方式:当GATE0, 控制权由控制权由 TRx 决定决定 TRx1 计数开始计数开始 TRx 0 计数停止计数停止门控方式:当门控方式:当GATE1、TRx1 控制权由控制权由 INTx 决定决定 INTx1 计数开始计数开始 INTx 0 计数停止计数停止最大计数脉冲个数:18192 (213),最长定时时间(晶振12MHz T=1s):1s8192T= 8.192 ms启动计数方式:启动计数方式:定时器0模式0结构2 2、应用举例、应用举例使用定时使用定时/ /计数器进行定时或计数之前,首
11、先计数器进行定时或计数之前,首先要通过软件对它进行初始化。要通过软件对它进行初始化。初始化包括下述初始化包括下述步骤:步骤:1.确定工作方式:对确定工作方式:对TMODTMOD寄存器赋值;寄存器赋值;2.置定时置定时/ /计数器初值:对计数器初值:对TH0、TL0或或TH1、TL1寄存器赋值;寄存器赋值; 初值初值X X的计算方法如下:的计算方法如下: 计数方式时:计数方式时:X=N-M X=N-M 定时方式时:定时方式时:X=N-t/TX=N-t/T在上两式中,在上两式中,M M为计数模值,即从计为计数模值,即从计数器启动到溢出时所需计数值;数器启动到溢出时所需计数值;t t为为定时值;定时
12、值;T T为为机器机器周期。周期。3.根据需要,开放定时器中断:对根据需要,开放定时器中断:对IEIE寄存器赋值;寄存器赋值;4.4.启动定时启动定时/ /计数器:使计数器:使TCONTCON寄存器寄存器的的TRTR0 0或或TRTR1 1置位,或由加到引脚置位,或由加到引脚INTINTX X上的外部信号电平启动。上的外部信号电平启动。例例: :利用利用T0方式方式0 0产生宽度为产生宽度为2 2ss,周期为周期为2 2msms的定的定时负脉冲,由时负脉冲,由P1.7P1.7送出,系统采用送出,系统采用1212MHzMHz的晶振。的晶振。 解解 由于晶振为由于晶振为1212MHzMHz,机器周
13、期为机器周期为1 1s,s,这样利用这样利用T0方式方式0 0产生周期为产生周期为2 2msms定时的初值定时的初值X X为:为: X =N-t/T =213-210-3/(110-6) =8192-2000 =6192 =1830H =1100000110000B 则则TH0= =1100000111000001B=0C1HB=0C1H,TL0=000=0001000010000B=10HB=10H由于由于CLR bitCLR bit和和NOPNOP指令的执行时间为指令的执行时间为1 1个个机器周期,当晶振为机器周期,当晶振为1212MHzMHz时,这两条指令时,这两条指令的执行时间都为的执
14、行时间都为1 1ss。这样,每当定时时这样,每当定时时间到时,利用间到时,利用T0产生中断,在中断服务程产生中断,在中断服务程序中,先执行序中,先执行CLR P1.7CLR P1.7和和NOPNOP两条指令,然两条指令,然后执行后执行SETB P1.7,SETB P1.7,最后重装最后重装TH0和和TL0的初的初值,就可以产生题目所要求的定时脉冲。值,就可以产生题目所要求的定时脉冲。置置T0为定时方式为定时方式0 0,GATE=GATE=0,C/T=C/T=0, , M1M0=00H,=00H, T1不用,可任意,一般取不用,可任意,一般取0,故,故TMOD=00H,TMOD=00H,并由并由
15、TRTR0 0启停启停T0。初始化程序初始化程序:MOV TMOD , #00H MOV TH0 , #0C1H MOV TL0 , #10H ;初始化初始化T0 MOV IE , #82H;开开T0中断中断 SETB TR0;启动启动T0 T T0 0溢出中断服务程序溢出中断服务程序: :T0INT:CLR P1.7 NOP SETBP1.7 MOVTH0,#0C1H;T0重置初值重置初值 MOVTL0,#10H RETI例例6-3:利用:利用T0的工作模式的工作模式0产生产生1ms定定时,在时,在P1.0引脚输出周期为引脚输出周期为2ms的方波。的方波。设单片机晶振频率设单片机晶振频率fo
16、sc=12MHz。编程。编程实现其功能。实现其功能。解:解:要在要在P1.0引脚输出周期为引脚输出周期为2ms的方的方波,只要使波,只要使P1.0每隔每隔1ms取反一次即可。取反一次即可。 (1)选择工作模式)选择工作模式 T0的模式字为的模式字为TMOD=00H,即即 M1M0=00,C/T=0,GATE=0,其余位为其余位为0(2)计算)计算1ms定时时定时时T0的初值的初值 (213X)1/12 10-612=110-3 s X=7193D=11100000 11000B T0的低的低5位:位:11000B=18H即即 (TL0)=18H T0的高的高8位:位:11100000B=E0H
17、即即 (TH0)=E0H(3)采用查询方式的程序)采用查询方式的程序程序清单:程序清单: MOV TMOD,#00H ;设置;设置T0为模式为模式0 MOV TL0,#18H ;送初值;送初值 MOV TH0,#0E0H SETB TR0 ;启动定时;启动定时 LOOP:JBC TF0,NEXT ;查询定时时间到否;查询定时时间到否 SJMP LOOP NEXT:MOV TL0,#18H ;重装计数初值;重装计数初值 MOV TH0,#0E0H CPL P1.0 ;取反;取反 SJMP LOOP ;重复循环;重复循环(4)采用定时器溢出中断方式的程序)采用定时器溢出中断方式的程序程序清单:程序
18、清单: 主程序主程序 ORG 0000H RESET: AJMP MAIN ; 跳过中断服务程序区跳过中断服务程序区 ORG 0030H MAIN: MOV TMOD,#00H ;设置;设置T0为模式为模式0 MOV TL0,#18H ;送初值;送初值 MOV TH0,#0E0H SETB EA ;CPU开中断开中断 SETB ET0 ;T0中断允许中断允许 SETB TR0 ;启动定时;启动定时 HERE:SJMP HERE ;等待中断,虚拟主程序;等待中断,虚拟主程序中断服务程序中断服务程序 ORG 000BH AJMP CTC0 ORG 0120H CTC0: MOV TL0,#18H
19、;重新装如初值;重新装如初值 MOV TH0,#0E0H CPL P1.0 ;P1.0取反取反 RETI1 1、方式、方式1 1介绍介绍 当当M1M0两位为两位为01时,为工作方式时,为工作方式1。 其定时时间为:其定时时间为: (2 (21616- - T0初值初值) )时钟周期时钟周期1212作为计数器方式工作时,作为计数器方式工作时,T0对外部事对外部事件计数。件计数。计数长度最大为:计数长度最大为: 216=65536(个外部脉冲)(个外部脉冲)二、二、 方式方式1 1最大计数脉冲个数:165536 (216),最长定时时间(晶振12MHz T=1s):1s 65536T= 65.54
20、ms启动计数方式:启动计数方式:非门控方式:当非门控方式:当GATE0, 控制权由控制权由 TRx 决定决定 TRx1 计数开始计数开始 TRx 0 计数停止计数停止门控方式:当门控方式:当GATE1、TRx1 控制权由控制权由 INTx 决定决定 INTx1 计数开始计数开始 INTx 0 计数停止计数停止定时器0模式1结构2 2、应用举例、应用举例 例例:利用利用T0方式方式1 1产生一个产生一个5050HzHz的方波,由的方波,由P1.7P1.7送出。系统采用送出。系统采用1212MHzMHz的晶振,并假定的晶振,并假定CPUCPU不作其不作其它工作。它工作。解解 由于周期为由于周期为1
21、/501/50Hz=20msHz=20ms,则这种方波的正负脉冲宽则这种方波的正负脉冲宽度都为度都为1010msms。由于晶振为由于晶振为1212MHzMHz,机器周期为机器周期为1 1s,s,这样利用这样利用T0方式方式1 1产产生生1010msms定时的初值定时的初值X X为:为: X =N-t/T =216-1010-3/(110-6) =65536-10000 =55536 =D8F0H =1101100011110000B 则则TH0= =1101100011011000B=0D8HB=0D8H,TL0= =1111000011110000B=0F0HB=0F0H 置置T0为定时方式
22、为定时方式1 1,GATE=0GATE=0,C/T=0,C/T=0, M M1 1M M0 0=01H,=01H, T1不用,可不用,可任意,一般取任意,一般取0 0,故,故TMOD=01H,TMOD=01H,并由并由TRTR0 0启停启停T0。由于由于 CPUCPU不不作其它工作,则可采用查询方式进行控制。作其它工作,则可采用查询方式进行控制。 程序清单:程序清单: MOVMOVTMOD,#01HTMOD,#01H MOVMOVTHTH0,#0D8H,#0D8H MOVMOVTLTL0,#0F0H,#0F0H;初始化初始化T T0SETBSETBTRTR0;启动启动T0 LOOP:JBC :
23、JBC TFTF0 0,AGN,AGN;查询定时时间到否?查询定时时间到否?AJMP LOOPAJMP LOOP;定时时间未到,则继定时时间未到,则继续查询等待续查询等待AGN:AGN:MOVMOVTHTH0,#0D8H,#0D8H;定时时间到,定时时间到,T T0重重置初值置初值MOVMOVTLTL0,#0F0H,#0F0H CPLCPLP1.7P1.7;输出取反输出取反NOPNOPAJMP LOOPAJMP LOOP;重复循环重复循环1 1、方式、方式2 2介绍介绍当当M1M0两位为两位为10时,为工作方式时,为工作方式2 TLTL0作为作为8位计数器,位计数器,THTH0用作保存计用作保
24、存计数初值。数初值。特别适合用作较精确的脉冲信号发特别适合用作较精确的脉冲信号发生器,脉冲信号的周期计算如下:生器,脉冲信号的周期计算如下: (2 (28 8- - TH0初值初值) )时钟周期时钟周期1212 三、三、 方式方式2 2 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(晶振12MHz时 T=1s): 256s 自动恢复初值8位定时/计数器。TLx为8位加1计数器,THx为8位初值暂存器。定时器0模式2结构)(256123221THfoscSMOD2 2、应用举例、应用举例 方式方式2 2可省去用户软件重装初值的操作,可获得相当精确的定时时间,可省去用
25、户软件重装初值的操作,可获得相当精确的定时时间,常用作串行口波特率发生器。常用作串行口波特率发生器。例例: 采用采用11.05911.059MHzMHz晶振晶振, ,将将T1用作串行口波特率发生器,按用作串行口波特率发生器,按方式方式2 2产生产生12001200的波特率的波特率. .解解 参参9.19.1节可以知道,波特率的计算如下:节可以知道,波特率的计算如下: 波特率波特率= = 若若SMOD=0SMOD=0,则可以算得重装载值:则可以算得重装载值:( (THTH1 1)=256- 232=E8H)=256- 232=E8H置置T1为定时方式为定时方式2 2,GATE=0GATE=0,C
26、/T=0,C/T=0, M1M0=02H,=02H, T0不用,可任意,不用,可任意,一般取一般取0 0,故,故TMOD=20H,TMOD=20H,并由并由TRTR1 1启停启停T1。 程序清单:程序清单:MOVMOVTMOD,#20HTMOD,#20HMOVMOVTHTH1,#0E8H,#0E8HMOVMOVTLTL1,#0E8H,#0E8H;初始化初始化T T1SETBSETBTRTR1;启动启动T1例:当例:当P3.4引脚上的电平发生负跳变引脚上的电平发生负跳变时,时, 从从P1.0输出输出一个一个500s的同步脉的同步脉冲。请编冲。请编程序实现该功能。查询方式,程序实现该功能。查询方式
27、,fosc=6MHz。解:解:(1)模式选择)模式选择 选选T0为模式为模式2,外部事件计数方式。,外部事件计数方式。 当当P3.4引脚上的电平发生负跳变时,引脚上的电平发生负跳变时,T0计数器加计数器加1,溢,溢出标志出标志TF0置置1;然后改变;然后改变T0为为500s定时工作方式,并定时工作方式,并使使P1.0输出由输出由1变为变为0。T0定时到产生溢出,使定时到产生溢出,使P1.0输出输出恢复高电平,恢复高电平,T0又恢复外部事件计数方式。又恢复外部事件计数方式。 如如 图图6-9 所示。所示。(2)计算初值)计算初值 T0工作在外部事件计数方式工作在外部事件计数方式,当计数到,当计数
28、到28时,时,再加再加1计数器就会溢出。设计数初值为计数器就会溢出。设计数初值为X,当再,当再出现一次外部事件时,计数器溢出。出现一次外部事件时,计数器溢出。 则则: X+1=28 X= 28 1=11111111B=0FFH T0工作在定时工作方式工作在定时工作方式,设晶振频率为,设晶振频率为6MHz,500s相当于相当于250个机器周期。因此,初值个机器周期。因此,初值X为为 (28X)2s=500s X=6=06H3)程序清单)程序清单START: MOV TMOD,#06H ;设置;设置T0为模式为模式2,外外部计数方式部计数方式 MOV TL0,#0FFH ;T0计数器初值计数器初值
29、 MOV TH0,#0FFH SETB TR0 ;启动;启动T0计数计数 LOOP1:JBC TF0,PTFO1 ;查询;查询T0溢出标志,溢出标志, ;TF0=1时转,且清时转,且清TF0=0 SJMP LOOP1 ; PTFO1:CLR TR0 ;停止计数;停止计数 MOV TMOD,#02H ;设置;设置T0为模式为模式2,定时方式,定时方式 MOV TL0,#06H ;送初值,定时;送初值,定时500s MOV TH0,#06H CLR P1.0 ; P1.0清清0 SETB TR0 ;启动定时;启动定时500s LOOP2 : JBC TF0,PTFO2 ;查询;查询T0溢出标志,溢
30、出标志, ;TF0=1时转,且清时转,且清TF0=0 ; (第一个(第一个500s到否?)到否?) SJMP LOOP2 ;等待中断,虚拟主程序;等待中断,虚拟主程序 PTFO2 : SETB P1.0 ; P1.0置置1 CLR TR0 ;停止计数;停止计数 SJMP STARTl例例:利用定时器利用定时器T1的模式的模式2对外对外部信号计数。要求没计满部信号计数。要求没计满100次,次,将将 P1.0端取反端取反。解:解:(1)选择模式)选择模式 外部信号由外部信号由T1(P3.5)引脚输入,每发生一)引脚输入,每发生一次负跳变计数器加次负跳变计数器加1,每输入,每输入100个脉冲,计数个
31、脉冲,计数器发生溢出中断,中断服务程序将器发生溢出中断,中断服务程序将P1.0取反一取反一次。次。 T1计数工作方式模式计数工作方式模式2的模式字为的模式字为(TMOD)=60H。 T0不用时,不用时,TMOD的低的低4位可任取,但不能位可任取,但不能进入模式进入模式3,一般取,一般取0。(2)计算)计算T1的计数初值的计数初值 X= 28 100=156=9CH 因此因此:TL1的初值为的初值为9CH, 重装初值寄存器重装初值寄存器TH1=9CH。(3)程序清单)程序清单 MAIN: MOV TMOD,#60H ;设置;设置T1为模式为模式2,外外部计数方式部计数方式 MOV TL1,#9C
32、H ;T1计数器初值计数器初值 MOV TH1,#9CH MOV IE,#88H ; 定时器开中断定时器开中断 SETB TR1 ;启动;启动T1计数计数 HERE:SJMP HERE ;等待中断;等待中断 ORG 001BH ;中断服务程序入口;中断服务程序入口 CPL P1.0 RETI1 1、方式、方式3 3介绍介绍当当M1M0两位为两位为11时,为工作方式时,为工作方式3。 在方式在方式3 3下,定时器下,定时器T1将停止计数,只是保持其计数将停止计数,只是保持其计数值,与置值,与置TR1为为0 0等效。等效。 定时器定时器T0在方式在方式3 3下分成两个独立的计数器下分成两个独立的计
33、数器TL0和和TH0。其中,其中,TL0可用作定时或计数器,并占用定时器可用作定时或计数器,并占用定时器T0的所的所有控制位:有控制位:GATE,C/T,TRGATE,C/T,TR0 0,INT,INT0 0和和TFTF0 0;而而TH0固定作为固定作为定时器用,并借用定时器定时器用,并借用定时器T1的的TRTR1 1和和TFTF1 1,THTH0 0控制着定控制着定时器的时器的T T1 1中断。中断。当定时器当定时器T0在方式在方式3 3时,定时器时,定时器T1仍可按方式仍可按方式0 0、1 1、2 2工作,只是不能使用其溢出标志工作,只是不能使用其溢出标志TFTF1 1和请求中断而已和请求
34、中断而已。四、四、方式方式3 3T0模式模式3结构结构 T0模式模式3时时T1结构结构T0T0分成分成2 2个个8 8位定时器:位定时器:TL0TL0定时定时/ /计数器和计数器和TH0TH0定时器。定时器。TL0TL0占用占用T0T0控制位:控制位:C/TC/T,TR0TR0,GATEGATE;TH0TH0占用占用T1T1控制位:控制位:TR1TR1。T1T1不能使用方式不能使用方式3 3工作工作2 2、应用举例、应用举例( (略)略)当按方式当按方式2 2将定时器将定时器T1用作串行口波特率时,为增用作串行口波特率时,为增加一个额外的定时器,可将定时器加一个额外的定时器,可将定时器T0设置
35、成方式设置成方式3 3工工作。作。 例例: :假设某用户系统中,采用假设某用户系统中,采用1212MHzMHz晶振晶振, ,已将已将T1按按方式方式2 2工作,工作,用作串行口波特率发生器用作串行口波特率发生器,并且已使用,并且已使用了了2 2个外部中断。现要求再增加一个外部中断源,并个外部中断。现要求再增加一个外部中断源,并由由P1.7P1.7口输出一个口输出一个5 5KHzKHz的方波。的方波。 解解为了不增加其它硬件的开销,可把定时器为了不增加其它硬件的开销,可把定时器T0置置于计数工作方式于计数工作方式3 3,利用,利用T0端作为附加的外部中断输端作为附加的外部中断输入端,把入端,把T
36、L0预置为预置为0 0FFHFFH,这样当这样当T0输入端出现由输入端出现由1 1至至0 0的负跳变时,的负跳变时,TL0立即溢出,申请中断,相当于立即溢出,申请中断,相当于边沿触发边沿触发的外部中断源。在方式的外部中断源。在方式3 3下,下,TH0总是作为总是作为8 8位定时位定时器用,可以用它来控制器用,可以用它来控制P1.7P1.7口输出的方波频率。口输出的方波频率。 由由P1.7P1.7输出输出5 5KHzKHz的方波,即每隔的方波,即每隔100100ss使使P1.7P1.7口口的电平变化一次,的电平变化一次,TH0初值初值X X为:为:X=N-t/T=2X=N-t/T=28 8-10
37、0-1001010-6-6/(1/(11010-6-6)=256-100=156=9CH)=256-100=156=9CH 置置T1为定时方式为定时方式2 2,GATE=0GATE=0,C/T=0,C/T=0, M1M0=02H,=02H, T0为计数方式为计数方式3 3,GATE=0GATE=0,C/T=1,C/T=1, M1M0=03H,=03H,,故故TMOD=27H,TMOD=27H,并由并由TRTR0 0启停启停T0。采用中断方式来判断采用中断方式来判断TH0的的定时时间到否,每次时间到时,在定时器定时时间到否,每次时间到时,在定时器T0中断服务程序中将中断服务程序中将P1.7P1.
38、7口取反一次。口取反一次。初始化程序:初始化程序:MOV TMOD,#27HMOV TH0,#9CHMOV TL0,#0FFH;初始化初始化T T0MOV TCON,#55H ;置外部中断边沿触发方式,并启置外部中断边沿触发方式,并启 动动T0和和T1MOV IE,#9FH;开放全部中断开放全部中断TLTL0溢出中断服务程序溢出中断服务程序: :TL0INT:MOV TL0,#0FFH( (相关中断处理相关中断处理) ) RETITHTH0溢出中断服务程序溢出中断服务程序: :TH0INT:MOV TH0,#9CH CPL P1.7 RETI 五、应用编程定时器初始化编程:使用定时器工作之前,
39、先写入控制定时器初始化编程:使用定时器工作之前,先写入控制寄存器,确定好定时器工作方式寄存器,确定好定时器工作方式, ,初始化编程格式:初始化编程格式:MOV TMOD,# 方式字;选择方式方式字;选择方式MOV THx,#XH;装入装入Tx时间常数时间常数MOV TLx,#XL(SETB EA) ;开开Tx中断中断(SETB ETx) SETB TRx ;启动启动TxTx定时器定时器1. 按实际需要选择定时按实际需要选择定时/ /计数功能计数功能2. 按时间或计数长度选择方式按时间或计数长度选择方式3. 计算时间常数计算时间常数计数功能:计数功能:X= 2X= 2n n - -计数值计数值
40、n n:8/13/16 8/13/16 定时功能:定时功能:X= 2X= 2n n - t/T - t/T t t:定时时间(定时时间(s s) T T:机器周期机器周期12/12/晶振频率晶振频率如:晶振为如:晶振为1212MHzMHz时,时, T T12/12 MHz12/12 MHz1212(12121010-6-6)()(秒)秒) 1 11010-6-61 1usus若若t=30ms,t=30ms,则则X= 2X= 2n n - t/T =65536-30000=35536 - t/T =65536-30000=35536 (方式方式1 1)应转为应转为1616进制数:进制数:X=8A
41、D0H TH=8AH TL=D0HX=8AD0H TH=8AH TL=D0H若若t=3ms,t=3ms,则则X= 2X= 2n n - t/T =8192-3000=5192 - t/T =8192-3000=5192 (方式方式0 0)应转为应转为1616进制数:进制数:X=1448H=000 10100010 01000B X=1448H=000 10100010 01000B TH=A2H TL=08HTH=A2H TL=08H溢出处理编程格式:溢出处理编程格式: 1 1)查询方式:先查询定时器溢出标志,再进)查询方式:先查询定时器溢出标志,再进行溢出处理。行溢出处理。 ;定时器初始化;
42、定时器初始化WAIT:JBC TFx,PT ;检测溢出标志检测溢出标志 SJMP WAITPT: MOV THx,#XH ;重装时间常数重装时间常数 MOV TLx,#XL ;溢出处理溢出处理 SJMP WAIT2 2)中断方式:初始化后执行其他任务,中断)中断方式:初始化后执行其他任务,中断服务程序处理溢出。服务程序处理溢出。ORGRG 0000H0000HLJMPLJMP MAINMAINORGRG 000BH(001BH)000BH(001BH);TxTx中断入口中断入口LJMPLJMP PTSPTSMAINMAIN:;初始化后执行其他程序初始化后执行其他程序PTSPTS:;溢出中断服务
43、程序溢出中断服务程序M MOV V THxTHx,#X#XH H;重装时间常数重装时间常数M MOV V TLxTLx,#X#XL LRETIRETI例例1 1:由:由P1.0P1.0输出方波信号,周期输出方波信号,周期为为2 2msms,设设f foscosc=12MHz=12MHz。2ms解:每隔解:每隔1 1msms改变一次改变一次P1.0P1.0的输出状态。用的输出状态。用T0T0非门控方非门控方 式式1 1定时。定时。 机器周期机器周期T=12/12MHz=1usT=12/12MHz=1us 计算时间常数:计算时间常数:X = 2X = 216 16 - t/T - t/T = 2
44、= 216 16 -1000/1-1000/1 = FC18H = FC18HTMOD:00000001B 01HTMOD:00000001B 01H(1 1)查询方式:)查询方式: START:MOV TMOD,#01HMOV TL0,#18HMOV TH0,#0FCHSETBTR0 LOOP:JBC TF0,PTF0SJMPLOOP PTF0: CPL P1.0MOV TL0,# 18HMOV TH0,# 0FCHSJMPLOOP(2 2)中断方式)中断方式ORG0000HAJMPMAINORG000BHAJMPPT0INTORG0100HMAIN:MOVSP,#60HMOVTMOD,#0
45、1HMOVTL0,#18H MOVTH0,# 0FCHSETBEASETBET0SETBTR0 HERE:SJMPHERE PT0INT:CPL P1.0MOVTL0,#18HMOVTH0,# 0FCHRETI例例2 2 P1.7P1.7驱动驱动LEDLED亮亮1 1秒灭秒灭1 1秒地闪烁,设时钟频率为秒地闪烁,设时钟频率为6 6MHzMHz。长定时方法:增加一个软件计数器或一个硬件计数器。长定时方法:增加一个软件计数器或一个硬件计数器。硬件方式:硬件方式: T0T0定时定时100100msms,T1T1计数计数T0T0的定时跳变信号的定时跳变信号P1.0P1.0的负的负跳变次数跳变次数(20
46、0(200msms一次一次) ),计满计满5 5个跳变为个跳变为1 1秒。秒。TMOD:01100001B 61H定时器初值:定时器初值: X0=65536-100000/2=15536 =3CB0H计数器初值:计数器初值: X1=256-5=251 =FBHSTART:MOV TMOD,#61H MOV TL1,#0FBH MOV TH1,#0FBH CLR P1.0 SETB TR1LOOP1:CPL P1.7LOOP2 : MOV TL0,#3CH MOV TH0,#0B0H SETB TR0LOOP3:JBCTF0,LOOP4SJMP LOOP3LOOP4:CPLP1.0JBCTF1,
47、LOOP1SJMP LOOP2查询方式查询方式:ORG 0000HAJMP STARTORG 000BHAJMP T0INTORG 001BHAJMP T1INTSTART:MOV SP,#60HMOV TMOD,#61H MOV TL1,#0FBH MOV TH1,#0FBH CLR P1.0中断方式中断方式SETB TR1MOV TL0,#3CH MOV TH0,#0B0H SETB TR0LOOP1:SJMP LOOP1T0INT: CPLP1.0 MOV TL0,#3CH MOV TH0,#0B0H RETIT1INT:CPL P1.7RETIEND例例3 3:门控方式测量正脉冲宽度:
48、门控方式测量正脉冲宽度解:解: INT1INT1引脚输入被检测信号,记录在正脉冲的时间内引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数。包含机器脉冲个数。1)设脉宽小于设脉宽小于65.565.5msms等待查询等待查询INT1INT1,正脉冲过后,读出正脉冲过后,读出TH1TL1TH1TL1。START: MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0HWAIT1: JBP3.3,WAIT1 SETB TR1WAIT2 :JNB P3.3,WAIT2 WAIT3 : JBP3.3,WAIT3CLRTR1MOV R2,TL1MOV R3,TH1TR1=1 T1
49、启动 TR1=0 T1停止INT1GATE=1门控,只有INT1=1才计数2)设脉宽大于设脉宽大于65.565.5msms,中断方式记录中断方式记录TH1TL1TH1TL1溢出中断次数。溢出中断次数。SETB TR1SETB ET1;开开T1中断中断SETB EAWAIT2: JNBP3.3,WAIT2;等待正脉冲到来等待正脉冲到来WAIT3: JBP3.3,WAIT3;等待正脉冲结束等待正脉冲结束CLRTR1;关闭关闭T1MOV IE,#00;关闭中断关闭中断MOV R2,TL1;读出读出T1MOV R3,TH1LCALL PPS;计算脉宽计算脉宽HERE:SJMP HERE;其他任务其他任
50、务PRIC:INCR4;记录溢出次数记录溢出次数RETIPPS:;计算脉宽子程序计算脉宽子程序计算脉宽的子程序的计算式如下:计算脉宽的子程序的计算式如下:脉宽脉宽t = (R4 216 + R3 R2 ) T(T为机器周期)为机器周期)例例4 定时定时/ /计数器计数器T0T0工作于方式工作于方式3 3,TH0TH0,TL0TL0作为独立的作为独立的8 8位定时位定时/ /计数器,分别产生计数器,分别产生250250usus和和500500usus的定时中断信号,的定时中断信号,使使P1.1P1.1,P1.2P1.2引脚产生引脚产生500500usus和和10001000usus的方波的方波