二进制数大于累加器大小到十进制字符

时间:2015-06-05 06:02:24

标签: binary decimal microcontroller

如何将大于累加器大小的二进制数转换为人类可读的十进制字符。例如,我有一个8位微控制器,我需要在LCD显示器上以十进制形式显示一个16位数字。由于数量大于累加器大小,因此无法重复除法。为此目的获得通用算法(和链接)将非常有用。

1 个答案:

答案 0 :(得分:1)

提及累加器只能意味着您正在寻找汇编语言解决方案。但是,你没有提到具体的汇编语言,所以我给你一般指导。

有几种方法可以解决这个问题,但下面的方法是最常用的解决方案,可以扩展到任何字节大小的数字。

您需要一些除法运算,至少需要一个16位被除数和一个8位除数。如果您的硬件没有提供硬件,您可以使用旧的移位和减法方法编写等效的软件。

将二进制转换为十进制ASCII表示的步骤如下:

  1. 以余数为零开始。 (在每一步中,你的除数总是10,因为这是你的目标数字基数。)

  2. 将当前余数(最初为零)与要转换的“long”数字的下一个字节(从MSB到LSB)连接起来。这个16位值是您目前的红利。

  3. 将步骤2的16位被除数除以10.将商保存在原始数字上。

  4. 将指针Bump到下一个字节并循环回到步骤2,直到所有字节都被分割。

  5. 最后的余数是您最右边的结果数字。 (结果将从右到左形成,因此您需要在结尾处颠倒顺序。将每个结果数字保留在堆栈中会使这非常简单。)

  6. 将ASCII字符'0'的值添加到最终余数中,以将其转换为ASCII。

  7. 保存ASCII数字(最好在堆栈上,使反转更简单)。

  8. 循环回到步骤1,直到您的原始号码变为零。

  9. 如果使用堆栈来保存结果,请确保首先在其上按一下零作为标志,以便停止从中拉出/弹出结果。

    对于16位数字,另一种“原始”方法是从数字中重复减去10000,1000,100,10,直到数字对于另一个减法来说太小,同时跟踪数字的数量。每个数字的减法。这些计数器将形成十进制等效值,然后您需要通过在每个数字上添加“0”来转换为ASCII。随着字节大小的增加,此方法无法很好地扩展。

    希望这有帮助。