TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: NoSepComo en 18 de Octubre de 2011, 04:43:54

Título: Como enviar hexadecimales a traves de la uart
Publicado 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.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: Suky en 18 de Octubre de 2011, 11:16:11
En CCS presionando F12 tienes la ayuda, colocando putc sale de que se trata y como usarla  ;-)
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: MerLiNz en 18 de Octubre de 2011, 12:16:02
hexadecimal, decimal, octal.... todo es lo mismo, 0xFF = 255 decimal da igual lo que mandes, al final todo es lo mismo, con distinta base.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: NoSepComo en 19 de Octubre de 2011, 04:48:05
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.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: Suky en 19 de Octubre de 2011, 09:55:16
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.

Citar
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:

Citar
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!
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: MerLiNz en 19 de Octubre de 2011, 10:41:20
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.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: NoSepComo en 19 de Octubre de 2011, 12:16:15
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.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: NoSepComo en 02 de Noviembre de 2011, 09:41:14
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.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: AngelGris en 02 de Noviembre de 2011, 10:00:14
  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.
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: MerLiNz en 02 de Noviembre de 2011, 11:08:07
estas enviando ascii 1, 2, 3..... osea garabatos raros, si lo que quieres enviar son numeros tendrias que poner sprintf("%d",valor);
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: Suky en 02 de Noviembre de 2011, 11:59:57
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!
Título: Re: Como enviar hexadecimales a traves de la uart
Publicado por: NoSepComo en 02 de Noviembre de 2011, 14:53:02
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.