Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola chicos, sabéis porque si hago delay_ms(2000) se detiene 2 segundos y sin embargo si hago:
tiempo=20;
delay_ms(tiempo*100);
Se detiene apenas unos milisegundos...
Ciao.
XyVy, y si pruebas esto:tiempo = 20*100;
delay_ms(tiempo);
En la ayuda del CCS te dice:
Syntax:
delay_ms (time)
Parameters:
time - a variable 0-65535(int16) or a constant 0-65535
De lo que se entiende que sólo puede pasarle o una variable directamente o una constante. Tú le estas pasando una fórmula, por lo que puede que el compilador omita una de las dos partes. No lo se seguro, pero tiene pinta de eso. Prueba diferentes valores para asegurarte.
Probé con
int tiempo=20*100;
delay_ms(tiempo);
y tampoco funcionaba, el error... vaya tela, eso me pasa por no cogerme el manual, y mi conocimiento de C (para los PCs) me hizo pensar que todo estaba bien.
Resulta que por defecto "int" en en el PIC es int8, por lo tanto solo podia tener un retardo en positivo de 255 y en negativo de 127.. vaya tela!!
He puesto int16 y todo solucionado.
Gracias chicos!
no, no funcionara. por la forma de compilar los delays que tiene el CCS
La solucion es meterlo, por ejemplo, dentro de un for
for xxxxxxxx
{
delay_us(100)
}
Eso es cierto, hay que acostumbrarse a poner las definiciones de tipos de la forma completa, si se usan varios compiladores de vez en cuando:
unsigned int16 contador;
signed int8 resultado;
A mi también me ha pasado alguna vez al pasar de un compilador a otro ;).