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

📄 adcopen.c

📁 pic单片机的adc模块的转换应用.希望对大家有个启发和帮助.
💻 C
字号:
#include <p18cxxx.h>
#include <adc.h>


#if defined (ADC_V1)
void OpenADC( unsigned char config, unsigned char config2)
{

  ADCON0 = 0;
  //ADCON1 = 0;

  ADCON1 = config;
  ADCON0 = ((config<<2) & 0xC0)|(config2 & 0b00111000);
  if( config2 & 0b10000000 )
  {
    PIR1bits.ADIF = 0;
    PIE1bits.ADIE = 1;
    INTCONbits.PEIE = 1;
  }
  ADCON0bits.ADON = 1;
}
#elif defined (ADC_V2)
void OpenADC( unsigned char config, unsigned char config2)
{

  ADCON0 = 0;
  ADCON1 = 0;
  ADCON2 = 0;
  
  ADCON0 = (config2 >> 1) & 0b00111100;
  ADCON1 = ((config2 << 4) & 0b00110000) |
           (config & 0b00001111);
  ADCON2 = (config & 0b10000000) |
           ((config >> 4) & 0b00000111);


  if( config2 & 0b10000000 )
  {
    PIR1bits.ADIF = 0;
    PIE1bits.ADIE = 1;
    INTCONbits.PEIE = 1;
  }

  ADCON0bits.ADON = 1;
}
#elif defined (ADC_V3)
void OpenADC( unsigned char config,
              unsigned char config2,
              unsigned char portconfig)
{

    ADCON0 = 0;
 //    ADCON1 = 0xFF;
    ADCON2 = 0;

    ADCON0 = ((config2 >> 1) & 0b00111100) |
	         ((config2 << 6) & 0b11000000);
	ADCON1 = portconfig;
    ADCON2 = ((config & 0b10000000)|((config >> 4) & 0b00000111)) |
	         ((config << 2) & 0b00111000);

    if( config2 & 0b10000000 )
    {
      PIR1bits.ADIF = 0;
      PIE1bits.ADIE = 1;
      INTCONbits.PEIE = 1;
    }

    ADCON0bits.ADON = 1;
}
#elif defined (ADC_V4) || defined (ADC_V5) || defined (ADC_V6)
void OpenADC( unsigned char config,
              unsigned char config2,
              unsigned char portconfig)
{

    ADCON0 = 0;
    //ADCON1 = 0;
    ADCON2 = 0;

    ADCON0 = (config2 >> 1) & 0b00111100;	// GET CHANNELS 
    ADCON1 = portconfig |                   // GET CONFIG
	         ((config2 << 4) & 0b00110000); //GET  Vref
    ADCON2 = (config & 0b10000000)	|	// RESULT
             ((config >> 4) & 0b00000111) |	// CONV CLK
             ((config << 2) & 0b00111000);	// ACQ TIME

    if( config2 & 0b10000000 )			// ADC INT.
    {
      PIR1bits.ADIF = 0;
      PIE1bits.ADIE = 1;
      INTCONbits.PEIE = 1;
    }

    ADCON0bits.ADON = 1;
}
#elif defined (ADC_V8)
void OpenADC( unsigned char config,
              unsigned char config2,
              unsigned int portconfig)
{


    ADCON0 = 0;
    ADCON1 = 0;
    ADCON2 = 0;

    ADCON0 = (config2 >> 1) & 0b00111100;
    ADCON1 |= (config2 << 4) & 0b00110000;
    ADCON2 = config & 0b10000000 |
             ((config >> 4) & 0b00000111) |
             ((config << 2) & 0b00111000);

    ANSEL = portconfig;
    ANSELH = (portconfig >> 8);
	if( config2 & 0b10000000 )
    {
      PIR1bits.ADIF = 0;
      PIE1bits.ADIE = 1;
      INTCONbits.PEIE = 1;
    }
    ADCON0bits.ADON = 1;

}
#elif defined (ADC_V7)
void OpenADC( unsigned char config1, 
              unsigned char config2, 
              unsigned char config3)
{	// Reset A/D Registers to POR state
    
	ADCON0 = 0;
    ADCON1 = 0;
	//ADCON2 = 0;
	ADCON3 = 0;
	
	ANSEL0 = 0;
	ANSEL1 = 0;
	ADCHS  = 0;
	
	ADCON0 = (config1<<2) & 0b00111100;	//assign Conv type, conv mode and conv seq.
	ADCON1 = (config2 & 0b11000000) | ((config2 >>1) & 0b00010000);
	ADCON2 = config3;
	ADCON3 = (config2 & 0b00011111) | (config1 & 0b11000000);
    if(config1 & 0b00100000)	
	{
		PIR1bits.ADIF = 0;
      	PIE1bits.ADIE = 1;
      	INTCONbits.PEIE = 1;
	}
	ADCON0bits.ADON = 1;         // Enable the A/D module
}
#elif defined (ADC_V7_1)
void OpenADC( unsigned char config1, 
              unsigned char config2, 
              unsigned char config3)
{	// Reset A/D Registers to POR state
    
	ADCON0 = 0;
    ADCON1 = 0;
	//ADCON2 = 0;
	ADCON3 = 0;
	
	ANSEL0 = 0;

	ADCHS  = 0;
	
	ADCON0 = (config1<<2) & 0b00111100;	//assign Conv type, conv mode and conv seq.
	ADCON1 = (config2 & 0b11000000) | ((config2 >>1) & 0b00010000);
	ADCON2 = config3;
	ADCON3 = (config2 & 0b00011111) | (config1 & 0b11000000);
    if(config1 & 0b00100000)	
	{
		PIR1bits.ADIF = 0;
      	PIE1bits.ADIE = 1;
      	INTCONbits.PEIE = 1;
	}
	ADCON0bits.ADON = 1;         // Enable the A/D module
}

