P1 ^ 0は送信者であり、TXとして定義され、1が送信されます。
P1 ^ 1は受信側であり、RXとして定義され、1は受信されず、0は受信されません。
TXを1に設定して超音波を送信し、RXが0になったときに送信した超音波を受信した後、消費時間を式に代入して距離を求めます。
- 超音波トランスミッション
void Send_Ware()
{
usnigned char i;
for(i=0;i<8;i++)
{
TX = 1;
Delay12us();//12MHZ,经过测试感觉12us效果挺不错 10us-13us都可以.
RX = 0;
Delay12us();
}
}
- 超音波受信認識と距離計算
まず、タイマーを設定する必要があります。超音波が送信して受信するまでにかかる時間を計算する必要があります。
void Timer1Init()//设置的定时器1
{
AUXR &= 0xBF;//12T模式,似乎不设置AUXR默认也为12T
TMOD &= 0x0F;
TMOD |= 0x10; //打开定时器1的16位计数模式
TH1 = 0;
TL1 = 0;
TF1 = 0;
}
因为不需要用到中断,所以暂时不打开
これはvoidSend_Ware()への参照です//前に定義されています
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;
}
もう一度表示するだけです。