#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#define uint unsigned int
#define uchar unsigned char
#define NOP() {_nop_();_nop_();_nop_();_nop_();}
sbit Trig=P0^5;//测距触发引脚
long int temp,t;
int i=0;
/************************************************************************************************************
* 外部中断0服务程序
************************************************************************************************************/
void int0() interrupt 0
{
t=(TH0*256+TL0);//计算高电平持续的时间,上升沿到来时候开始计时,下降沿到来进入外部中断,关闭计时器,停止计时
TH0=0;
TL0=0;
}
void main (void)
{
Set_All_GPIO_Quasi_Mode;
P00_Input_Mode;//将P00设置为输入模式
P00 = 1;
Trig=0;//为低电平
TMOD=0x19;
TR0=1;//启动定时器0
EX0=1;//使能部中断0
IT0=1;//外部中断0下降沿触发
set_EA;//开启总中断
while(1)
{
Trig=1;
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
Trig=0;
temp=t*0.17;//得到距离
}
}
|
@linoox :遇到了啥技术难题
@linoox :这程序很难理解吗?就是让发射管发射信号时候开始定时器计时,然后收到回波信号触发外部中断,在中断读出来时间,这个时间是声波一来一回的时间,T*V=2S;V=340m/S所以S=t*170m/s 如果这里时间单位不是S,而是ms,那么就是S=t*0.17