#include <main.h>
#include "bsp_uart/bsp_uart.h"
#include "UT.h"

#define Trig P34
#define Echo P35

uint8_t csbH=0,csbL=0;

void Delay20us() //@12.000MHz
{
	unsigned char i;

	i = 78;
	while (--i);
}


void Timer0_Init(void)		//1微秒@12.000MHz
{
	AUXR &= 0x7F;			//定时器时钟12T模式
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0x0;				//设置定时初始值
	TH0 = 0x0;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 0;				//定时器0开始计时
}


/**
 *@beaf 超声波模块初始化
 *@param 无
 *@retval 无
 */
void UT_Init()
{
	P3n_open_drain(Pin4);
	P3n_pure_input(Pin5);
	
	
	Trig = 1;
	delay_ms(100);
	Trig = 0;	
	Echo = 0;

	Timer0_Init();
}


/**
 *@beaf 超声波测距
 *@param 无
 *@retval distance 测试的距离
 */
int measure()
{
	//unsigned int csb_t;
	//float distance=0;
	unsigned int timeout=0; // 设置超时时间
	
	Trig = 1;
	Delay20us();
	Trig = 0;

	while (Echo == 0)
	{
		timeout++;
		if(timeout>60000)
			return -1;
	}	
	TR0 = 1;
	timeout=0;
	while (Echo)
	{
		timeout++;
		if(timeout>60000)
			return -2;
	}
	TR0 = 0;
	//csb_t = TH0 << 8 | TL0;
	csbH=TH0;
	csbL=TL0;
	TH0 = 0;
	TL0 = 0;
	// 340m/s = 0.017cm/us
	//distance = csb_t * 0.017;
	//printf("dis=%.2f\n",distance);
	
	for(timeout=0;timeout<50;timeout++)
		Delay20us();
	return 1;
}
