TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rashii en 13 de Febrero de 2008, 06:15:34
-
Hola, actualmente uso el css y tengo el siguiente problema. Tengo que enviar un numero de 4 bytes por el puerto serie, es decir 0045 por ejemplo con el formato siempre xxxx. Tengo 2 problemas a la hora de recibirlos en el receptor. Por un lado, al ser caracteres, tendría que convertirlos a número ¿Cómo haria esto? Y por otro, tendría que juntar esos números y tomarlos como uno solo de manera que si me llega el 0 el 0 el 4 y el 5 el resultado sea un numero con el 45...Gracias de antemano. Un saludo.
-
Si recibes todos los números como una cadena, solo tienes que utilizar la función:
atoi
que convierte de ascii a decimal.
Un saludo
-
Para juntarlos creo recordar que era con make
Un saludo
-
Hola
Puedes utilizar atoi(), atol(), o atoi32(), segun el tamaño del entero de 8, 16 o 32 bits.
Tendras que incluir la libreria stdlib.h
En C "normal", existen tambien las funcion inversa itoa(), pero no se si el compilador CCS la contempla...
Tambien puedes utilizar las caracteristicas de formateo de datos de printf()
Saludos a tod@s
-
Yo usuaria sprtinf de la sgte manera, pero nose si CSS lo soporta...
sprintf( StringOut, "%04u", Numero );
o presentacion en Hexa
sprintf( StringOut, "%04X", Numero );
Donde StringOut queda el numero formateado y convertido, ahora si el standart output corresponde al serie directamente usa printf con el mismo formato.
Salu2!
-
Gracias a todos! Lo que no me ha quedado claro es como se juntarian..hablais de make pero como funciona? Un saludo
-
Como bien te ha dicho RICHI777 tienes que obtener una cadena en ascii del número a enviar. Para ello puedes usar directamente printf o pasarlo a una variable que guarde la cadena con sprintf.
Un saludo
-
la cadena ya la tengo y la transmito como 0051 por ejemplo...pero el problema es a la hora de recibirla que no se muy bien como juntar esos numeros, gracias, un saludo.
-
Como recibis el numero, en binario o ascii ?
-
Olvídate del make, precisamente hace todo lo contrario: a partir de por ejemplo un in16 lo separa en dos variables de 8 bits (parte alta y parte baja).
Para juntar se me ocurre lo siguiente: fusiona las 4 cadenas de los 4 caracteres recibidos en una sola y luego con la función atoi32() la pasas a entero.
CORRECCION:
- El make8 extrae bytes individuales de un int16 ó un int32
- El make16 une dos int8 para formar un int16
- El make32:
- Une cuatro int8 para formar un int32
- Une dos int16 para formar un int32
- Une un int8 + un int16 para formar un int32 (añade además 00 a la izquierda)
- etc
-
El make sí Pocher, pero el make16 obtiene un word a partir de dos bytes, y el make32 obtiene un long word a partir de 2 words.
-
Cierto y mirándome el manual me he dado cuenta que el make32 también es capaz de unir 4 int8 para formar un int32 que es la solución que buscaba nuestro amigo.
Puedes probar las 2 soluciones que te he comentado, a ver que tal.
Un saludo
-
Claro, exacto, ya lo tengo entonces, muchas gracias a todos que me sirvio de mucho..Un saludo amigos
-
Hola Rashii.
Entiendo que quieres mandar un número desde el PIC por puerto serie hacia la PC o a otro PIC? Si es hacia la en que lenguaje estas programando el receptor?
Saludos y espero poder ayudarte.
Ganbatte kudasai.
-
Es de un pic hacia un pic. Os cuento lo que quiero hacer. Tengo 2 modulos zigbee cada uno gobernado por un microcontrolador. Lo que quiero hacer es mandar un numero compuesto por 4 bytes...por ejemplo el 1245 y recibirlo en el otro microcontrolador para procesarlo como un entero y trabajar con el. Pero como me habeis dicho usando atoi y pasandole los 4 bytes ya lo tendria solucionado...Gracias por la ayuda :)
Un saludo.