Autor Tema: [SOLUCIONADO] Problemas con Operaciones usando Punto Flotante XC8  (Leído 1425 veces)

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

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Hola amigos de TodoPIC, pues bien, me he dado a la tarea de [intentar] migrar a el compilador XC8 y dejar ya lo mas lejor posible el CCS, aunque el camino ha sido dificil (y aun lo es  :lol: ) he dado mis primeros pasos  :-), pero bueeeno, ahora estoy haciendome unas pequeñas funciones para trabajar la comunicacion rs232 con el 16f628a y ya he logrado la RX-TX pero ahora quiero hacer mis funciones mas dinamicas, por ejemplo, la que configura la precarga del registro SPBRG, mi idea es implementar la formula que hay en el datasheet en codigo para asi no tener que hacer yo el calculo siempre (medio flojo uno  :D ), pero veo que tengo problemas con las operaciones con punto flotante, y no se si lo ando haciendo mal o hay algun problema con el compilador, he leido por ahi problemas con printf y sprintf (este ultimo lo he comprobado por mi mismo, una lastima) pero no se si sea un bug lo que me acarrea mi problema o una real tonteria (espero sea esto ultimo  :lol: ), el codigo que he implementado es el siguiente:

Código: [Seleccionar]
#define _XTAL_FREQ 4000000
#define RS232_BAUD 9600

....
SPBRG = (char) ( (_XTAL_FREQ/(16*RS232_BAUD)) -1); //Despejado de la formula: Baud Rate = FOSC/(16(X+1))
....

el resultado (a duras penas puedo depurar por el detalle del mplabx y el .cof), puedo ver que SPBRG  carga con 176 cuando la operacion deberia arrojar 25, lo he probado con Code::Blocks para ver si tenia algun detalle de casting pero ha dado el resultado correcto (25), espero alguien pueda ayudarme, saludos y gracias de antemano   :-/ .

« Última modificación: 03 de Marzo de 2013, 17:44:38 por man3s »

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Re: Problemas con Operaciones usando Punto Flotante XC8
« Respuesta #1 en: 03 de Marzo de 2013, 17:44:16 »
Me auto contesto  :lol:, leyendo un poco mas he dado con la "solucion", o almenos funciona :D , he tenido que forzar la conversion de la siguiente manera:

    SPBRG = (unsigned char)( ((_XTAL_FREQ*1.0)/(16.0*(RS232_BAUD)*1.0)) -1); //Baud Rate = FOSC/(16(X+1))

y parece va bien, si algun MOD desea borrrar este tema se los agradeceria  :oops:, mil disculpas y saludos  :mrgreen: .