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

📄 bcd2bin.asm

📁 PIC单片机开发的功能函数:加减乘除转换
💻 ASM
字号:
;             5位BCD数转化为16位BIN数
;************************************************************************
;               BCD To Binary Conversion
;
;       This routine converts a 5 digit BCD number to a 16 bit binary
; number.
;       The input 5 digit BCD numbers are asumed to be in locations
; R0, R1 & R2 with R0 containing the MSD in its right most nibble.
;
;       The 16 bit binary number is output in registers H_byte & L_byte
; ( high byte & low byte repectively ).
;
;       The method used for conversion is :
;               input number X = abcde ( the 5 digit BCD number )
;               X = abcde = 10[10[10[10a+b]+c]+d]+e
;
;   Performance :
;               Program Memory  :       30
;               Clock Cycles    :       121
;
;*******************************************************************;
;
H_byte  equ     10
L_byte  equ     11
R0      equ     12              ; RAM Assignments
R1      equ     13
R2      equ     14
;
H_temp  equ     15      ; temporary register
L_temp  equ     16      ; temporary register
;
;其它寄存器自己定义;
;
mpy10b  
andlw   0F
	addwf   L_byte
	btfsc   STATUS,CARRY
	incf    H_byte
mpy10a 
 bcf     STATUS,CARRY    ; multiply by 2
	 rlf     L_byte,w
	 movwf   L_temp
	 rlf     H_byte,w        ; (H_temp,L_temp) = 2*N
	 movwf   H_temp
;
	bcf     STATUS,CARRY    ; multiply by 2
	rlf     L_byte
	rlf     H_byte
	bcf     STATUS,CARRY    ; multiply by 2
	rlf     L_byte
	rlf     H_byte
	bcf     STATUS,CARRY    ; multiply by 2
	rlf     L_byte
	rlf     H_byte          ; (H_byte,L_byte) = 8*N
;
	movf    L_temp,w
	addwf   L_byte
	btfsc   STATUS,CARRY
	incf    H_byte
	movf    H_temp,w
	addwf   H_byte
	retlw   0               ; (H_byte,L_byte) = 10*N
;
;
BCDtoB
  clrf    H_byte
	movf    R0,w
	andlw   0F
	movwf   L_byte
	call    mpy10a          ; result = 10a+b
;
	swapf   R1,w
	call    mpy10b          ; result = 10[10a+b]
;
	movf    R1,w
	call    mpy10b          ; result = 10[10[10a+b]+c]
;
	swapf   R2,w
	call    mpy10b          ; result = 10[10[10[10a+b]+c]+d]
;
	movf    R2,w
	andlw   0F
	addwf   L_byte
	btfsc   STATUS,CARRY
	incf    H_byte          ; result = 10[10[10[10a+b]+c]+d]+e
	retlw   0               ; BCD to binary conversion done
;
;
;********************************************************************
;           测试程序(注意用法,结果保存在H_byte,L_byte里)
;*********************************************************************
main 
  movlw   06
	movwf   R0      ; Set R0 = 06
	movlw   55
	movwf   R1      ; Set R1 = 55
	movlw   35
	movwf   R2      ; Set R2 = 35      ( R0, R1, R2 = 6,55,35 )
;
	call    BCDtoB  ; After conversion H_Byte = FF & L_Byte = FF
;
self    goto    self   ;如不是测试程序,本句无用
;
	org     1FF
	goto    main
;
	END



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -