定时/计数器应用3——脉冲宽度的测量

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引脚两个低电平之间所计的数则为一个高电平所计的数,乘以机器周期,可得脉冲宽度

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值