⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p18_adc.c

📁 PIC18系列单片机
💻 C
字号:
/*******************************************************************************

   Copyright 2004 RAE Systems Inc.

     File name: P18_ADC.c																 
   Description: PIC18Fxx20 ADC function
   Support MCU: PIC18F6720 & PIC18F8720
     Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/39609b.pdf
      
   Revision 1.00 - Oct 25, 2004
      . assume all ADC channels are available, which means PCFG0~3 always
        equals to 0000 for 8720 or PCFG2~3 always equals to 00 for 6720.
     
*******************************************************************************/


#include "..\include.h"

void P18_ADCInit( void )
{
   TRISA = TRISA | 0x2F;      // set AN0~AN4 as analog input
   TRISF = TRISF | 0x7F;      // set AN5~AN11 as analog input
   TRISH = TRISH | 0xF0;      // set AN12~AN15 as analog input
   ADCON0 = 0x00;			//0x01=On 0x00=Off, 0x20=Go 0x00=Done
   ADCON1 = 0x00;             // AN0~AN15 are available
   ADCON2 = 0x85;             // right justified and Fosc/16
   DIS_4051;
   EN_4051;
}


unsigned short P18_ADCGetValue( unsigned char channel )
{
    unsigned char i;
	unsigned short ValMin,ValMax,ValRet,ValGet;

	ValMin=0xFFFF;
	ValMax=0;
	ValRet=0;
	ValGet=0;
	//clear port to avoid error on tris change
	PORTA &= ~0x2F;
	PORTF &= ~0x7F;
	PORTH &= ~0xF0;

	channel = channel & 0x0F;
	channel <<= 2;     
	ADCON0 &=0xC3; 
	ADCON0+=channel;
	Delay10Us( 5 );
	for(i=0;i<8;i++)
	{
		ADON=1;
		GODONE = 1;
	  	Delay10Us( 5 );
		while ( GODONE == 1 )
		{
		;
		}
		Delay10Us( 1 );
		
		ValGet = ADRESH;
		ValGet=ValGet<<8;
		ValGet += ADRESL;
		ValRet+=ValGet;
/*		if((ValGet>=ValMin)&&(ValGet<=ValMax))
		{
			ValRet+=ValGet;
		}
		else
		{
			if(ValGet<ValMin)
			{
				ValRet+=ValMin;
				ValMin=ValGet;
			}
			if(ValGet>ValMax)
			{
				ValRet+=ValMax;
				ValMax=ValGet;
			}
		}
			
		if(value<ValMin)
		{
			ValRet+=ValMin;
			ValMin=value;
		}
		else if(value>ValMax)
		{
			ValRet+=ValMax;
			ValMax=value;
		}
		else
			ValRet+=value;*/
	}
//	ValRet+=1;
	ValRet=ValRet>>3;
	return ValRet;
}

unsigned short ADCGet( unsigned char channel )
{
    unsigned char chTemp;
	unsigned short value;
    if(channel<14)
    {
        value = P18_ADCGetValue( channel );
    }
    else if(channel<22)
    {
        chTemp=channel-14;
        MUXA = chTemp;
        MUXB = chTemp>>1;
        MUXC = chTemp>>2;
        EN_4051;
		Delay10Us( 1 );
        value = P18_ADCGetValue( 15 );
    }
    else
		SET_ERROR(ERR_ADChannelOverFlow);
//    DIS_4051;
    return value;        
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -