Hola deruboy!!
Puede que esté equivocado pero por si acaso mira esto:
Codigo:
if(dsfsdfsdfsdfsf)
{
ewrewrer;
werewrewr;
}
else
{
if(sdfsdfsdfsdf)
{
dfsdfsdf;
dfgfdgdfg;
}
else
{
if(dfgdfsd)
{
fdgdfgdf;
dsfdsf;
}
else
{
dededede;
dfdfd;
}
}
}
.
.
.
.
.
Es esto lo que quieres hacer??? Si es así pégale un vistazo a las llaves "}".Si no es esto lo que deseas hacer no pongas los "else". No los necesitas.
Por cierto con el compilador hi-tech no se pero... con el CCS la función delay_ms solo admite (como dice el colega maunix) unsigned int. Siendo imprevisible el resultado si le metes un número más grande.
Por probar no se pierde nada.
Un saludo desde Alicante.
Escrito originalmente por deruboy
Por lo pronto, lo del delay no es. Le puse 100 y tampoco funciono como queria. Parece que los if no estuvieran cerrando sus secuencias. En el hi tech el delay funciona con mas de 255, esto se refleja en la rapidez con que cambian de estado los leds. Si alguien cree que aqui el "else if"no funciona en hi-tech o en forma global con los microcontroladores, por favor diganme cual seria la manera correcta.
Amigo sigo estando vago para leer todo ese código, pero fijate lo siguiente:
Esta línea no es lo mismo que leer el puerto D y luego comprar con una variable de 8 bits? Imaginemos que solo queremos los 5 bits menos significativos, de RD4 a RD0. Yo que tu haría asi:
Codigo:
unsigned int tempportd;
temp = PORTD & 0x1F // borramos los bits mas significativos
// reemplazo de if (RD4==0 && RD3==0 && RD2==0 && RD1==0 && RD0==0)
if (tempportd == 0b00000000) {...}
//if (RD4==0 && RD3==0 && RD2==0 && RD1==0 && RD0==1)
if (tempportd == 0b00000001) {...}
//if (RD4==0 && RD3==0 && RD2==0 && RD1==1 && RD0==0)
if (tempportd == 0b00000010) {...}
Es más hasta en vez de hacer tantos if then.... podrias hacer un "case" con la variable tempportb y eso te resolvería todo
Saludos