1、单片机原理与应用,第六章 定时器及应用,教学目标介绍定时/计数器的结构和原理介绍定时/计数器的四种工作方式的应用 学习要求熟悉定时/计数器的工作原理 掌握定时/计数器的初始化及应用程序设计,单片机原理与应用,第六章 定时器及应用,6-1 概述6-2 定时/计数器的控制6-3 定时/计数器的四种模式及应用,单片机原理与应用,6-1 概述,8051定时器的结构有两个16位的定时器/计数器,即定时器0(T0)和定时器1(T1)。它们实际上都是16位加1计数器。T0由两个8位特殊功能寄存器TH0和TL0构成;T1由TH1和TL1构成。,单片机原理与应用,一、定时/计数器的结构,核心是一个可预置初值的计
2、数器,其计数脉冲有两个来源:一是系统的时钟振荡器;另一个是外部脉冲。当输入脉冲为系统振荡器时脉冲时间间隔相等,每个脉冲唯一时间基准,脉冲数乘以时间基准就是定时时间,这是定时器;当输入脉冲为外部脉冲时,其间隔不一定相等,这是就是计数器,单片机原理与应用,每输入一个脉冲,计数器加一,当计数器计满时(全1),再来一个脉冲,计数器回0,同时从最高位溢出一个脉冲使SRF的TCON的某一位TF0或TF1置1,作为定时/计数器溢出中断,定时器状态表示定时时间到;计数器状态保表示计满回0,单片机原理与应用,二、定时/计数器的工作原理,定时/计数器的核心是一个加1计数器结构图中有两个开关K1、K2,K1决定工作
3、状态:接内部振荡器为定时,接外部脉冲源为计数。K2受控制信号控制,决定脉冲能否加到计数器上,实际上决定计数器的开启与停止。这两个开关是由SRF的TCON和TMOD两个寄存器相应位控制的。通过对这两个寄存器写入控制字,即可选择工作状态和控制启动时间,可见MCS-51的定时/计数器是可程控的。,单片机原理与应用,加1计数器由两个8位特殊功能寄存器TH X和TL X(X=0或1)组成,它们可以被程控形成定时/计数器的四种工作方式。加1计数器计数工作的启动和停止由相应的电路控制,方式寄存器TMOD的GATE、寄存器TCON的TR X(X=0或1),单片机原理与应用,通过方式寄存器TMOD的C/T位来选
4、择加1计数器计数脉冲的来源: 作为计数器用时,外部输入脉冲加在定时/计数器的外部输入端T0(P3.4)或T1(P3.5),每出现一次从1到0的跳变,加1计数器便加1。,单片机原理与应用,1定时器 用于实时控制,定时采样、定时启动等。当定时时间与设定值相等,执行规定操作。 K1接内部时钟时,脉冲源是振荡频率的12分之一,即对机器周期计数,为定时方式,所以定时时间为: T = 计数值*机器周期,单片机原理与应用,2计数器生产线上产品计数。每个产品通过得到一个脉冲信号,计数器记录脉冲个数,当计数值与设定值相等,启动包装机器。检测转速。电机转动一圈发出一个脉冲,计数器记录一秒时间内脉冲个数,显示转速。
5、,单片机原理与应用,K1接外部脉冲时,工作在计数状态,当T0或T1有一个1到0的跳变时,计数器加一。计数操作中,每个机器周期的S5P2期间采样外部输入信号,当一个机器周期采样值为高电平,另一个机器周期采样值为低电平时,计数器加一。所以识别一个跳变要占两个机器周期。因此外部计数脉冲高低电平宽度每个至少要保持一个机器周期。,单片机原理与应用,两个16位可编程定时/计数器: 定时 计数 波特率发生器四种工作模式:13位定时/计数器 16位定时/计数器 8位定时/计数器(自动装入常数) 8位定时/计数器 (两个独立8位,仅定时/计数器0有),单片机原理与应用,第六章 定时器及应用,6-1 概述6-2
6、定时/计数器的控制6-3 定时/计数器的四种模式及应用,单片机原理与应用,6-2 定时/计数器的控制,MCS-51的定时/计数器主要由几个专用寄存器组成:TL0:定时/计数器0低八位计数值TH0:定时/计数器0高八位计数值TL1:定时/计数器1低八位计数值TH1:定时/计数器1高八位计数值TMOD:控制寄存器,控制定时/计数器方式 的工作方式TCON:控制寄存器,控制定时/计数器的起停 指示溢出中断标志,单片机原理与应用,一、定时器方式寄存器TMOD(89H),TMOD的地址为89H,不可按位寻址,只能用字节指令设置定时器工作方式。低半字节定义定时器T0,高半字节定义定时器T1。复位时,TMO
7、D所有位均为零。,单片机原理与应用,1)功能选择位 C/T:=0,定时功能,计数内部机器周期脉冲;=1,计数功能,计数引脚T0(T1)输入的负脉冲。 2)方式选择位M1、M0:4种工作方式:,单片机原理与应用,3)门控方式选择位GATE : =0,非门控方式(内部启动):TRx=1,启动定时器工作;TRx=0,停止定时器工作。=1,门控方式(外部启动):TRx=1且引脚INTx=1才启动。,单片机原理与应用,确定定时器工作方式指令:MOV TMOD,#方式字例:设T0用方式2非门控定时,T1用方式1门控计数。MOVTMOD,#0D2HTMOD各位定义及具体意义,单片机原理与应用,TCON的位地
8、址位88H,可按位寻址。复位时,TCON所有位均为零。 1)启动控制位TR0、TR1=0,停止定时器工作=1,启动定时器工作例:启动T0:SETBTR0,二、定时器控制/状态寄存器TCON(88H),单片机原理与应用,2)溢出中断标志位TF0、TF1定时器溢出使TFx=1,引起中断请求,CPU响应Tx中断后,自动清0 TFx。可用软件检测TFx,必须软件清0。WAIT:JBC TF0,NEXT;检测T0是否溢出 SJMPWAIT ;未溢出,继续检测NEXT: ;溢出,TF0清0,处理溢出TCON各位定义及具体的意义,单片机原理与应用,三、可预置初值的16位加1计数器TH0、TL0、 TH1、T
9、L1预置T0初值指令:MOVTH0,#XHMOVTL0,#XL,单片机原理与应用,第六章 定时器及应用,6-1 概述6-2 定时/计数器的控制6-3 定时/计数器的四种模式及应用,单片机原理与应用,由方式选择位M1、M0设定一、 方式0 13位定时/计数器。 THx 8位和TLx低5位组成13位加1 计数器,此种方式与MCS48系列兼容,如果不是为了兼容的目的,一般不用方式0. 方式0的全部功能,方式1都可以代替。,单片机原理与应用,1、方式0介绍当M1M0两位为00时,为工作方式0(13位)C/T=0时,作为定时器方式工作,T0对机器周期计数,其定时时间为: (213- T0初值)时钟周期1
10、2,单片机原理与应用,非门控方式:当GATE0, 控制权由 TRx 决定 TRx1 计数开始 TRx 0 计数停止,门控方式:当GATE1、TRx1 控制权由 INTx 决定 INTx1 计数开始 INTx 0 计数停止,最大计数脉冲个数:18192 (213),最长定时时间(晶振12MHz T=1s):1s8192T= 8.192 ms,启动计数方式:,定时器0模式0结构,单片机原理与应用,2、应用举例使用定时/计数器进行定时或计数之前,首先要通过软件对它进行初始化。初始化包括下述步骤:1.确定工作方式:对TMOD寄存器赋值;2.置定时/计数器初值:对TH0、TL0或TH1、TL1寄存器赋值
11、; 初值X的计算方法如下: 计数方式时:X=N-M 定时方式时:X=N-t/T,单片机原理与应用,在上两式中,M为计数模值,即从计数器启动到溢出时所需计数值;t为定时值;T为机器周期。3.根据需要,开放定时器中断:对IE寄存器赋值;4.启动定时/计数器:使TCON寄存器的TR0或TR1置位,或由加到引脚INTX上的外部信号电平启动。,单片机原理与应用,例:利用T0方式0产生宽度为2s,周期为2ms的定时负脉冲,由P1.7送出,系统采用12MHz的晶振。 解 由于晶振为12MHz,机器周期为1s,这样利用T0方式0产生周期为2ms定时的初值X为: X =N-t/T =213-210-3/(110
12、-6) =8192-2000 =6192 =1830H =1100000110000B 则TH0=11000001B=0C1H,TL0=00010000B=10H,单片机原理与应用,由于CLR bit和NOP指令的执行时间为1个机器周期,当晶振为12MHz时,这两条指令的执行时间都为1s。这样,每当定时时间到时,利用T0产生中断,在中断服务程序中,先执行CLR P1.7和NOP两条指令,然后执行SETB P1.7,最后重装TH0和TL0的初值,就可以产生题目所要求的定时脉冲。置T0为定时方式0,GATE=0,C/T=0, M1M0=00H, T1不用,可任意,一般取0,故TMOD=00H,并由
13、TR0启停T0。,单片机原理与应用,初始化程序:MOV TMOD , #00H MOV TH0 , #0C1H MOV TL0 , #10H;初始化T0 MOV IE , #82H;开T0中断 SETB TR0;启动T0 T0溢出中断服务程序:T0INT:CLRP1.7 NOP SETBP1.7 MOVTH0,#0C1H;T0重置初值 MOVTL0,#10H RETI,单片机原理与应用,例6-3:利用T0的工作模式0产生1ms定时,在P1.0引脚输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。编程实现其功能。解:要在P1.0引脚输出周期为2ms的方波,只要使P1.0每隔1ms取反
14、一次即可。 (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即 (TH0)=E0H,单片机原理与应用,(3)采用查询方式的程序程序清单: MOV TMOD,#00H ;设置T0为模式0 MOV TL0,#18H ;送初值 MOV TH0,#0E0H SETB TR0 ;启动定时 LOOP
15、:JBC TF0,NEXT ;查询定时时间到否 SJMP LOOP NEXT:MOV TL0,#18H ;重装计数初值 MOV TH0,#0E0H CPL P1.0 ;取反 SJMP LOOP ;重复循环,单片机原理与应用,(4)采用定时器溢出中断方式的程序程序清单: 主程序 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 ;启动定时 HE
16、RE:SJMP HERE ;等待中断,虚拟主程序,单片机原理与应用,中断服务程序 ORG 000BH AJMP CTC0 ORG 0120H CTC0: MOV TL0,#18H ;重新装如初值 MOV TH0,#0E0H CPL P1.0 ;P1.0取反 RETI,单片机原理与应用,1、方式1介绍 当M1M0两位为01时,为工作方式1。 其定时时间为: (216- T0初值)时钟周期12作为计数器方式工作时,T0对外部事件计数。计数长度最大为: 216=65536(个外部脉冲),二、 方式1,单片机原理与应用,最大计数脉冲个数:165536 (216),最长定时时间(晶振12MHz T=1s
17、):1s 65536T= 65.54ms,启动计数方式:,非门控方式:当GATE0, 控制权由 TRx 决定 TRx1 计数开始 TRx 0 计数停止,门控方式:当GATE1、TRx1 控制权由 INTx 决定 INTx1 计数开始 INTx 0 计数停止,定时器0模式1结构,单片机原理与应用,2、应用举例 例:利用T0方式1产生一个50Hz的方波,由P1.7送出。系统采用12MHz的晶振,并假定CPU不作其它工作。解 由于周期为1/50Hz=20ms,则这种方波的正负脉冲宽度都为10ms。由于晶振为12MHz,机器周期为1s,这样利用T0方式1产生10ms定时的初值X为: X =N-t/T
18、=216-1010-3/(110-6) =65536-10000 =55536 =D8F0H =1101100011110000B 则TH0=11011000B=0D8H,TL0=11110000B=0F0H,单片机原理与应用,置T0为定时方式1,GATE=0,C/T=0, M1M0=01H, T1不用,可任意,一般取0,故TMOD=01H,并由TR0启停T0。由于 CPU不作其它工作,则可采用查询方式进行控制。 程序清单: MOVTMOD,#01H MOVTH0,#0D8H MOVTL0,#0F0H;初始化T0SETBTR0;启动T0 LOOP:JBC TF0,AGN;查询定时时间到否?AJ
19、MP LOOP;定时时间未到,则继续查询等待AGN:MOVTH0,#0D8H;定时时间到,T0重置初值MOVTL0,#0F0H CPLP1.7;输出取反NOPAJMP LOOP;重复循环,单片机原理与应用,1、方式2介绍当M1M0两位为10时,为工作方式2 TL0作为8位计数器,TH0用作保存计数初值。特别适合用作较精确的脉冲信号发生器,脉冲信号的周期计算如下: (28- TH0初值)时钟周期12,三、 方式2,单片机原理与应用,用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(晶振12MHz时 T=1s): 256s 自动恢复初值8位定时/计数器。TLx为8位加1计
20、数器,THx为8位初值暂存器。,定时器0模式2结构,单片机原理与应用,2、应用举例 方式2可省去用户软件重装初值的操作,可获得相当精确的定时时间,常用作串行口波特率发生器。例: 采用11.059MHz晶振,将T1用作串行口波特率发生器,按方式2产生1200的波特率.解 参9.1节可以知道,波特率的计算如下: 波特率= 若SMOD=0,则可以算得重装载值:(TH1)=256- 232=E8H置T1为定时方式2,GATE=0,C/T=0, M1M0=02H, T0不用,可任意,一般取0,故TMOD=20H,并由TR1启停T1。 程序清单:MOVTMOD,#20HMOVTH1,#0E8HMOVTL1
21、,#0E8H;初始化T1SETBTR1;启动T1,单片机原理与应用,例:当P3.4引脚上的电平发生负跳变时, 从P1.0输出一个500s的同步脉冲。请编程序实现该功能。查询方式,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时,再加1计数器就
22、会溢出。设计数初值为X,当再出现一次外部事件时,计数器溢出。 则: X+1=28 X= 28 1=11111111B=0FFH T0工作在定时工作方式,设晶振频率为6MHz,500s相当于250个机器周期。因此,初值X为 (28X)2s=500s X=6=06H,单片机原理与应用,3)程序清单START: MOV TMOD,#06H ;设置T0为模式2,外部计数方式 MOV TL0,#0FFH ;T0计数器初值 MOV TH0,#0FFH SETB TR0 ;启动T0计数 LOOP1:JBC TF0,PTFO1 ;查询T0溢出标志, ;TF0=1时转,且清TF0=0 SJMP LOOP1 ;,
23、单片机原理与应用,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溢出标志, ;TF0=1时转,且清TF0=0 ; (第一个500s到否?) SJMP LOOP2 ;等待中断,虚拟主程序 PTFO2 : SETB P1.0 ; P1.0置1 CLR TR0 ;停止计数 SJMP START,单片机原理与应用,例:利用定时器T1的模式2对外部信号
24、计数。要求没计满100次,将 P1.0端取反。,单片机原理与应用,解:(1)选择模式 外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务程序将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,外部计数方式 MO
25、V TL1,#9CH ;T1计数器初值 MOV TH1,#9CH MOV IE,#88H ; 定时器开中断 SETB TR1 ;启动T1计数 HERE:SJMP HERE ;等待中断 ORG 001BH ;中断服务程序入口 CPL P1.0 RETI,单片机原理与应用,1、方式3介绍当M1M0两位为11时,为工作方式3。 在方式3下,定时器T1将停止计数,只是保持其计数值,与置TR1为0等效。 定时器T0在方式3下分成两个独立的计数器TL0和TH0。其中,TL0可用作定时或计数器,并占用定时器T0的所有控制位:GATE,C/T,TR0,INT0和TF0;而TH0固定作为定时器用,并借用定时器T
26、1的TR1和TF1,TH0控制着定时器的T1中断。当定时器T0在方式3时,定时器T1仍可按方式0、1、2工作,只是不能使用其溢出标志TF1和请求中断而已。,四、方式3,T0模式3结构,T0模式3时T1结构,单片机原理与应用,T0分成2个8位定时器:TL0定时/计数器和TH0定时器。TL0占用T0控制位:C/T,TR0,GATE;TH0占用T1控制位:TR1。T1不能使用方式3工作,单片机原理与应用,2、应用举例(略)当按方式2将定时器T1用作串行口波特率时,为增加一个额外的定时器,可将定时器T0设置成方式3工作。 例:假设某用户系统中,采用12MHz晶振,已将T1按方式2工作,用作串行口波特率
27、发生器,并且已使用了2个外部中断。现要求再增加一个外部中断源,并由P1.7口输出一个5KHz的方波。 解为了不增加其它硬件的开销,可把定时器T0置于计数工作方式3,利用T0端作为附加的外部中断输入端,把TL0预置为0FFH,这样当T0输入端出现由1至0的负跳变时,TL0立即溢出,申请中断,相当于边沿触发,单片机原理与应用,的外部中断源。在方式3下,TH0总是作为8位定时器用,可以用它来控制P1.7口输出的方波频率。 由P1.7输出5KHz的方波,即每隔100s使P1.7口的电平变化一次,TH0初值X为:X=N-t/T=28-10010-6/(110-6)=256-100=156=9CH 置T1
28、为定时方式2,GATE=0,C/T=0, M1M0=02H, T0为计数方式3,GATE=0,C/T=1, M1M0=03H,,故TMOD=27H,并由TR0启停T0。采用中断方式来判断TH0的定时时间到否,每次时间到时,在定时器T0中断服务程序中将P1.7口取反一次。,单片机原理与应用,初始化程序:MOVTMOD,#27HMOVTH0,#9CHMOVTL0,#0FFH;初始化T0MOV TCON,#55H;置外部中断边沿触发方式,并启 动T0和T1MOV IE,#9FH;开放全部中断TL0溢出中断服务程序:TL0INT:MOV TL0,#0FFH(相关中断处理) RETITH0溢出中断服务程
29、序:TH0INT:MOV TH0,#9CH CPLP1.7 RETI,单片机原理与应用,五、应用编程,定时器初始化编程:使用定时器工作之前,先写入控制寄存器,确定好定时器工作方式,初始化编程格式:,MOV TMOD,# 方式字;选择方式MOV THx,#XH;装入Tx时间常数MOV TLx,#XL(SETB EA) ;开Tx中断(SETB ETx) SETB TRx ;启动Tx定时器1. 按实际需要选择定时/计数功能2. 按时间或计数长度选择方式3. 计算时间常数,单片机原理与应用,计数功能:X= 2n -计数值 n:8/13/16 定时功能:X= 2n - t/T t:定时时间(s) T:机
30、器周期12/晶振频率如:晶振为12MHz时, T12/12 MHz12(1210-6)(秒) 110-61us若t=30ms,则X= 2n - t/T =65536-30000=35536 (方式1)应转为16进制数:X=8AD0H TH=8AH TL=D0H若t=3ms,则X= 2n - t/T =8192-3000=5192 (方式0)应转为16进制数:X=1448H=000 10100010 01000B TH=A2H TL=08H,单片机原理与应用,溢出处理编程格式: 1)查询方式:先查询定时器溢出标志,再进行溢出处理。 ;定时器初始化WAIT:JBC TFx,PT ;检测溢出标志 S
31、JMP WAITPT: MOVTHx,#XH ;重装时间常数 MOVTLx,#XL ;溢出处理 SJMPWAIT,单片机原理与应用,2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。ORG0000HLJMPMAINORG000BH(001BH);Tx中断入口LJMPPTSMAIN:;初始化后执行其他程序PTS:;溢出中断服务程序MOVTHx,#XH;重装时间常数MOVTLx,#XLRETI,单片机原理与应用,例1:由P1.0输出方波信号,周期为2ms,设fosc=12MHz。,解:每隔1ms改变一次P1.0的输出状态。用T0非门控方 式1定时。 机器周期T=12/12MHz=1us 计
32、算时间常数:X = 216 - t/T = 216 -1000/1 = FC18HTMOD:00000001B 01H,单片机原理与应用,(1)查询方式: START:MOVTMOD,#01HMOVTL0,#18HMOVTH0,#0FCHSETBTR0 LOOP:JBCTF0,PTF0SJMPLOOP PTF0: CPLP1.0MOVTL0,# 18HMOVTH0,# 0FCHSJMPLOOP,单片机原理与应用,(2)中断方式ORG0000HAJMPMAINORG000BHAJMPPT0INTORG0100HMAIN:MOVSP,#60HMOVTMOD,#01HMOVTL0,#18H,单片机原
33、理与应用,MOVTH0,# 0FCHSETBEASETBET0SETBTR0 HERE:SJMPHERE PT0INT:CPLP1.0MOVTL0,#18HMOVTH0,# 0FCHRETI,单片机原理与应用,例2 P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。,长定时方法:增加一个软件计数器或一个硬件计数器。,硬件方式: T0定时100ms,T1计数T0的定时跳变信号P1.0的负跳变次数(200ms一次),计满5个跳变为1秒。,TMOD:01100001B 61H定时器初值: X0=65536-100000/2=15536 =3CB0H计数器初值: X1=256-5=251 =
34、FBH,单片机原理与应用,START:MOV TMOD,#61H MOV TL1,#0FBH MOV TH1,#0FBH CLR P1.0 SETB TR1LOOP1:CPL P1.7LOOP2 :MOV TL0,#3CH MOV TH0,#0B0H SETBTR0LOOP3:JBCTF0,LOOP4SJMPLOOP3LOOP4:CPLP1.0JBCTF1,LOOP1SJMPLOOP2,查询方式:,单片机原理与应用,ORG 0000HAJMP STARTORG 000BHAJMP T0INTORG 001BHAJMP T1INTSTART:MOV SP,#60HMOV TMOD,#61H MO
35、V TL1,#0FBH MOV TH1,#0FBH CLR P1.0,中断方式,单片机原理与应用,SETB TR1MOV TL0,#3CH MOV TH0,#0B0H SETBTR0LOOP1:SJMP LOOP1T0INT: CPLP1.0 MOV TL0,#3CH MOV TH0,#0B0H RETIT1INT:CPL P1.7RETIEND,单片机原理与应用,例3:门控方式测量正脉冲宽度解: INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数。1)设脉宽小于65.5ms等待查询INT1,正脉冲过后,读出TH1TL1。,START:MOV TMOD,#90H MOV TL1,
36、#0H MOV TH1,#0HWAIT1:JBP3.3,WAIT1 SETB TR1WAIT2 :JNBP3.3,WAIT2 WAIT3 : JBP3.3,WAIT3CLRTR1MOVR2,TL1MOVR3,TH1,GATE=1门控,只有INT1=1才计数,单片机原理与应用,2)设脉宽大于65.5ms,中断方式记录TH1TL1溢出中断次数。,SETBTR1SETBET1;开T1中断SETBEAWAIT2:JNBP3.3,WAIT2;等待正脉冲到来WAIT3:JBP3.3,WAIT3;等待正脉冲结束CLRTR1;关闭T1MOVIE,#00;关闭中断MOVR2,TL1;读出T1MOVR3,TH1L
37、CALL PPS;计算脉宽HERE:SJMPHERE;其他任务PRIC:INCR4;记录溢出次数RETIPPS:;计算脉宽子程序,单片机原理与应用,计算脉宽的子程序的计算式如下:脉宽t = (R4 216 + R3 R2 ) T(T为机器周期),例4 定时/计数器T0工作于方式3,TH0,TL0作为独立的8位定时/计数器,分别产生250us和500us的定时中断信号,使P1.1,P1.2引脚产生500us和1000us的方波 。设振荡频率为6MHz。解:TMOD:00000011B 03H TL0:256-250/2=83H 由TR0启动 TH0:256-500/2=06H 由TR1启动,单片
38、机原理与应用,ORG 0000HAJMP STARTORG 000BHMOV TL0,#83HCPL P1.1RETIORG 001BHMOV TH0,#06HCPL P1.2RETI,单片机原理与应用,START:MOV SP,#60HMOV TMOD,#03HMOV TL0.#83HMOV TH0,#06HSETB TR0SETB TR1SETB ET0SETB ET1SETB EALOOP:SJMP LOOPEND,单片机原理与应用,例:利用定时/计数器T0、T1端作为外部中断源输入线,计数器0设置为方式2,计数初值为FFH,允许中断。AJMPMAORG000BHAJMPLOMA:MOVSP,#53HMOVTMOD,#06HMOVTL0,#0FFHMOVTH0,#0FFHSETBTR0,