1、汇编语言:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV TMOD,#09H
mov TH0,#00H
MOV TL0,#00H
SETB TR0
L1:
JNB P3.2,NEXT
SJMP L1
NEXT:
MOV A,TH0
CJNE A,#0,NEXT1
MOV A,TL0
CJNE A,#0,NEXT1
SJMP L1
NEXT1:
MOV P1,TH0
MOV P2,TL0
MOV TH0,#00
MOV TL0,#00
SJMP L1
END
2、C51:
#include<reg51.h>
sbit P3_2=P3^2;
void main(void)
{
TOMD=0x09;
TH0=0x00;TL0=0x00;
TR0=1;
while(1)
{
if(P3_2==0)
{
if(!(TH0==0&&TL0==0)){P1=TH0;P2=TL0;TH0=0x00;TL0=0x00;}//若TH0与TL0都为0,说明还未进入高电平,只要有一个不为0即进入过高电平又进入到下一个低电平,中间产生的计数乘以机器周期即为这一段的脉冲宽度。
}
}
}
脉冲宽度测量的原理解释:
1、基础知识:
TMOD中 D3与D7上的门控位GATE(控制定时/计数器的启动是否受外部中断请求的信号的影响)
GATE=0时并不受影响
GATE=1时:控制定时/计数器T0的启动受外部中断请求信号引脚INT0(P3.2)的控制。
控制定时/计数器T1的启动受外部中断请求信号引脚INT1(P3.3)的控制。
只有当对应引脚为高电平时对应定时/计数器才启动计数。(以此来测加在INT0(P3.2)和INT1(P3.3)引脚上正脉冲的宽度)
2、原理:
P3.2引脚两个低电平之间所计的数则为一个高电平所计的数,乘以机器周期,可得脉冲宽度