muchachos e puesto en practica lo que dicen y nada aka les dejo el .c para que vean y tambn les anexo el isis. lo que hace el programa es q hace un escaneo en 6 puntos y cuando termina se posiciona al de mayor valor, pero lo q no e logrado es q cuando esa luz q recibe baja se me resetee y vuelva a escanearme el sitio con los mismos 6 pasos.
#include <16f877a.h>
#device adc=8 //Configuración conversor AD a 8 bits
#fuses XT, NOWDT, NOPROTECT
#use delay (clock=4000000)
#byte port_b=0x86
#byte port_c=0x87
#byte port_d=0x08
#byte tris_d=0x88
int x=1, mov [5],i,y=0;
void avanzar (void)
{for(x=1;x<=4;x++)
{mov[1]=0b00000001;mov[2]=0b00000010;mov[3]=0b00000100;mov[4]=0b00010000;
output_c(mov [x] );
output_b(mov [x] );
delay_ms(50);
}}
void retroceder(void)
{for(x=1;x<=4;x++)
{mov[1]=0b00010000;mov[2]=0b00000100;mov[3]=0b00000010;mov[4]=0b00000001;
output_c(mov [x] );
output_b(mov [x] );
delay_ms(50);
}}
void main (void)
{
int16 valor_digital;
float valor_analogico;
int luminosidadleida=0,luminosidadfinal=0;
bit_set(tris_d,0);
setup_adc_ports(AN0); //Canal de entrada analógico AN0
setup_adc(ADC_CLOCK_INTERNAL); //Fuente de reloj RC
while(bit_test(port_d,0) == 1){
retroceder();
}
for(i=0;i<6;i++)
{
{
set_adc_channel(0); //Habilitación del canal de lectura 0
delay_us(20); //Estabilización
valor_digital=read_adc(); //Lectura digitalcanal analógico
valor_analogico=5.0*valor_digital/225.0; //Equivalencia valor analógico
luminosidadleida=valor_digital; //% luminosidad en LDR
if(luminosidadfinal<luminosidadleida)
{luminosidadfinal=luminosidadleida; y=i; }
delay_ms(500); //Retardo hasta siguiente lectura
}
avanzar();
}
i=6;
while (y!=i)
{
i--;
retroceder();
}
}
les agradezco la ayuda...