
//2016.4.4
//һBUG, С4Ƶ, ᵼADת

//2016.4.9
//ּDIDR0Ĵö˰˿, ֪Ϊ, ȥ.

unit ADbasic
{
	public const uint16 ID = 0;
	
	public link unit PORT {}
	const uint8 channel = PORT.AD_INDEX;
	
	public const int32 MinValue = 0;
	public const int32 MaxValue = 1024;
	
	//---------------------------------------------------
	//[i] function_void OS_init;
	public void OS_init()
	{
		PORT.D0_DIR = 0;
		PORT.D0_OUT = 0;
		#.MEGA328.ADCSRA = 0b1000_0011;  //8Ƶ
		#.MEGA328.ADMUX = 0b0100_0000;
		
		//uint8 BIT = 0x01;
		//#.MEGA328.DIDR0 = #.MEGA328.DIDR0 | (BIT << 1);
	}
	//---------------------------------------------------
	//[i] function_int32 get_data;
	public int32 get_data()
	{
		#.MEGA328.ADMUX = 0b0100_0000 + channel;
		#.MEGA328.ADCSRA.6(bit) = 1;
		while( #.MEGA328.ADCSRA.6(bit) == 1 ) {}
		
		uint16 data;
		data.0(uint8) = #.MEGA328.ADCL;
		data.8(uint8) = #.MEGA328.ADCH;
		
		//˽
		//uint32 d = data;
		//return MinValue + (int)d * (MaxValue - MinValue) / 1024;
		
		#.MEGA328.ADMUX = 0b0100_0000 + channel;
		#.MEGA328.ADCSRA.6(bit) = 1;
		while( #.MEGA328.ADCSRA.6(bit) == 1 ) {}
		
		data.0(uint8) = #.MEGA328.ADCL;
		data.8(uint8) = #.MEGA328.ADCH;
		
		uint32 d = 1023 - data;
		return MinValue + (int)d * (MaxValue - MinValue) / 1024;
	}
}





