⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hexdec-lcd.a51modif.asm

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 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 + -