8051中的十六进制到ASCII转换


现在我们将学习如何使用8051将十六进制数转换为其ASCII等效值。此程序可以将0-9和A-F转换为其ASCII值。

我们知道00H的ASCII码是30H(48D),09H的ASCII码是39H(57D)。所以所有其他数字都在30H到39H的范围内。0AH的ASCII值是41H(65D),0FH的ASCII值是46H(70D),所以所有其他字母(B、C、D、E)都在41H到46H的范围内。

这里我们在内存位置20H提供十六进制数字,ASCII等效值存储在位置30H。

地址



.
.
.
20H
0EH
21H








.
.
.


程序

MOVR0,#20H; Initialize the address of the data
MOVA,@R0; Get the data from an address, which is stored in R0
MOVR2,A;Store the content of A into R2
CLRC; Clear the Carry Flag
SUBBA,#0AH;Subtract 0AH from A
JCNUM ; When a carry is present, A is numeric
ADDA,#41H;Add41H for Alphabet
SJMPSTORE; Jump to store the value
NUM:    MOVA,R2; Copy R2 to A
ADDA,#30H; Add 30H with A to get ASCII
STORE:  MOVR0,#30H; Point the destination location
MOV@R0,A; Store A content to the memory location pointed by R0
HALT:   SJMPHALT

十六进制到ASCII转换背后的逻辑非常简单。我们只是检查数字是否在0-9范围内。当数字在这个范围内时,十六进制数字是数字,我们只需简单地加上30H即可得到ASCII值。当数字不在0-9范围内时,数字在A-F范围内,因此在这种情况下,我们将数字转换为41H及以后。

在程序中,首先,我们清除进位标志。然后从给定的数字中减去0AH。如果值是数字,则减法后的结果将为负数,因此进位标志将被设置。现在通过检查进位状态,我们可以简单地将30H与该值相加以获得ASCII值。

另一方面,当减法的结果为正数或0时,我们将41H与减法的结果相加。

输出

地址



.
.
.
20H
0EH
21H




.
.
.
30H
45H
31H




.
.
.

更新于:2020年6月27日

5K+ 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告