我想用51单片机来实现超声波测距,在我买超声波的卖家那里,他给了我例程,其中echo的引脚是P11,trig的引脚是P12,我写的程序没有问题,可以测距。
但是现在我需要把echo的引脚改为P33,trig的引脚改为P45,明明是同样的程序,为什么就不能测距了呢
#include
#include
#include
#define u8 unsigned char
#define u16 unsigned int
sbit RX=P3^3; //P1_1
sbit TX=P4^5; //P1_2
u16 time=0;
float distance=0;
bit flag =0;
void Delay_ms(u16 x)
{
u8 i,j;
for(;x>0;x--)
for(i=2;i>0;i--)
for(j=250;j>0;j--);
}
void UAR_Init()
{
TMOD=0x21; //设T0为方式1,GATE=1;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;
ET0=1; //允许T0中断
TR1=1; //开启定时器
TI=1;
EA=1; //开启总中断
}
void UAR_Send()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
void UAR_Count()
{
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0;
}
float calculate()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
distance=(time*1.7)/100; //算出来是CM
return distance;
}
void main()
{
UAR_Init();
while(1)
{
UAR_Send();
UAR_Count();
printf("S=%f\n",calculate());
Delay_ms(500);
}
}