📄 hex2asc.asm
字号:
;**********************************************************************************************
; Hexidecimal to ASCII conversion
;**********************************************************************************************
;Name: hex2asc
;Function: Convert a byte in ASCII code
;Input: W
;Output: digit1(high nibble),digit2(low nibble)
;Comments:
;**********************************************************************************************
hex2asc
MOVWF tx_1 ; W -> tx_1
SWAPF tx_1,W ; Swap tx_1 -> W
ANDLW 0x0F ; Get low nibble
MOVWF tx_0 ; W -> tx_0
MOVLW 0x09 ; 9 -> W
SUBWF tx_0,W ; tx_0 - 9 -> W
BTFSC STATUS,Z ; nibble=9?
GOTO Equal_or_less_9_first ; Yes, jump to Equal_or_less_9_first
BTFSS STATUS,C ; nibble>9?
GOTO Equal_or_less_9_first ; No, jump to to Equal_or_less_9_first
MOVLW 0x37 ;|
ADDWF tx_0,W ; > tx_0 + 0x37 -> digit1
MOVWF digit1 ;|
GOTO second_nibble
Equal_or_less_9_first
MOVLW 0x30 ;|
ADDWF tx_0,W ; > tx_0 + 0x30 -> digit1
MOVWF digit1 ;|
GOTO second_nibble
second_nibble
MOVF tx_1,W ; tx_1 -> W
ANDLW 0x0F ; Get low nibble
MOVWF tx_0 ; W -> tx_0
MOVLW 0x09
SUBWF tx_0,W ; tx_0 - 9->W
BTFSC STATUS,Z ; nibble=9?
GOTO Equal_or_less_9_second ; Yes, jump to Equal_or_less_9_second
BTFSS STATUS,C ; nibble>9?
GOTO Equal_or_less_9_second ; No, jump to to Equal_or_less_9_first
MOVLW 0x37 ;|
ADDWF tx_0,W ; > tx_0 + 0x37 -> digit2
MOVWF digit2 ;|
RETLW 0
Equal_or_less_9_second
MOVLW 0x30 ;|
ADDWF tx_0,W ; > tx_0 + 0x37 -> digit2
MOVWF digit2 ;|
RETLW 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -