	
	public link bit TRIG_DIR = TRIG.D0_DIR;
	public link bit TRIG_IN = TRIG.D0_IN;
	public link bit TRIG_OUT = TRIG.D0_OUT;
	
	public link bit ECHO_DIR = ECHO.D0_DIR;
	public link bit ECHO_IN = ECHO.D0_IN;
	public link bit ECHO_OUT = ECHO.D0_OUT;
	
	public const uint8 OS_channel_ECHO = ECHO.INT_INDEX;
	
	bool ignore;
	
	inter.INT_event = INT_event;
	inter.OS_channel_INT = OS_channel_ECHO;
	inter =
	#include "$chip$_interrupt.txt"
	
	//ضʱ
	#include "$chip$_timer.txt"
	
	//---------------------------------------------------
	//[i] function_void OS_init;
	void OS_init()
	{
		OS_time = 100;
		
		TRIG_DIR = 1;
		TRIG_OUT = 0;
		ECHO_DIR = 0;
		ECHO_OUT = 1;
		inter.init();
		
		TimerInit();
		ignore = false;
	}
	//---------------------------------------------------
	//[i] function_void OS_run;
	void OS_run()
	{
		if( ECHO_IN == 1 ) {
			ignore = true;
			value = 5000;
		}
		TRIG_OUT = 1;
		loop( 10 ) {}
		TRIG_OUT = 0;
		
		MACRO_CLEAR_TIMER();
	}
	//---------------------------------------------------
	void INT_event()
	{
		if( ignore ) {
			ignore = false;
			return;
		}
		uint16 v;
		
		MACRO_GET_TIMER();
		
		if( v > 5000 ) {
			v = 5000;
		}
		if( v < 80 ) {
			v = 80;
		}
		uint32 vv = v;
		//value = ((int)vv - 80) * 105 / 100;  11.0592MHz
		
		//value = ((int)vv - 80) * 54 / 100;   16MHz
		
		value = (int)vv * 413 / 608 - 78;
		
		
		//R-150  C-142
		//R-300  C-272
		//R-600  C-507
		//R-900  C-750
		
		//(x - 142) * 750 / 608 + 150
		
		//x * 750 / 608 - 142 * 750 / 608 + 150
		//x*750/608 - 25
		
		//(v - 80) * 54 / 100 * 750 / 608 - 25
		//(v-80)*405/608 - 25
		//v*405/608 - 80*405/608 - 25
		
		//v*405/608 - 78
	}
	
	
	