Autor Tema: Puerto serie y float  (Leído 4227 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hectdiaf

  • PIC10
  • *
  • Mensajes: 18
Puerto serie y float
« en: 25 de Marzo de 2010, 13:22:19 »
Muy buenas tardes a todos

hoy escribo para atender algunas recomendaciones que me puedan ofrecer frente a un inconveniente respecto al puerto serie. La situacion es que no hallo la forma de capturar un numero hexadeimal punto flotante que llega por el puerto serie y despues expresarlo como decimal.

Lo intente de las siguientes formas:

capturar por interrupcion los  datos que llegan por el puerto serial asi 
1. c=getchar
2. c=getc
3. c=get_float
4. gets(dato)
    c=atof(dato);
y simulando el enter en ascii al final de la transmision en los casos 3 y 4.

pero de ninguna forma funciono.
agradeceria sus sugerencias para ver de que otra forma se pudiera capturar el numero punto flotante (que viene de lenguaje ensanblador del pc) en hexadecimal por el puerto serial.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Puerto serie y float
« Respuesta #1 en: 25 de Marzo de 2010, 13:52:53 »
Y como mandas los datos desde la Pc? Podes mandar los caracteres ascii o enviar las parte decimal y entera por separado  :rolleyes:


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado hectdiaf

  • PIC10
  • *
  • Mensajes: 18
Re: Puerto serie y float
« Respuesta #2 en: 25 de Marzo de 2010, 17:45:41 »
Primero gracias por el interes y tu tiempo

en assembler se toma el numero se separa en 4 bytes ya que el numero punto flotente no pasa de los 32bits y se envian los 4 bytes en hexadecimal  por el puerto serial para luego recogerlos en el pic, lo estoy intentando guardando los bytes en  un vector o arreglo para poder unirlos e identificarlos en su orden como legan en  con el signo , el exponente y los 23 bytes de la mantisa.

El problema radica en que si utilizo las instrucciones mencionadas anteriormente todo lo que entre por el rs232 lo toma como si fuera caracter ascii que es lo que tengo entendido con esas funciones y necesito reconocerlos como numeros hex.

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Puerto serie y float
« Respuesta #3 en: 25 de Marzo de 2010, 18:27:48 »
Lo que necesitas es reconvertirlos en float , antes de imprimirlos, se me ocurre que hagas esto, tal como los recibes, los buelcas sobre las posiciones de una variable float, que ayas definido previamente , por ejemplo.
Código: [Seleccionar]
float Numero=0;/// definimos la variable a presentar
#LOCATE Numero=00H;/// la alojamos en una dirección definida;
unsigned char A,B,C,D;// estos son los bytes a recibir.
 #asm /// lo ago en ensablador porque en C no se
movlw A;// volcamos los valores en la posicion de memoria del float
movwf 03H;
movlw B;
movwf 02H;
movlw C;
movwf 01H;
movlw D;
movwf 00H;///// recordemos que es litle endian
#endasm

y despues ya lo presentas de forma normal.

en cuanto a lo del valor enviado, depende de la aplicación. si tu envías el valor en exadecimal. lo recibe así, pero si el programa solo envía ascii, no podrás recibirlo. pues te enviara lo que quiera.

Si he dicho muchas tonterias lo siento, yo solo quiero ayudar.
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Puerto serie y float
« Respuesta #4 en: 25 de Marzo de 2010, 18:30:04 »
También puedes leer esto aver si te ayuda.
http://www.todopic.com.ar/foros/index.php?topic=23144.0
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.