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


.
.
.

更新于: 27-Jun-2020

3K+ 浏览量

开启您的职业生涯

通过完成课程获得认证

开始
广告