用定时器T1测量宽度为200μs左右的正脉冲,说明测量方法,编写程序并分析测量误差,晶振为12MHz
分析:令T1受外部信号的控制,在正脉冲期间计数,计数结束后将结果存储在70H开始的单元中。
TMOD=1001 0000B=90H,GATE = 1,模式1
初值X=0
T1受引脚P3.3(INT1)的输入控制,INT1=1时计数,INT1=0时停止
程序实现:
MOV TMOD,#90H ;初始化
MOV TH1,#00H
MOV TL1,#00H
MOV R0,#70H ;存储在70H开始的单元
WAIT: JB P3.3,WAIT ;等待脉冲变低
SETB TR1 ;等待计数
WAIT1: JNB P3.3,WAIT1 ;等待脉冲变高
WAIT2:JB P3.3,WAIT2 ;P3.3=1,开始计数,等待脉冲变低
CLR TR1 ;停止计数,准备存储结果
MOV @R0,TL1 ;低8位
INC R0
MOV @R0,TH1 ;高8位
总结:令GATE = 1,使定时器的计数受外部信号的控制,T0受P3.2控制,T1受P3.3控制
计数×机器周期=脉冲宽度
误差分析:由上式,误差来源于计数和机器周期。①当器件老化或其他问题导致时钟频率不等于所给的12MHz时,会影响真实的计数值导致结果错误,例如当实际Tm<1μs时,计数值更大,算出脉宽更大。②由于单片机硬件和程序的响应和执行需要时间,定时器的计数可能有延迟,导致结果不精确。