Các số bên trong bộ vi điều khiển thông thường hoàn toàn không có dấu thập phân. Chúng là số nguyên nhị phân. Không có số thập phân đang diễn ra bên trong máy. Trình biên dịch hoặc trình biên dịch có thể cho phép bạn chỉ định các hằng số theo cách đó, nhưng chúng được chuyển đổi thành nhị phân trước khi máy nhìn thấy chúng.
Tuy nhiên, bạn có thể quyết định bất kỳ đơn vị nào bạn thích cho các giá trị số nguyên. Ví dụ: giả sử bạn muốn đại diện cho đô la trong một vi mô. Nó thực sự không thể làm $ 3,21, nhưng nó có thể làm được 321 xu. Micro chỉ hoạt động trên giá trị 321, nhưng bạn biết rằng nó đại diện cho các đơn vị 1/100 đô la.
Đó chỉ là một ví dụ để minh họa khái niệm các đơn vị tùy ý. Thông thường các số được biểu diễn với một số bit phân số nhị phân. Điều đó giống như nói mỗi số đếm đại diện cho một giá trị 2 -N , trong đó N là số bit phân số. Đại diện này được gọi là "điểm cố định". Bạn quyết định trước mức độ phân giải bạn cần và giả vờ có đủ bit ở bên phải của điểm nhị phân tưởng tượng để hỗ trợ độ phân giải đó. Ví dụ: giả sử bạn cần đại diện cho một cái gì đó với độ phân giải ít nhất là 1/100. Trong trường hợp đó, bạn sẽ sử dụng ít nhất 7 bit phân số kể từ 2 7 = 128. Điều đó thực sự sẽ cung cấp cho bạn độ phân giải 1/128.
Máy không có ý tưởng này đang xảy ra. Nó sẽ cộng và trừ các số này dưới dạng số nguyên thông thường, nhưng mọi thứ vẫn hoạt động. Sẽ có một chút khó khăn khi bạn nhân và chia các giá trị điểm cố định. Tích của hai giá trị điểm cố định với các bit phân số N sẽ có các bit phân số 2N. Đôi khi bạn chỉ cần theo dõi thực tế là số mới có các bit phân số 2N hoặc đôi khi bạn có thể dịch chuyển nó đúng theo N bit để quay lại biểu diễn giống như trước.
Điểm nổi là điều tương tự, nhưng số lượng bit phân số được lưu trữ cùng với phần nguyên để điều chỉnh này có thể được thực hiện khi chạy. Thực hiện các phép toán trên các số dấu phẩy động có thể mất một loạt các chu kỳ. Phần cứng dấu phẩy động làm tất cả điều này cho bạn để các hoạt động hoàn thành nhanh chóng. Tuy nhiên, các thao tác tương tự cũng có thể được thực hiện trong phần mềm. Không có lý do gì bạn không thể viết chương trình con để thêm hai số dấu phẩy động, chỉ là nó sẽ mất nhiều thời gian hơn so với phần cứng chuyên dụng làm cùng một việc.
Tôi đã định nghĩa một định dạng dấu phẩy động 3 byte cho PIC 8 bit và viết một loạt các thói quen để thao tác chúng. Vi điều khiển thường xử lý các giá trị trong thế giới thực với độ chính xác tối đa 10 hoặc 12 bit. Định dạng dấu phẩy động của tôi sử dụng 16 bit chính xác, đủ tốt cho một số tính toán trung gian.
Tôi cũng có định dạng 32 bit cho PIC 16 bit. Điều này sử dụng một từ 16 bit cho mantissa, giúp tăng tốc các phép tính vì các PIC này có thể hoạt động trên 16 bit cùng một lúc.
Những thói quen này được bao gồm trong bản phát hành Công cụ phát triển PIC của tôi . Sau khi cài đặt, hãy xem các tệp có "fp24" trong tên của chúng trong thư mục SOURCE> PIC và "fp32f" trong thư mục SOURCE> DSPIC.