8051中的二进制到BCD转换

在这个问题中,我们将看到如何将8位二进制数转换为其等效的BCD。二进制数存储在位置20H。转换后,结果将存储在30H和31H中。30H将保持MS部分,而31H将保持LS部分。 

因此,让我们假设数据为D5H。程序将D5H的二进制值转换为BCD值213D。

地址






20小时
D5
21小时












程序

MOVR1,#20H;Takethe address 20H into R1
MOVA,@R1;Takethe data into Acc
MOVB,#0AH;LoadB with AH = 10D
DIVAB ;DivideA with B
MOVR5,B;Storethe remainder
MOVB,#0AH;LoadB with AH = 10D
DIVAB ;DivideA with B
MOVR1,#30H;Loaddestination address
MOV@R1,A;Storethe MS portion
MOVA,B;LoadB content to A
SWAPA;Swapthe nibbles
ADDA,R5;Addstored remainder with A
INCR1;Increasethe address
MOV@R1,A
HALT:   SJMPHALT

在这里,我们只是将二进制数带入累加器。然后将累加器的内容除以0AH(10D)。因此,其余部分存储在单独的寄存器中。这将在以后添加。然后再次将商除以0AH,并生成MS位。在存储完MS位之后,将数字从寄存器B获取到累加器。交换累加器的半字节以在LSbit产生四个零。然后添加先前存储的余数以生成结果。

输出结果

地址






20小时
D5
21小时







30小时
02
31小时
13