#elif defined (ADC_V9)

void OpenADC( unsigned char config,
              unsigned char config2,
              unsigned int portconfig)
{
    WDTCONbits.DEVCFG = 0;
    ADCON0 = 0;
    ADCON1 = 0;

    ADCON0 = ((config2 >> 1) & 0b00111100) |
             ((config2 << 6) & 0b11000000);	//VREF
    ADCON1 = (config & 0b10000000) |
             ((config >> 4) & 0b00000111) |
             ((config << 2) & 0b00111000);

    WDTCONbits.DEVCFG = 1;
    ANCON0 = portconfig;
    ANCON1 = (portconfig >> 8);
    WDTCONbits.DEVCFG = 0;	

	if( config2 & 0b10000000 )
    {
      PIR1bits.ADIF = 0;
      PIE1bits.ADIE = 1;
      INTCONbits.PEIE = 1;
    }
    ADCON0bits.ADON = 1;
}

#elif defined (ADC_V10)
void OpenADC( unsigned char config,
              unsigned char config2,
              unsigned char config3,
              unsigned int portconfig)
{


    ADCON0 = 0;
    ADCON1 = 0;
    ADCON2 = 0;

    ADCON0 = (config2 >> 1) & 0b00111100;  			//channel selection 

    ADCON1 = (config3 & 0b00001100) | //Positive Voltage Reference Configuration bits
             (config3 & 0b00000011);  //Negative Voltage Reference Configuration bits
    
    ADCON2 = (config & 0b10000000) |
             ((config >> 4) & 0b00000111) |		//A/D Conversion Clock Select bits
             ((config << 2) & 0b00111000);		//A/D Acquisition Time Select bits 

    ANSEL = portconfig;							//Didn't Change
    ANSELH = (portconfig >> 8);					//Didn't Change
    
	if( config2 & 0b10000000 )					//interrupt enable check
    {
      PIR1bits.ADIF = 0;						//Clear the ADC Interrupt bit
      PIE1bits.ADIE = 1;						//Enable the ADC Interrupt
      INTCONbits.PEIE = 1;						//Peripheral Interrupt Enable
    }
    ADCON0bits.ADON = 1;						//A/D Conversion Status bit--A/D converter module is operating

}
#endif

⌨️ 快捷键说明

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