TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: CEAUGO en 23 de Marzo de 2008, 02:49:09

Título: como hago recepcion???
Publicado por: CEAUGO en 23 de Marzo de 2008, 02:49:09
Hola a todos, pues les comento enque consiste mi prueba para luego preguntar. Debo hacer una conversion analoga digital y luego el valor de esa conversion enviarla por via serial a otro pic que luego este lo visualizara por una lcd, la parte de la conversion la tengo, pero estuve mirando que cuando lo envio por "#use rs232" no me envia todo el adres, supongo porque son 16 bits y la comunicacion serial es para 8 bits "supongo" entonces este es mi problema, estoy dividiendo el adres en adresh y adresl y los estoy enviando, pero no se como hacer el otro programa de la recepcion para recoger estos dos valores, espero haberme hecho entender. Muchas gracias por toda ayuda brindarme... ha utilizo el pic 18f452
Título: Re: como hago recepcion???
Publicado por: pocher en 23 de Marzo de 2008, 03:00:01
En la recepción usa make(16) (Une 2 int8 para formar un int16)

Un saludo
Título: Re: como hago recepcion???
Publicado por: gu1llermo en 23 de Marzo de 2008, 15:09:54
pocher yo para recibir dos bytes siempre hacía var16=256*var_high+var_low  :? complicando las cosas por no dejar  :mrgreen: pero verdad como tu dices es la mejor manera,
var16=MAKE16(var_high, var_low)

Saludos y gracias que también a mí me ha resultado útil tu aporte.  :mrgreen:
Título: Re: como hago recepcion???
Publicado por: CEAUGO en 23 de Marzo de 2008, 23:32:15
En la recepción usa make(16) (Une 2 int8 para formar un int16)

Un saludo
---------------------------------------------------------------------------------------------------------------Hola te agradezco tu respuesta, nunca he manejado el make(16) y no comprendo muy bien como utilizarlo disculpa mi ignorancia, te pregunto en el programa de transmision debo mandar una variable de 16 bits donde se encuentre los dos adres, ya que he intentado mandar por #use rs232 16bits y no he podido; lo hice con putc(valor); valor es una variable de 16 bits pero solo me envia 8bits, en la parte de recepcion va lo que tu me comentas de make(16) (Une 2 int8 para formar un int16), gu1llermo dio este formato var16=MAKE16(var_high, var_low); no entiendo que debo hacer con var_high y var_low, bueno les agradeceria un poco mas de ayudita y de nuevo perdon por mi ignorancia.... Muchas gracias....

Título: Re: como hago recepcion???
Publicado por: gu1llermo en 24 de Marzo de 2008, 10:25:14
Efectivamente no puedes enviar directamente una variable de 16 bits (2 bytes) por eso tienes que enviar primero 1 byte y luego el otro, es decir:

Pic Transmisor:
int16 valor;// Variables de 16 bits en donde se guarda el resultado de la conversión AD
int8 var_low, var_high;/* El resultado de la conversión AD tienes que separarlos en byte bajo y byte alto*/

/* Lees tu conversión AD y guardas el resultado en la variable "valor"*/

var_low=make8(valor, 0);// Guardas el byte bajo en var_low
var_high=make8(valor, 1);// Guardas el byte alto en var_high

putc(var_low);// Envías byte bajo
putc(var_high);// Envías byte alto

En el pic receptor:

var_low=getc();// recibimos  el byte bajo
while (!kbhit()); Mientras no haya datos queda esperando
var_high=getc();// recibimos el byte alto

valor=make16(var_high, var_low); // Unimos los dos bytes en uno.

Esto es un ejemplo pero te recomiendo que revises la ayuda ó help del CCS para más información de los comandos y busques ejemplos de recepción de datos en el foro que hay bastantes.

Saludos.