TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: CEAUGO en 18 de Mayo de 2008, 17:21:59
-
Hola a todos....tengo una inquietud y perdonen si es muy boba..... estoy aprendiendo a enviar datos por #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7), pero en los ejemplos que he visto he notado, dos formas de enviar el dato.
printf("%ld",temperatura); printf y putc solo envia 8bits??
putc(temperatura);
cual es la diferencia entre estos, uno envia datos es ascii??? y el otro en binario???, si yo deseara enviar datos del micro al pc cual utilizo???...Muchas gracias por sus respuestas y atencion...
-
Hola.
Ninguna duda es lo suficientemente boba si nos coloca a pensar.
En el manual del CCS estan las definiciones de las funciones:
PUTC:
putc (cdata)
cdata is a 8 bit character
This function sends a character over the RS232 XMIT pin. A #USE RS232 must appear before this call to determine the baud rate and pin used. The #USE RS232 remains in effect until another is encountered in the file.
PRINTF :
printf (string)
String is a constant string or an array of characters null terminated.
Outputs a string of characters to either the standard RS-232 pins (first two forms) or to a specified function. Formatting is in accordance with the string argument. When variables are used this string must be a constant. The % character is used within the string to indicate a variable value is to be formatted and output. Longs in the printf may be 16 or 32 bit. A %% will output a single %. Formatting rules for the % follows
Y, ademas hay unos ejemplos para que la diferencia sea mas apreciable.
byte x,y,z;
printf("HiThere");
printf("RTCCValue=>%2x\n\r",get_rtcc());
printf("%2u %X %4X\n\r",x,y,z);
putc('*');
for(i=0; i<10; i++)
putc(buffer);
putc(13);
Saludos
-
entonces según entiendo yo el put c solo puede colocar un caracter
y el printf caracteres y cadenas
-
Printf ocupa mas memoria de programa pues es una funcion de mucha mas potencia que el solo PUTC.
PUTC es como si en ASM le dieras la orden a la USART de transmitir un Byte. Printf es toda una funcion que te permite enviar varios caracteres uno tras de otro dentro una cadena de texto " ". para hacer lo mismo con PUT se debe implementar un FOR, tal cual como te lo mostro en el ejemplo MLO__. Ademas printf puede convertir (Dar formato) a un variable que se tenga en la memoria RAM y el resultado convertirlo a cadena de texto (Caracteres ascii) y enviarlos automaticamente.
Ejemplo.
Int8 Variable1=0x81;
Printf("%2x",Variable1);
lo anterios realiza la siguiente secuencia de operaciones:
toma Variable1, separa los 4 bits mas altos y los 4 mas bajos, lObtieniendo 8 y 1 por separado, luego pasa el 8 decimal a '8' ascii lo mismo con el 1 y luego lo transmite por el puerto serie.
Lo anterior es por haberle dicho que formateara en X es decir en hex...
Sicambiamos a:
Printf("%u",Variable1);
el resultado sera transmitir la cadena ascii "121" que es el equivalente de 0x81 a decimal.
Espero se entienda algo, si no me dicen y hablo un poco mas sobre el tema..
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PUTC para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
SALUDOS!!
-
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PUTC para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
Fe de erratas: PICmouse seguramente habra querido decir:
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PRINTF para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
Saludos a todos.
-
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PUTC para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
Fe de erratas: PICmouse seguramente habra querido decir:
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PRINTF para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
Saludos a todos.
-------------------------------------------------------------------------------------------------------------------
Muchas gracias por la explicacion..... entonces puedo decir esto y si me equivoco porfa corrigamen... yo puedo obtener una conversion adc y enviarla completamente con el PRINTF y este valor es en ascii y lo puedo enviar directamente al pc???, y en tonces si yo mando con putc solo puedo enviar 8bits y estos no estan en ascii asi que los deserara enviar a mi pc los debo transformar en ascii???, perdon si digo algo indevido...y muchas gracias...
-
Hola.
La cuestion seria asi:
Si envias el resultado del adc configurado a 8 bits con putc, en el hyperterminal de Windows veras algun caracter ( correspondiente al codigo ascii ) y si usas el printf para enviar el dato, veras en el hyperterminal el string correspondiente.
Ejemplo:
Si el valor es value_adc = 48, entonces:
putc(value_adc); -> se vera en el hyperterminal "0"
printf("%u", value_adc); -> se vera en el hyperterminal "48"
Tu mismo colocaste el mejor ejemplo para explicarlo!!!!!! :-/
Saludos
-
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PUTC para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
Fe de erratas: PICmouse seguramente habra querido decir:
Conclusion: Es mejor usar PUTC cuando se quiere enviar un byte en especifico o una letra, en general solo un caracter (Comando).
PRINTF para enviar cadenas de caracteres ascii y para enviar lo que contiene una variable de la RAM.
Saludos a todos.
Tas en lo Correcto, queria decir Printf en el segundo parrafo.. :mrgreen: