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 | |
. . . |
廣告