Программа умножения на десять
Программа умножения на десять на ассемблере для PIC контроллеров
В процессе разработки программ для микроконтроллеров иногда требуется подпрограмма умножения на десять.
Например, в программе термометра-термостата для инкубатора необходима возможность изменения гистерезиса между температурой включения и выключения нагревателя с точностью одной десятой градуса. В данном случае придется складывать числа с запятой и одним разрядом в дробной части. Например, 37,0 градусов плюс гистерезис 0,3 градуса. Чтобы избежать трудностей в написании программы сложения десятичных дробных чисел, проще избавиться от дроби, умножив слагаемые на десять. В результате мы получим целые числа, с которыми намного проще работать, а после вывода результирующей суммы на индикатор, если это необходимо, запятую засветить в нужном месте.
Для примера в подпрограмме я взял число двести тринадцать и его надо будет умножить на десять 213 • 10 = 2130. В ассемблере нет инструкции для непосредственного перемножения чисел, поэтому нам придется программным способом число 213 десять раз сложить. Т.е. 213+213+213+213+213+213+213+213+213+213+213=2130.
Исходный текст программы дан с необходимыми комментариями. Для умножения можно использовать и другие числа, но их произведение должно быть не более двух байтового числа, т.е. в десятичной системе счисления это 65 535. Ниже приводится скриншот, где можно увидеть результирующие числа в регистрах произведения T_H и T_L.
C помощью этой программы можно возводить в квадрат числа от двух до двести пятидесяти пяти. Перед исполнением программы запишите необходимые числа в регистры Т и Mnojitel.
Полный проект программы умножения на десять в среде разработки MPLAB IDE v7.11 можно скачать здесь.
2 комментария к “Программа умножения на десять”
Даже если делать таким извращенным способом, то проще сначала сдвинуть умножаемое на 10 число влево 3 раза (то же самое, что умножить на 8) и потом прибавить его еще 2 раза. Скорость выполнения увеличится раза в 3-4. Можно сдвинуть один раз (2*х), запомнить, сдвинуть еще 2 раза (8*х) и сложить с запомненным (2*х+8*х=10*х). Даже цикл не нужен. Дарю.
Спасибо, Сергей. Меня попросили программу умножения на десять с последующим использование ее и для других чисел, я ее предоставил. А на счет извращения, так это больше подходит для голубых и прочих.