TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Vayadespiste en 11 de Noviembre de 2007, 17:17:25
-
Saludos al foro, estoy iniciándome en el C (mc18) y me he encontrado este problema:
char minbuf[2];
char maxbuf[2];
T_Minima=20;
T_Maxima=26;
.......
btoa (T_Minima,minbuf); /* Conversión de Hex a un array de ASCII */
btoa (T_Maxima,maxbuf);
WriteCmdXLCD(LINEA_2);
putsXLCD(minbuf); /* Envió del valor de la Temperatura */
.........
Cuando se envía la rutina de escritura de los 2 valores en minbuf (20 en este caso), la secuencia de envió de la cadena envía seguidos los 2 caracteres de maxbuf, es decir al LCD manda 2026 cuando el envió es solo "minbuf". De momento lo he solucionado enviando un carácter por vez, es decir putcXLCD(minbuf[0]) y despues el otro carácter, la pregunta:
"¿ que estoy haciendo mal para que me envié las 2 cadenas?.
Gracias y un saludo.
-
A tu cadena le falta un caracter de fin de cadena. Por ello y al estar ambas cadenas minbuf y maxbuf contiguas en memoria de seguro la función toma todo hasta que encuentra un #0 en la memoria y deja de enviar.
Debes agregarle a tu string un null de fin de string .
-
Gracias por tu tiempo Maunix, como me suele pasar una respuesta suele llevar a otra pregunta ya he encontrado el carácter normal a usar como fin de strin que si no he leído mal es \0 y me ha quedado la duda como hacerlo, al mismo tiempo en el mismo pdf he visto que como ejemplo se declaraba un bufer sin número que lo limite es decir, en lugar de minbufer[2] he visto que se declaraba minbufer[] y parece que esto añade el carácter de fin automáticamente, creo que queda claro que estoy empezando con "C". Pero bueno, lo dicho al principio gracias por tu tiempo y ahora por lo menos se donde mirar.
Gracias y un saludo.
-
Pero minbufer[] asi nomas? Hablas del C18 o de un C genérico?
Fijate si no tiene además un "const" antes y al lado un "=" de definicion. POr ej.
const char mystr[] = "my string";
o bien
char mystr[] = "my string";
-
Si es tal y como dices, lleva = y el valor a continuación.
Gracias y un saludo.
-
Si es tal y como dices, lleva = y el valor a continuación.
Gracias y un saludo.
Bueno, el = es porque en realidad estas definiendo una constante o dicho de otra forma es un string con un largo perfectamente conocido -> el largo de lo que le sigue . Y luego el C le agrega el NULL
SI haces
char mystr[] = "hola"
El compilador habrá creado un string de 5 chars, 4 para hola y uno extra para el NULL.
-
Gracias a tu ayuda Maunix ya me funciona como quería, ahora las cadenas que tengo declaradas si que terminan, siguiendo tus instrucciones las he declarado he inicializado al mismo tiempo y funcionan perfectamente:
char minbuf[]= "00";
char maxbuf[]="00";
Ahora al inicializarlas con esos valores aunque sea de 0 me coloca el compilador el " . " y corta la cadena en su punto, luego al asignarle los valores mediante el "btoa......" los coloca perfectamente en su sitio.
Un saludo.