在8051中将十六进制转换为ASCII

现在,我们将看到如何使用8051将十六进制数转换为其等效的ASCII。此程序可以将0-9和AF转换为其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。

地址






20小时
0EH
21小时












程序

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。

输出结果

地址






20小时
0EH
21小时







30小时
45小时
31小时