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+ 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告