P1 ^ 0 es el remitente, que se define como TX, y 1 es el envío.
P1 ^ 1 es el extremo receptor, que se define como RX, no se recibe 1 y no se recibe 0.
Después de transmitir la onda ultrasónica estableciendo TX en 1, y luego recibir la onda ultrasónica transmitida cuando RX se vuelve 0, la distancia se obtiene sustituyendo el tiempo consumido en la fórmula.
- Transmisión ultrasónica
void Send_Ware()
{
usnigned char i;
for(i=0;i<8;i++)
{
TX = 1;
Delay12us();//12MHZ,经过测试感觉12us效果挺不错 10us-13us都可以.
RX = 0;
Delay12us();
}
}
- Reconocimiento de recepción ultrasónica y cálculo de distancia.
En primer lugar, todavía tenemos que configurar el temporizador, necesitamos calcular el tiempo que tarda la onda ultrasónica en enviarse para recibir
void Timer1Init()//设置的定时器1
{
AUXR &= 0xBF;//12T模式,似乎不设置AUXR默认也为12T
TMOD &= 0x0F;
TMOD |= 0x10; //打开定时器1的16位计数模式
TH1 = 0;
TL1 = 0;
TF1 = 0;
}
因为不需要用到中断,所以暂时不打开
Aquí hay una referencia a void Send_Ware () // Definido antes
unsigned int distance;
void Ware_Dis()
{
Send_Ware();
TR1 = 1;
while(TF1 == 0&&RX == 1);//进行下一步只有两种情况,第一种就是接收到了超声波,即RX = 0,第二种就是计时器溢出,即TF1 = 0;
TR0 = 0;
if(TF1 == 1)
TF1 = 0;
if(RX == 0)
{
distance = TH1;
distance = (distance<<8)|TL1;
distance = (unsigned int)distance*0.017;//公式,可以推导
}
TH1 = TL1 = 0;
}
Simplemente muéstrelo de nuevo.