Los números dentro de los microcontroladores típicos no tienen puntos decimales en absoluto. Son enteros binarios. No hay ningún decimal dentro de la máquina. El compilador o el ensamblador pueden permitirle especificar constantes de esa manera, pero se convierten a binarios antes de que la máquina los vea.
Sin embargo, puede decidir las unidades que desee para los valores enteros. Por ejemplo, suponga que quiere representar dólares dentro de un micro. No puede hacer $ 3.21 de forma nativa, pero podría hacer 321 centavos. El micro solo está operando en el valor 321, pero usted sabe que representa unidades de 1/100 dólares.
Este es solo un ejemplo para ilustrar el concepto de unidades arbitrarias. A menudo los números se representan con varios bits de fracción binarios. Es lo mismo que decir que cada cuenta representa un valor de 2 -N , donde N es el número de bits de fracción. Esta representación se llama "punto fijo". Usted decide de antemano la cantidad de resolución que necesita y pretende que hay suficientes bits a la derecha del punto binario imaginado para admitir esa resolución. Por ejemplo, digamos que necesita representar algo con al menos una resolución de 1/100. En ese caso, utilizarías al menos 7 bits de fracción desde 2 7 = 128. Eso te dará una resolución de 1/128.
La máquina no tiene idea de que esto está sucediendo. Sumará y restará estos números como enteros ordinarios, pero todo seguirá funcionando. Se vuelve un poco complicado cuando multiplicas y divides valores de puntos fijos. El producto de dos valores de punto fijo con bits de fracción N tendrá 2 bits de fracción. A veces, simplemente hace un seguimiento del hecho de que el nuevo número tiene bits de fracción 2N, o a veces puede cambiarlo en N bits para volver a la misma representación que antes.
El punto flotante es lo mismo, pero el número de bits de fracción se almacena junto con la parte entera para que este ajuste se pueda hacer en tiempo de ejecución. Realizar operaciones matemáticas en números de punto flotante puede llevar muchos ciclos. El hardware de punto flotante hace todo esto por usted para que las operaciones se completen rápidamente. Sin embargo, las mismas manipulaciones se pueden realizar en el software también. No hay ninguna razón por la que no pueda escribir una subrutina para agregar dos números de punto flotante, solo que tomaría mucho más tiempo que el hardware dedicado haciendo lo mismo.
He definido un formato de punto flotante de 3 bytes para PIC de 8 bits y he escrito un montón de rutinas para manipularlos. Los microcontroladores generalmente tratan con valores del mundo real con una precisión de 10 o 12 bits como máximo. Mi formato de punto flotante utiliza 16 bits de precisión, lo cual es suficiente para varios cálculos intermedios.
También tengo un formato de 32 bits para los PIC de 16 bits. Esto utiliza una palabra de 16 bits para la mantisa, que acelera los cálculos, ya que estos PIC pueden operar en 16 bits a la vez.
Estas rutinas se incluyen en mi versión de PIC Development Tools . Después de la instalación, mire los archivos con "fp24" en su nombre en FUENTE > Directorio PIC y "fp32f" en la FUENTE > Directorio DSPIC.