Te sugeriría hacer un diagrama de flujo del proceso que deseas hacer, aunque no lo creas de mucha ayuda, sobre todo cuando aun no dominas la programación o el lenguaje que estás usando.
Pienso que tal vez te falta un ; en while ((input(pin_b0) == 1))
Es decir así:Código: C
while ((input(pin_b0) == 1));
Y estoy asumiendo que cuando presionas el pulsante, B0, cambia a 1 lógico, es decir su estado normal es cero.
Tendría revisar tu proyecto y tratar de comprender que intentas hacer, pero más tarde, u ojalá alguien con un poco más de tiempo, pueda revisarlo.
Pienso que tal vez te falta un ; en while ((input(pin_b0) == 1))
Es decir así:Código: C
while ((input(pin_b0) == 1));
Y estoy asumiendo que cuando presionas el pulsante, B0, cambia a 1 lógico, es decir su estado normal es cero.
Tendría revisar tu proyecto y tratar de comprender que intentas hacer, pero más tarde, u ojalá alguien con un poco más de tiempo, pueda revisarlo.
Hay un error en el código cuando contador llega a 6, creo que es mejor así:Código: C
void main() { set_tris_b(0xff); set_tris_d(0x00); output_d(0x00); contador = 0x00; //inicializo el contador while(1) { if (input(pin_b0) == 1) //pulsante ha sido presionado { while ((input(pin_b0) == 1)); // espero a que el usuario deje de presionar el pulsante switch (contador) { case 0: output_d(0b00000010); break; case 1: output_d(0b00000100); break; case 2: output_d(0b00001000); break; case 3: output_d(0b00010000); break; case 4: output_d(0b00100000); break; case 5: output_d(0b01000000); break; default:output_d(0b10000000); break; } contador++; if (contador > 0x06) contador = 0x00; delay_ms(500); } } }
OK, veamos.. he logrado que funcione, añadiendo el "toggle" al fina de tu codigo. lo unico, que al hacer - default y volver a empezar, no me cuenta el pulso en el toggle.....Si, he olvidé del cambio de estado en D0, pero en este momento me he dado cuenta que estás cambiando en dos lugares el estado del bit0 del puerto, el primero con toogle y luego dentro del switch.
}
contador++;
if (contador > 0x06) contador = 0x00;
while (input(pin_b0) == 1)
delay_ms(10);
output_toggle(pin_d0);
}
}
}
Para que le veas más claro, y sin recurrir a enmascaramientos, tal vez sea así el código:Código: C
void main() { set_tris_b(0xff); set_tris_d(0x00); output_d(0x00); contador = 0x00; //inicializo el contador output_d(0b00000000); // pongo a cero todos los bits de d while(1) { if (input(pin_b0) == 1) //pulsante ha sido presionado { while ((input(pin_b0) == 1)); // espero a que el usuario deje de presionar el pulsante delay_ms(10); output_toggle(pin_d0); switch (contador) { case 0: output_clear(pin_d7); output_set(pin_d1); break; case 1: output_clear(pin_d1); output_set(pin_d2):break; case 2: output_clear(pin_d2); output_set(pin_d3);break; case 3: output_clear(pin_d3); output_set(pin_d4);break; case 4: output_clear(pin_d4); output_set(pin_d5);break; case 5: output_clear(pin_d5); output_set(pin_d6);break; default:output_clear(pin_d6); output_set(pin_d7); break; } contador++; if (contador > 0x06) contador = 0x00; delay_ms(500); } } }
Para que le veas más claro, y sin recurrir a enmascaramientos, tal vez sea así el código:Código: C
void main() { set_tris_b(0xff); set_tris_d(0x00); output_d(0x00); contador = 0x00; //inicializo el contador output_d(0b00000000); // pongo a cero todos los bits de d while(1) { if (input(pin_b0) == 1) //pulsante ha sido presionado { while ((input(pin_b0) == 1)); // espero a que el usuario deje de presionar el pulsante delay_ms(10); output_toggle(pin_d0); switch (contador) { case 0: output_clear(pin_d7); output_set(pin_d1); break; case 1: output_clear(pin_d1); output_set(pin_d2):break; case 2: output_clear(pin_d2); output_set(pin_d3);break; case 3: output_clear(pin_d3); output_set(pin_d4);break; case 4: output_clear(pin_d4); output_set(pin_d5);break; case 5: output_clear(pin_d5); output_set(pin_d6);break; default:output_clear(pin_d6); output_set(pin_d7); break; } contador++; if (contador > 0x06) contador = 0x00; delay_ms(500); } } }
No, amigo..
14 errores con la nueva modificacion..
output clear & output set
PIC C compiler
- Tienes que ingresar para ver archivos adjuntos -
OK, finalmente he conseguido el efecto que queria, pero he tenido que usar la salida de otro puerto.(no se bien porque).
void main()
{
set_tris_b(0xff);
set_tris_d(0x00);
output_d(0x00);
set_tris_c(0x00);
output_c(0x00);
while(1)
{
if (input(pin_b0) == 1) //pulsante ha sido presionado
{
while ((input(pin_b0) == 1)); // espero a que el usuario deje de presionar el pulsante
switch (contador)
{
case 0: output_d(0b00000010);output_toggle(pin_c0); break;
case 1: output_d(0b00000100);output_toggle(pin_c0); break;
case 2: output_d(0b00001000);output_toggle(pin_c0); break;
case 3: output_d(0b00010000);output_toggle(pin_c0); break;
case 4: output_d(0b00100000);output_toggle(pin_c0); break;
case 5: output_d(0b01000000);output_toggle(pin_c0); break;
default:output_d(0b10000000);output_toggle(pin_c0); break;
}
contador++;
if (contador > 0x06) contador = 0x00;
}
}
}