TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: NoSepComo en 18 de Octubre de 2011, 04:43:54
-
Hola a todos,
Estoy trabajando en un proyectillo que básicamente tiene que hacer una serie de comunicaciones por RS485.
Bien, el manejo del bús y el hardware los tengo claros, estoy trabajando en ccs y la duda que me asalta es acerca de como podría mandar yo, un int o byte en formato hexadecimal, es decir, ¿puedo hacer un putc = 0xFF?. Otra solución que pensé era mandar strings, pero nunca he utilizado puts() y gets(), ¿funcionaría bien así?, porque no quería complicar la programación mandando ristras de datos (que tampoco es muy difícil pero lo había pensado mandando sólo un byte o int).
Gracias por vuestros consejos de antemano.
Un saludo a todos.
-
En CCS presionando F12 tienes la ayuda, colocando putc sale de que se trata y como usarla ;-)
-
hexadecimal, decimal, octal.... todo es lo mismo, 0xFF = 255 decimal da igual lo que mandes, al final todo es lo mismo, con distinta base.
-
Gracias por vuestras respuestas, el problema es que putc esta hecho para enviar un char, osease un caracter, yo lo que quiero saber es, de forma literal, si puedo hacer: putc(0xFF)?, lo entendería el compilador?.
Gracias.
-
Gracias por vuestras respuestas, el problema es que putc esta hecho para enviar un char, osease un caracter, yo lo que quiero saber es, de forma literal, si puedo hacer: putc(0xFF)?, lo entendería el compilador?.
Gracias.
Syntax:
putc (cdata)
putchar (cdata)
fputc(cdata, stream)
Parameters:
cdata is a 8 bit character. Stream is a stream identifier (a constant byte)
Y en el ejemplo:
putc('*');
for(i=0; i<10; i++)
putc(buffer);
putc(13);
Que más necesitas? Podes hacer un debug también para ver que sucede... Un carácter ascii no es más que un numero de 8-bits, no es otra cosa rara heee!
-
un char es un tipo de almacenamiento, no un caracter. El creador de C asi le puso, al igual que int, long... Sin embargo un char para PIC es un almacenamiento de 8bits, osea desde 0 hasta 255. O bien si es signed desde -128 hasta 128.
Como ya dije anteriormente decimal, hexadecimal, octal... es un numero con distinta base.
-
Ok, gracias a todos, suky me soluciono el asunto ya :), era lo que necesitaba leer, porque tal como yo lo hacía si que genera, pero no l había implementado ni depurado, me habéis ahorrado algún quebradero que otro.
Gracias de nuevo y un saludo.
-
hola de nuevo, sigo parado en el proyecto de 485 que hago y por lo mismo, asique estoy volviendo a lo básico y me estoy volviendo loco por momentos ejje. A ver, me he ido a una simple comunicación serie, mandar un dato, para probar un ejemplo tonto y no lo consigo.
Os pongo el código:
#include <18f45k20.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, bits=8)
void main()
{
int valor;
while(1)
{
for (valor=0;valor<=10;valor++)
{
putc(valor);
delay_ms(500);
}
}
}
Ya véis que es muy tonto, y el esquema es un pic con un virtual terminal enganchado la rxd con tx del pic, haciendolo de esta manera no veo nada, sin embargo, si en vez de mandar el entero, pongo putc('a'); entonces si que me los envía, yo no se que es lo que pasa.
De antemano gracias por vuestra ayuda.
-
Lo más probable es que se deba a que estás enviando número bajos y el terminal al no reconocerlo como caracteres no los muestra. Proba haciendo que tu variable valor vaya desde 48 hasta 58 y verás que sí funciona.
-
estas enviando ascii 1, 2, 3..... osea garabatos raros, si lo que quieres enviar son numeros tendrias que poner sprintf("%d",valor);
-
estas enviando ascii 1, 2, 3..... osea (http://www.cristianventura.com.ar/2008/02/29/o-sea-osea-osea/) garabatos raros, si lo que quieres enviar son numeros tendrias que poner sprintf("%d",valor);
Claro, fíjate la siguiente tabla: http://www.ascii.cl/es/
Sino, en la recepción del hyperterminal coloca visualización de hexadecimales.
Saludos!
-
Muchas gracias Suky, ya lo hice buien de una vez, los datos llegan pero no se pueden mostrar, aunque llegan bien, ahora sigo adelante.
Gracias de nuevo.