Angka di dalam mikrokontroler biasa tidak memiliki titik desimal sama sekali. Mereka adalah bilangan bulat biner. Tidak ada desimal yang terjadi di dalam mesin. Compiler atau assembler memungkinkan Anda menentukan konstanta seperti itu, tetapi konstanta tersebut dikonversi ke biner sebelum mesin melihatnya.
Namun, Anda dapat memutuskan unit apa pun yang Anda suka untuk nilai integer. Misalnya, Anda ingin mewakili dolar di dalam mikro. Secara alami tidak bisa menghasilkan $ 3,21, tetapi bisa menghasilkan 321 sen. Mikro hanya beroperasi pada nilai 321, tetapi Anda tahu bahwa itu mewakili unit 1/100 dolar.
Itu hanya satu contoh untuk menggambarkan konsep unit sewenang-wenang. Seringkali angka diwakili dengan beberapa bit fraksi biner. Itu sama dengan mengatakan setiap hitungan mewakili nilai 2 -N , di mana N adalah jumlah bit fraksi. Representasi ini disebut "titik tetap". Anda memutuskan di muka berapa resolusi yang Anda butuhkan, dan berpura-pura ada cukup bit di sebelah kanan titik biner yang dibayangkan untuk mendukung resolusi itu. Sebagai contoh, katakanlah Anda perlu mewakili sesuatu untuk setidaknya resolusi 1/100. Dalam hal ini Anda akan menggunakan setidaknya 7 bit pecahan sejak 2 7 = 128. Itu sebenarnya akan memberi Anda resolusi 1/128.
Mesin tidak tahu ini sedang terjadi. Ini akan menambah dan mengurangi angka-angka ini sebagai bilangan bulat biasa, tetapi semuanya masih berhasil. Ini menjadi sedikit rumit ketika Anda mengalikan dan membagi nilai titik tetap. Produk dari dua nilai titik tetap dengan bit pecahan N akan memiliki bit pecahan 2N. Kadang-kadang Anda hanya melacak fakta bahwa nomor baru memiliki bit pecahan 2N, atau kadang-kadang Anda mungkin menggesernya dengan N bit untuk kembali ke representasi yang sama seperti sebelumnya.
Floating point adalah hal yang sama, tetapi jumlah bit fraksi disimpan bersama dengan bagian integer sehingga penyesuaian ini dapat dilakukan saat runtime. Melakukan operasi matematika pada angka floating point dapat mengambil banyak siklus. Perangkat keras Floating point melakukan semua ini untuk Anda sehingga operasi selesai dengan cepat. Namun, manipulasi yang sama dapat dilakukan dalam perangkat lunak juga. Tidak ada alasan Anda tidak dapat menulis subrutin untuk menambahkan dua angka floating point, hanya saja itu akan memakan waktu lebih lama daripada perangkat keras khusus yang melakukan hal yang sama.
Saya telah mendefinisikan format floating point 3-byte untuk PIC 8 bit dan menulis banyak rutin untuk memanipulasi mereka. Mikrokontroler biasanya berurusan dengan nilai dunia nyata dengan presisi 10 atau 12 bit paling banyak. Format floating point saya menggunakan 16 bit presisi, yang cukup baik untuk beberapa perhitungan menengah.
Saya juga memiliki format 32-bit untuk PIC 16 bit. Ini menggunakan satu kata 16-bit untuk mantissa, yang mempercepat perhitungan karena PIC ini dapat beroperasi pada 16 bit pada suatu waktu.
Rutinitas ini termasuk dalam rilis Alat Pengembangan PIC saya . Setelah instalasi, lihat file dengan "fp24" di namanya di direktori SOURCE> PIC, dan "fp32f" di direktori SOURCE> DSPIC.