📄 hexbcd.asm
字号:
;;--------------------------------------------------------------------------
;功能:1字节十进制转换1字节二进制 00~99
;入口:temp1
;出口:temp1
;--------------------------------------------------------------------------
BCD_To_Hex:
MOV temp2,temp1
SWAP temp2
ANDI temp2,0b00001111
LDI temp3,10
MUL temp2,temp3
ANDI temp1,0b00001111
ADD temp1,r0
RET
;--------------------------------------------------------------------------
;功能:1字节二进制转换1字节十进制 00~99
;入口:temp1
;出口:temp1
;--------------------------------------------------------------------------
Hex_To_BCD:
RCALL hex_To_BCD3 ;1字节二进制转换3字节十进制 temp1-->temp4/3/2
MOV temp1,temp3
SWAP temp1
OR temp1,temp2
RET
;--------------------------------------------------------------------------
;功能:1字节二进制转换2字节十进制 00~99
;入口:temp1
;出口:temp2/temp1
;--------------------------------------------------------------------------
hex_To_BCD2:
RCALL hex_To_BCD3 ;1字节二进制转换3字节十进制 temp1-->temp4/3/2
MOV temp1,temp2
MOV temp2,temp3
RET
;--------------------------------------------------------------------------
;功能:1字节二进制转换3字节十进制 000~255
;入口:temp1
;出口:temp4/temp3/temp2
;--------------------------------------------------------------------------
hex_To_BCD3:
CLR temp2 ;BCD清零
CLR temp3
CLR temp4
hex_To_BCD3_Loop:
CPI temp1,100 ;待转换数 与100比较
BRCS hex_To_BCD3_Less ;<,跳
INC temp4 ;>=,百位数+1
SUBI temp1,100 ;待转换数减100
RJMP hex_To_BCD3_Loop
hex_To_BCD3_Less: ;<100, 与10比较
CPI temp1,10
BRCS hex_To_BCD3_End ;<,跳
INC temp3 ;>=,十位数+1
SUBI temp1,10 ;待转换数减10
RJMP hex_To_BCD3_Less
hex_To_BCD3_End:
MOV temp2,temp1 ;加 个位数
RET
;--------------------------------------------------------------------------
;功能:2字节二进制转换2字节十进制 000~9999
;入口:temp2/temp1
;出口:temp4/temp3
;--------------------------------------------------------------------------
Hex2_To_BCD2:
LDI temp6,16 ;初始化 循环计数
CLR temp4 ;清结果
CLR temp3
Hex2_BCD2_1:
LSL temp1 ;移位 输入值
ROL temp2 ;移位入所有值
ROL temp3
ROL temp4
DEC temp6 ;循环计数-1
BRNE Hex2_BCD2_2 ;not=0 转
RET
Hex2_BCD2_2:
MOV temp5,temp4 ;取数
SUBI temp5,-$03 ;加0x03
SBRC temp5,3 ;位3=0 跳行
MOV temp4,temp5 ;值 存回
MOV temp5,temp4 ;取数
SUBI temp5,-$30 ;加0x30
SBRC temp5,7 ;位7=0 跳行
MOV temp4,temp5 ;值 存回
;------------
MOV temp5,temp3 ;取数
SUBI temp5,-$03 ;加0x03
SBRC temp5,3 ;位3=0 跳行
MOV temp3,temp5 ;值 存回
MOV temp5,temp3 ;取数
SUBI temp5,-$30 ;加0x30
SBRC temp5,7 ;位7=0 跳行
MOV temp3,temp5 ;值 存回
RJMP Hex2_BCD2_1
;--------------------------------------------------------------------------
;功能:2字节二进制转换4字节十进制 000~9999
;入口:temp2/temp1
;出口:temp6/temp5/temp4/temp3
;--------------------------------------------------------------------------
Hex2_To_BCD4:
RCALL Hex2_To_BCD2 ;2字节二进制转换2字节十进制
MOV temp6,temp4
SWAP temp6
ANDI temp6,0b00001111
MOV temp5,temp4
ANDI temp5,0b00001111
MOV temp4,temp3
SWAP temp4
ANDI temp4,0b00001111
ANDI temp3,0b00001111
RET
;--------------------------------------------------------------------------
;功能: 16进制转为显示字符
;入口:temp1
;出口:temp1
;--------------------------------------------------------------------------
Hex_To_Symbol:
LDI ZH,HIGH(Hex_Symbol_Tab*2)
LDI ZL,LOW(Hex_Symbol_Tab*2)
ADD ZL,temp1
ADC ZH,R_Value0 ;置00H寄存器
LPM temp1,Z+
RET
Hex_Symbol_Tab:
.DB K_0,K_1,K_2,K_3,K_4,K_5,K_6,K_7,K_8,K_9,K_CapA,K_CapB,K_CapC,K_CapD,K_CapE,K_CapF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -