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;
}
}
}
No me parece un código optimizado, output_toggle lo usas a cada rato similar al código original que tenía muchos delayMS(500), cuando puedes tener uno solo.
Si deseas usarlo deberías hacerlo así:
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;
}
output_toggle(pin_c0);
contador++;
Otro consejo, vi que usas el proteus para simular tu hardware, podrías usarlo para depurar (
debugging) y podrías ir paso a paso en tu código y ver hasta donde llega.