Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/07/08 20:24
Read: times


 
#152014 - Whoops, here is the .c file with the ADC ISR.....
Responding to: ???'s previous message
/***********************************************************************
DESC:    Configures ADC0 and starts conversions
         If trigger = ADC_NONE then ADC0 is configured and no conversions
         are started
RETURNS: Nothing
************************************************************************/

/* Below are the definitions of which A/D to select, which channel, and what trigger mode**
(
unsigned char trigger,
// ADC_TIMER, ADC_IMMEDIATE, ADC_EDGE, ADC_DUALIMMEDIATE, ADC_NONE

unsigned char mode,
// ADC_FIXEDSINGLE    (select one channel in channels)
// ADC_FIXEDCONT      (select one channel in channels)
// ADC_AUTOSCANSINGLE (select one to four channels in channels)
// ADC_AUTOSCANCONT   (select one to four channels in channels)
// ADC_DUALCONT       (select two channels in channels)
// ADC_SINGLESTEP     (select one to four channels in channels)
unsigned char channels
// one or more of: ADC0_CHANNEL0, ADC0_CHANNEL1, ADC0_CHANNEL2, ADC0_CHANNEL3
)

*/

void adc_start_ADC0_conversion (unsigned char trigger, unsigned char mode, unsigned char channels)

{
  
  ADCON0 &= 0xDC;            // disable all triggers  
  ADMODA &= 0xF0;            // clear mode bits and boundary interrupt flag 
  
  switch (mode)
  {     
    case ADC_FIXEDSINGLE:           // fixed channel, single conversion    
    case ADC_AUTOSCANSINGLE:        // auto scan, single conversion      
      ADINS = channels;             // select channel(s)      
      ADMODA |= 0x01; break;        // select mode       
    
    case ADC_FIXEDCONT:             // fixed channel, continuous conversion    
    case ADC_DUALCONT:              // dual channel, continuous conversion      
      ADINS = channels;             // select channel(s)      
      ADMODA |= 0x02; break;        // select mode        
    
    case ADC_AUTOSCANCONT:          // auto scan, continuous conversion      
      ADINS = channels;             // select channel(s)      
      ADMODA |= 0x04; break;        // select mode      
    
    case ADC_SINGLESTEP:            // single step      
      ADINS = channels; break;      // select channel(s)      
  }
  
  switch (trigger)                  // select new trigger
  {    
    case ADC_NONE: break;           // no trigger    
    
    case ADC_TIMER:                 // timer triggered start       
      ADCON0 |= 0x20; break;        // select trigger      
    
    case ADC_IMMEDIATE:             // start immedately      
      ADCON0 |= 0x01; break;        // select trigger      
    
    case ADC_EDGE:                  // edge triggered start      
      ADCON0 |= 0x02; break;        // select trigger      
    
    case ADC_DUALIMMEDIATE:         // dual start immediately      
      ADCON0 |= 0x03; break;        // select trigger       
  }
}

/***********************************************************************
DESC:    Stops ADC0 conversions
RETURNS: Nothing
************************************************************************/
void adc_stop_ADC0_conversion(void)
    {  
      ADCON0 &= 0xDC; // disable all triggers
    }
/***********************************************************************
DESC:    ADC Interrupt Service Routine
         Called when an ADC conversion has completed
         Uses register bank 1
RETURNS: Nothing
CAUTION: adc_init must be called first
************************************************************************/
void adc_isr(void)
interrupt 14 using 1
{
  if (ADCON0 & 0x08)        // adc0 conversion complete?
      {    
        ADCON0 &= ~0x08;    // clear ADCI0 flag read results from AD0DAT0 - AD0DAT3                         
      }
  
  if (ADMODA & 0x08)        // adc0 outside boundary range?
      {
        ADMODA &= ~0x08;    // clear BND0 flag
      }
}


List of 16 messages in thread
TopicAuthorDate
Problems with Code Architect and interrupts            01/01/70 00:00      
   where is the ISR?            01/01/70 00:00      
      Erik...            01/01/70 00:00      
         you enable an interrupt for which there is no ISR            01/01/70 00:00      
            I missed the ISR routine....            01/01/70 00:00      
   Whoops, here is the .c file with the ADC ISR.....            01/01/70 00:00      
      Also forgot mention...simulation works fine            01/01/70 00:00      
   I found part of my problem            01/01/70 00:00      
      Interrupts            01/01/70 00:00      
         Modified.....seems right, I2C bus going nuts            01/01/70 00:00      
            Polling or Interrupts            01/01/70 00:00      
               Exactly......            01/01/70 00:00      
                  Opinion            01/01/70 00:00      
                     Gentlemen....thats what I thought I had!!            01/01/70 00:00      
                        Port config            01/01/70 00:00      
                  poll ....            01/01/70 00:00      

Back to Subject List