#include<stdio.h>
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit TRIGGER=P0^0;
sbit ECH0=P0^1;
void setup();
void trigger();
void calc();
void delay();
void loop();
void Uart1_SendChar(unsigned char Udat);
char putchar(char c);
void main()
{
setup();
while(1)
{
loop();
}
}
void setup()
{
TMOD=0x21;//定時器1作業在模式二產生波特率,定時器0作業在模式一。00100001
SCON=0x40;//8位串口,波特率可變01000000
TH1=0xFD;
TCON=0x40;
TH0=0;
TL0=0;
ET0=1;
EA=1;
}
void trigger()
{
TRIGGER=0;
TRIGGER=1;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
TRIGGER=0;
}
void calc()
{
unsigned int duration,distance;
duration=TH0*256+TL0;
duration=duration*(12/11.0592); //計數次數乘以一個機器周期所用時間
//340m/s=0.034cm/us
distance=(duration*0.034/2);//距離
printf("distance:%dcm\n",distance);
TH0=0;
TL0=0;
}
void delay()
{
unsigned long int i;
for(i=10000;i>0;i--){}
}
void loop()
{
trigger();
while(ECH0==1);
{
TR0=1;
}
while(ECH0==0)
{
TR0=0;
}
calc();//計算距離
delay();//延時(大于200ms)
}
void Uart1_SendChar(unsigned char Udat)
{
SBUF=Udat; //將要發送的資料放入串口資料緩沖區
while(TI==1) //等待發送完成
{
TI=0; //清零TI發送完成標記
}
}
char putchar(char c)
{
Uart1_SendChar(c);
return c;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242577.html
標籤:單片機/工控
上一篇:在keil編程,uchar i...那8個變數,全域可以成功,但寫到函式里就顯示未定義,求大神們解答。
下一篇:匯編語言決議
