关于51单片机的超声波测距

我想用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);     
    }

}