pic 16f877a
cristal de 4MHZ
1 funcion .. sin importar lo que pase mientras este conectado el pic se mantendra intermitente un led conectado a (pin_d2)
2 funcion . tengo conectados 9 pulsadores en los puertos A Y E . ( ya configurados como entrada ) , cada pulsador actúa como control
on/off en los leds conectados a los puertos B Y D
3 funcion si presiono el boton (pin_E1) apaga los puertos por 10ms y los enciende de nuevo //
4 funcion solo si la entrada del pin E2 es igual a 1 //apaga todos los leds//
Mi problema esta es que lo simulo en proteus y funciona casi perfectamente como lo quiero y digo casi por que
al presionar los pulsadores por primera vez al darle play a proteus (simular) no HACE NADA sino despues de darle por segunda vez al pulsador y despues de alli si funciona perfecto ha bueno casi tambien por que cuando le doy a los botones no hace la funcion al instante como quiero tengo que dejarlos precionados como por un 2 segundos para que haga la funcion .
mi pregunta es por que me pasa esto sera el proteus ? o el codigo esta mal ? otra cosa si pongo el mismo codigo pero sin el led intermitente .O cambio la frecuencia del osc a 20 mhz . si funciona lo demas perfectamente SIN RETARDO EN LOS PULSADORES NI NADA . TODO PERFECTO
este es mi codigo:
justamente asi como esta lo compilo void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!
SET_TRIS_A(0b11111111); //seteo los puertos como entrada
SET_TRIS_E(0b11111111); //seteo los puertos como entrada
while(true){
// CODIGO/// FUNCION 1 Mantiene este led intermitente
output_high(pin_d2);
delay_ms(500);
output_low(pin_d2);
delay_ms(500);
//FUNCION 2
// CODIGO/// tecla 1
if(input(pin_a0)==1){
output_toggle(pin_b0); // cambia de estado//
while(input(pin_A0)==1);}
// CODIGO/// tecla 2
if(input(pin_a1)==1){
output_toggle(pin_b1); // cambia de estado //
while(input(pin_A1)==1);}
// CODIGO/// tecla 3
if(input(pin_a2)==1){
output_toggle(pin_b2);// cambia de estado //
while(input(pin_A2)==1);}
// CODIGO/// tecla 4
if(input(pin_a3)==1){
output_toggle(pin_b3);// cambia de estado //
while(input(pin_A3)==1);}
// CODIGO/// tecla 5
if(input(pin_a4)==1){
output_toggle(pin_b4);// cambia de estado //
while(input(pin_A4)==1);}
// CODIGO/// tecla 6
if(input(pin_a5)==1){
output_toggle(pin_b5);// cambia de estado //
while(input(pin_A5)==1);}
// CODIGO/// tecla 7
if(input(pin_E0)==1){
output_toggle(pin_b6);// cambia de estado //
while(input(pin_E0)==1);}
//FUNCION 3
// CODIGO/// apaga los puertos por 10ms y los enciende de nuevo // tecla 8 (pin_E1)
if(input(pin_E1)==1){
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
output_low(pin_D0);
delay_ms(10);
output_toggle(pin_b0);
output_toggle(pin_b1);
output_toggle(pin_b2);
output_toggle(pin_b3);
output_toggle(pin_b4);
output_toggle(pin_b5);
output_toggle(pin_b6);
output_toggle(pin_b7);
output_toggle(pin_D0);
while(input(pin_E1)==1);}
// FUNCION 4
// CODIGO///
//solo si la entrada del pin e2 es igual a 1 //apaga todos los leds//
if(input(pin_E2)==1){
output_low(pin_B0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
output_low(pin_D0);
while(input(pin_E2)==1);}
}
}