TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: daniel_908 en 22 de Noviembre de 2015, 17:23:50
-
buenas tardes estimados
estoy programando un sensor de caida libre (cronómetro) en pic c compiler, tengo dos pulsadores que simulan sensores de movimiento, el detalle es que no logro hacer que se pause por ejemplo: el pusador de RA4 simula el sensor de inicio. Cuando le arrojo el 1 lógico empieza a contar hasta que el pulsador rb7 se active, no logro hacer que se pause y reinicie.
aquí dejo el código:
#include <16f877a.h>
#fuses HS
#use delay(clock=20M)
#byte portb=0x06
#byte porta=0x05
int8 display[10]={63,6,91,79,102,109,125,7,127,103};
int8 unid,dec,cent,mil;
void main()
{
set_tris_b(0x00);
set_tris_a(0x00);
output_b(display[0]);
output_a(0b00);
while(1)
{
if(bit_test(porta,4)==1)
{
while(1)
{
{for(mil=0;mil<10;mil++)
{ mil:
for(cent=0;cent<10;cent++)
{ centena:
for(dec=0;dec<10;dec++)
{
decena:
for(unid=0;unid<10;unid++)
{
unidad:
for(int8 tiempo=0;tiempo<4;tiempo++)
{
output_a(0b01);
output_b(display[unid]);
delay_us(450);
output_a(0b10);
output_b(display[dec]);
delay_us(450);
output_a(0b100);
output_b(display[cent]);
delay_us(450);
output_a(0b1000);
output_b(display[mil]);
delay_us(450);
} //for 5
if(bit_test(portb,7)==1)
{
goto unidad;
delay_ms(5000);
break;
}
} // For 4
if(bit_test(portb,7)==1)
{
goto decena;
delay_ms(5000);
break;
}
}// For 3
if(bit_test(portb,7)==1)
{
goto centena;
delay_ms(5000);
break;
}
} // For 2
if(bit_test(portb,7)==1)
{
goto mil;
delay_ms(5000);
break;
}
} //For 1
} //if 1
} //While2
} //if0
} //While
} //void
aquí una imagen en proteus:
- Tienes que ingresar para ver archivos adjuntos -
espero puedan ayudarme
saludos
-
Tenes que usar interrupciones, con delays no va a haber forma que obtengas un buen valor.
Podrias usar el modulo CCP el cual mediria el tiempo, y conectas los 2 "sensores" al pin de entrada del CCP.
La otra es un timer + usar Rb0 y el mismo objetivo, . En fin todas interrupciones queda en vos averiguar como funcionan los modulos y que prvecho le podes sacar, ademas de buscar como se programa una interrupcion y se habilita.
-
Tenes que usar interrupciones, con delays no va a haber forma que obtengas un buen valor.
Podrias usar el modulo CCP el cual mediria el tiempo, y conectas los 2 "sensores" al pin de entrada del CCP.
La otra es un timer + usar Rb0 y el mismo objetivo, . En fin todas interrupciones queda en vos averiguar como funcionan los modulos y que prvecho le podes sacar, ademas de buscar como se programa una interrupcion y se habilita.
lo intentaré, gracias por las pistas! haha :)