Informacion acerca de programacion en C

Muchachos buenas tarde, quisiera saber como hago para que un programa internamente se me resetee despues que el valor que esta leyendo es menor de que quedo guardado. me explico hice un programa en C que hace, tiene 6 pasos y en cada paso hace una lectura de anologo-digital y el valor mayor lo guarda y se posiciona en ese lugar de mayor luz, pero en lo que ahora estoy ponchado es que no se como hacer cuando el valor que hay guardado es mayor que el de la nueva lectura hace. ñes agradeceria la ayuda...
 
Hay muchas maneras de hacer lo que decis, y el problema es que no se entiende del todo la pregunta. Pero bueno, de todos modos, una de las alternativas es, periodicamente, resetear el maximo interno utilizando un temporizador.
 
mediante una estructura secuencial for(), en donde el índice varía de 0 a 6. Colocar una estructura condicional if() que compara los valores mediante el operador > ó <. Si se da que el número nuevo es mayor al que usas como parámetros ejecutas dentro del cuerpo de la estructura if(), una instrucción que guarde en la dirección de memoria del parámetro el nuevo valor. Luego en la siguiente pasada del bucle for(), haces lo mismo comparas el valor del parámetro con el nuevo valor ingresado y así

saludos.
 
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...
 

Adjuntos

  • isis.rar
    16.5 KB · Visitas: 1
Última edición:
Atrás
Arriba