📄 hexdec-lcd.a51modif.asm
字号:
$MOD51
;---------------------------------------------------------------------------------------
; sistem konversi dari 3 bytes heksa ke desimal 8 digit
; max value : 10000000 <sepuluh juta>
; input R5,R6,R7 (LSB-MSB) --> 3 bytes
; output ASCHII di ram 20h-28h 8 digits
; by: Herlambang Aribowo
; D3 Instrumentasi dan elektronika UNDIP, Semarang, Jawa tengah, Indonesia
; contact : cah_imuth@yahoo.com
; Phone : +6281328828042
;---------------------------------------------------------------------------------------
Hex3DecConv: CLR C
MOV R4,#0 ;bersihkan counter (jutaan)
Hex3DecLoop1: MOV A,R7 ;how many time we can subtract 10000000 (989680H) without carry
SUBB A,#80H
MOV R7,A
MOV A,R6
SUBB A,#96H
MOV R6,A
MOV A,R5
SUBB A,#98H
MOV R5,A
JC Hex3DecSkip1
INC R4
JMP Hex3DecLoop1
Hex3DecSkip1: MOV A,R4
PUSH ACC ;push counter onto stack
MOV A,R7
ADD A,#80H
MOV R7,A
MOV A,R6
ADDC A,#96H
MOV R6,A
MOV A,R5
ADDC A,#98H
MOV R5,A
CLR C
MOV R4,#0
Hex3DecLoop2: MOV A,R7 ;how many times we can subtract 1000000 (F4240H) without carry
SUBB A,#40H
MOV R7,A
MOV A,R6
SUBB A,#42H
MOV R6,A
MOV A,R5
SUBB A,#0FH
MOV R5,A
JC Hex3DecSkip2
INC R4
JMP Hex3DecLoop2
Hex3DecSkip2: MOV A,R4
PUSH ACC ;push counter onto stack
MOV A,R7
ADD A,#40H
MOV R7,A
MOV A,R6
ADDC A,#42H
MOV R6,A
MOV A,R5
ADDC A,#0FH
MOV R5,A
CLR C
MOV R4,#0
Hex3DecLoop3: MOV A,R7 ;100000 (186A0H)?
SUBB A,#0A0H
MOV R7,A
MOV A,R6
SUBB A,#86H
MOV R6,A
MOV A,R5
SUBB A,#01H
MOV R5,A
JC Hex3DecSkip3
INC R4
JMP Hex3DecLoop3
Hex3DecSkip3: MOV A,R4
PUSH ACC ;onto stack
MOV A,R7
ADD A,#0A0H
MOV R7,A
MOV A,R6
ADDC A,#86H
MOV R6,A
MOV A,R5
ADDC A,#01H
MOV R5,A
Hex2DecConv: MOV R4,#0
CLR C
Hex2DecLoop1: MOV A,R7 ;10000 (2710h)?
SUBB A,#010H
MOV R7,A
MOV A,R6
SUBB A,#27H
MOV R6,A
MOV A,R5
SUBB A,#0
MOV R5,A
JC Hex2DecSkip1
INC R4
JMP Hex2DecLoop1
Hex2DecSkip1: MOV A,R4 ;onto stack
PUSH ACC
MOV A,R7
ADD A,#010H
MOV R7,A
MOV A,R6
ADDC A,#27H
MOV R6,A
CLR C
MOV R4,#0
Hex2DecLoop2: MOV A,R7 ;1000 (3E8h)?
SUBB A,#0E8H
MOV R7,A
MOV A,R6
SUBB A,#03H
MOV R6,A
JC Hex2DecSkip2
INC R4
JMP Hex2DecLoop2
Hex2DecSkip2: MOV A,R4 ;onto satck
PUSH ACC
MOV A,R7
ADD A,#0E8H
MOV R7,A
MOV A,R6
ADDC A,#03H
MOV R6,A
CLR C
MOV R4,#0
Hex2DecLoop3: MOV A,R7 ;100 (64h)?
SUBB A,#064H
MOV R7,A
MOV A,R6
SUBB A,#0H
MOV R6,A
JC Hex2DecSkip3
INC R4
JMP Hex2DecLoop3
Hex2DecSkip3: MOV A,R4 ;onto stack
PUSH ACC
MOV A,R7
ADD A,#064H
MOV R7,A
MOV A,R6
ADDC A,#0H
MOV R6,A
CLR C
MOV R4,#0
Hex2DecLoop4: MOV A,R7 ;10 (0Ah)?
SUBB A,#0AH
MOV R7,A
JC Hex2DecSkip4
INC R4
JMP Hex2DecLoop4
Hex2DecSkip4: MOV A,R4 ;onto stack
PUSH ACC
ADD A,#0AH ;1
MOV A,R7 ;tens & ones in w R7
ADD A,#0AH
MOV R7,A
POP ACC
SWAP A
ADD A,R7
MOV R7,A
POP ACC ;thousands & hundreds in R6
MOV R6,A
POP ACC
SWAP A
ADD A,R6
MOV R6,A
POP ACC ;tens thousands & hundreds thousands in R5
MOV R5,A
POP ACC
SWAP A
ADD A,R5
MOV R5,A
POP ACC ;milins & tens milions in R4
MOV R4,A
POP ACC
SWAP A
ADD A,R4
MOV R4,A
RET
;konversi desimal ke ASCHII
;nilai desimal di r4(msb),r5,r6,r7(lsb),hasil terletak di ram buffer 20h-28h
;note:numbers are in correct order after hex2dec conversion routine
;routine mengambil semua nomor desimal (4 bits dari 8 bit register) dan menambahnya dengan 0 ascii code character
;contoh : 15 => '0'+1 -> '1' , '0'+5 -> '5'
Dec2AsciiConv: MOV A,20H
MOV R0,A ;pointer to lcd_1
MOV A,R4
ANL A,#0F0H
SWAP A
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R4
ANL A,#0FH
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R5
ANL A,#0F0H
SWAP A
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R5
ANL A,#0FH
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R6
ANL A,#0F0H
SWAP A
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R6
ANL A,#0FH
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R7
ANL A,#0F0H
SWAP A
ADD A,#'0'
MOV @R0,A
INC R0
MOV A,R7
ANL A,#0FH
ADD A,#'0'
MOV @R0,A
INC R0 ;put the end of string code
MOV A,#0
MOV @R0,A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -