Tengo el siguiente codigo, al depurarlo si Steps vale 0, entra en el if, ejecuta la primera asignacion, y se salta a la segunda asignación de if Step==7, si lo implemento con un switch, ocurre exactamente lo mismo.
if (Steps == 0) {
//GPIO = 0b00100000;
IN_1 = 0;
IN_2 = 0;//De aquí se salta a....
IN_3 = 0;
IN_4 = 1;
} else if (Steps == 1) {
//GPIO = 0b00110000;
IN_1 = 0;
IN_2 = 0;
IN_3 = 1;
IN_4 = 1;
} else if (Steps == 2) {
//GPIO = 0b00010000;
IN_1 = 0;
IN_2 = 0;
IN_3 = 1;
IN_4 = 0;
} else if (Steps == 3) {
//GPIO = 0b00010100;
IN_1 = 0;
IN_2 = 1;
IN_3 = 1;
IN_4 = 0;
} else if (Steps == 4) {
//GPIO = 0b00000100;
IN_1 = 0;
IN_2 = 1;
IN_3 = 0;
IN_4 = 0;
} else if (Steps == 5) {
//GPIO = 0b00000110;
IN_1 = 1;
IN_2 = 1;
IN_3 = 0;
IN_4 = 0;
} else if (Steps == 6) {
//GPIO = 0b00000010;
IN_1 = 1;
IN_2 = 0;
IN_3 = 0;
IN_4 = 0;
} else if (Steps == 7) {
//GPIO = 0b00100010;
IN_1 = 1;
IN_2 = 0;//..... a aquí.
IN_3 = 0;
IN_4 = 1;
} else {
//GPIO = 0b00000000;
IN_1 = 0;
IN_2 = 0;
IN_3 = 0;
IN_4 = 0;
}
las salidas las tengo de esta manera:
#define IN_1 GPIObits.GP1
#define IN_2 GPIObits.GP2
#define IN_3 GPIObits.GP4
#define IN_4 GPIObits.GP5
Y tengo esta configuración, con oscilador interno:
OSCCON = 0b00010111;
GPIO = 0x00;
CMCON0 = 0b11111111; //Canal 0 analogico, resto digital
ANSEL = 0b00000001; //Canal 0 analogico, resto digital
TRISIO = 0b00000001;
IOC = 0x00;
Si saco las asignaciones de los if, haciendo algo así, actualiza las salidas:
IN_1 = 0;
IN_2 = 0;
IN_3 = 0;
IN_4 = 1;
No sé donde puede estar el error.
Saludos!!!