HOLA que tal MLO, ya hise algo parecido a lo que tu hisite en tu codigo pero sigo sin resultado, ademastengo un problema en la simulacion de proteus me da un errorque dice: ADC conversion started before” wait “time has expired following previous conversion or channel change, no se por que pero creo que algo anda ma por ahi. Denuevodejo mi codigo para que me puedas corregir. GRACIAS.
#include <16F886.H>
#device ADC = 10
#fuses HS, NOWDT, NOLVP, PUT, MCLR
#use delay( clock = 20M )
#include <LCD_PORTC.C>
int16 ADC, ADCI, ADCS;
int CamFlag, Pasa, Cont = 0;
#INT_EXT
void ext_isr( void )
{
if( CamFlag == 0 )
{
Pasa = 0;
ext_int_edge( 0, H_TO_L );
CamFlag = 1;
}
else if( CamFlag == 1 )
{
Pasa = 1;
ext_int_edge( 0, L_TO_H );
CamFlag = 0;
}
}
#INT_TIMER0
void TIMER0_isr( void )
{
/*for( ADCI = ADC; ADCI <= ADCS; ADCI++ )
{
output_high( PIN_B2 );
}*/
Cont++;
if( Cont == ADCS )
{
output_high( PIN_B2 );
}
disable_interrupts( INT_TIMER0 );
}
void main( void )
{
//lcd_init();
setup_adc_ports( SAN0 );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
setup_timer_0( RTCC_INTERNAL | RTCC_DIV_4 );
set_timer0( 131 );
CamFlag = 0;
ext_int_edge( 0, L_TO_H );
enable_interrupts( INT_EXT );
enable_interrupts( GLOBAL );
while( 1 )
{
if( Pasa == 0 )
{
ADC = read_adc();
delay_us( 10 );
ADCS = ADC + 1;
if( ADC == 1023 )
{
ADCS = ADC;
//ADC = ADC - 1;
}
enable_interrupts( INT_TIMER0 );
}
else if( Pasa == 1 )
{
output_low( PIN_B2 );
}
}
}