??? 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 } } |
Topic | Author | Date |
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 |