Я бы определенно не использовал ничего с плавающей запятой на PIC. И я бы не стал использовать какие-либо подразделения. Сколько раз вы видели отправку не-ascii символа на ЖК-дисплей? Можете ли вы сохранить его в памяти ЖК-дисплея, а затем вызвать его по позиции памяти?
Вот как выглядит деление на 10 в моем коде, обратите внимание на 17 циклов, которые необходимо выполнить. Подумайте, сколько времени это займет, и убедитесь, что больше ничего не ждет от этого.
61: q = d2 / 10;
01520 90482E mov.b [0x001c+10],0x0000
01522 FB8000 ze 0x0000,0x0000
01524 2000A2 mov.w #0xa,0x0004
01526 090011 repeat #17
01528 D88002 div.uw 0x0000,0x0004
0152A 984F00 mov.b 0x0000,[0x001c+8]
Если вы делаете что-либо с плавающей запятой в своем коде, посмотрите в памяти программы после того, как вы скомпилировали ее, на вкладке Символические (чтобы вы могли ее прочитать) и найдите код с плавающей запятой, который потребуется включен. Вы найдете его в верхней части (в зависимости от вашего кода), вскоре (иш) после метки _reset.
Шахта начинается со строки 223 и адреса памяти 001BC с _ floatsisf, продолжается через несколько дополнительных меток (_fpack, _divsf3 и т. Д.) И заканчивается _funpack, последней строкой 535 и адресом памяти 0042C. Если вы можете обработать (42C-1BC = 0x270 =) 624 байта потерянного места в программе, это здорово, но некоторые чипы имеют всего 2 КБ, и это не вариант.
Вместо плавающей запятой, если это возможно, попробуйте использовать арифметику с фиксированной запятой в базе 2.
Поскольку вы не можете сослаться на все байтовые массивы на вашем ЖК-дисплее, вы проверили, чтобы убедиться, что вы не пытаетесь отправить нулевой (это точный адрес), но он остановлен проверкой кода для конец строки ascii? (это случилось со мной раньше).