📄 p18_adc.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 + -