8051 中的二进制到 BCD 转换
在这个问题中,我们将学习如何将一个 8 位二进制数转换为其等值的 BCD 数。二进制数存储在位置 20H 处。转换完成后,结果将存储在 30H 和 31H 处。30H 处保存 MS 部分,31H 处保存 LS 部分。
因此,我们假设数据是 D5H。程序将 D5H 的二进制值转换为 BCD 值 213D。
地址 | 值 |
---|---|
. . . | |
20H | D5 |
21H | |
. . . |
程序
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 中的数字获取到累加器中。交换累加器的半字节以在 LS 位生成四个零。然后将先前存储的余数相加以生成结果。
输出
地址 | 值 |
---|---|
. . . | |
20H | D5 |
21H | |
. . . | |
30H | 02 |
31H | 13 |
. . . |
广告