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

📄 math2.asm

📁 用PIC单片机18F6520+ADE7755实现的一个大安培、锂离子电池的化程器。全部源码
💻 ASM
字号:

;**********************************************************************************************
; 32/16 Bit Unsigned Fixed Point Divide 32/16 -> 32.16
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 16 bit unsigned fixed point divisor in BARGB0, BARGB1
; Use: CALL FXD3216U
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1,AARGB2,AARGB3
; 16 bit unsigned fixed point remainder in REMB0, REMB1
; Result: AARG, REM <-- AARG / BARG
; Max Timing: 2+699+2 = 703 clks
; Max Timing: 2+663+2 = 667 clks
; PM: 2+240+1 = 243 DM: 9

;AARG = BARG × QUOTIENT + REMAINDER,

UDIV3216L macro
; Max Timing: 16+6*22+21+21+6*22+21+21+6*22+21+21+6*22+21+8 = 699 clks
; Min Timing: 16+6*21+20+20+6*21+20+20+6*21+20+20+6*21+20+3 = 663 clks
; PM: 240 DM: 9
		CLRF 	TEMP
		RLF 	AARGB0,W
		RLF 	REMB1,F
		MOVF 	BARGB1,W
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		RLF 	AARGB0,F
		MOVLW 	7
		MOVWF 	LOOPCOUNT
LOOPU3216A:	RLF 	AARGB0,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB0,LSB
		GOTO 	UADD26LA
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26LA
UADD26LA:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26LA:	RLF 	AARGB0,F
		DECFSZ 	LOOPCOUNT,F
		GOTO 	LOOPU3216A
		RLF 	AARGB1,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB0,LSB
		GOTO 	UADD26L8
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26L8
UADD26L8:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26L8:	RLF 	AARGB1,F
		MOVLW 	7
		MOVWF 	LOOPCOUNT
LOOPU3216B:	RLF 	AARGB1,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB1,LSB
		GOTO 	UADD26LB
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26LB
UADD26LB:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26LB:	RLF 	AARGB1,F
		DECFSZ 	LOOPCOUNT,F
		GOTO 	LOOPU3216B
		RLF 	AARGB2,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB1,LSB
		GOTO 	UADD26L16
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26L16
UADD26L16:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26L16:	RLF 	AARGB2,F
		MOVLW 	7
		MOVWF	LOOPCOUNT
LOOPU3216C:	RLF 	AARGB2,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB2,LSB
		GOTO 	UADD26LC
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26LC
UADD26LC:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26LC:	RLF 	AARGB2,F
		DECFSZ 	LOOPCOUNT,F
		GOTO 	LOOPU3216C
		RLF 	AARGB3,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB2,LSB
		GOTO 	UADD26L24
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26L24
UADD26L24:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26L24:	RLF 	AARGB3,F
		MOVLW 	7
		MOVWF 	LOOPCOUNT
LOOPU3216D:	RLF 	AARGB3,W
		RLF 	REMB1,F
		RLF 	REMB0,F
		RLF 	TEMP,F
		MOVF 	BARGB1,W
		BTFSS 	AARGB3,LSB
		GOTO 	UADD26LD
		SUBWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSS 	STATUS,C
		INCFSZ 	BARGB0,W
		SUBWF 	REMB0,F
		CLRW
		BTFSS 	STATUS,C
		MOVLW 	1
		SUBWF 	TEMP,F
		GOTO 	UOK26LD
UADD26LD:	ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
		CLRW
		BTFSC 	STATUS,C
		MOVLW 	1
		ADDWF 	TEMP,F
UOK26LD:	RLF 	AARGB3,F
		DECFSZ 	LOOPCOUNT,F
		GOTO 	LOOPU3216D
		BTFSC 	AARGB3,LSB
		GOTO 	UOK26L
		MOVF 	BARGB1,W
		ADDWF 	REMB1,F
		MOVF 	BARGB0,W
		BTFSC 	STATUS,C
		INCFSZ 	BARGB0,W
		ADDWF 	REMB0,F
UOK26L:
		endm
FXD3216U:	CLRF	REMB0
		CLRF	REMB1
		UDIV3216L
		RETLW	TRUE


;**********************************************************************************************
; 32x16 Bit Signed Fixed Point Multiply 32x16 -> 32
; Input: 32 bit signed fixed point multiplicand in AARGB0,1,2,3
; 16 bit signed fixed point multiplier in BARGB0
; Use: CALL FXM3216S
; Output: 32 bit signed fixed point product in AARGB0,1,2,3,4,5
; Result: AARG <-- AARG x BARG
; 3个字节X12bit<=4个字节
; Max Timing: 13+393+2 = 408 clks B > 0
; 28+393+2 = 423 clks B < 0

; Min Timing: 13+98 = 111 clks
; PM: 18+79+1 = 98 DM: 9

;TABLE 2: DATA RAM REQUIREMENTS
;AARGB5
;AARGB4
;AARGB3
;AARGB2
;AARGB1
;AARGB0 AARG MSB
SIGN 		set	I		;sign
;BARGB1
;BARGB0 BARG MSB

AARGB5 		set	(BFIIC+8)	;= REMB1
AARGB4 		set	(BFIIC+9)	;= REMB0 remainder MSB
TEMPB3		set	(BFIIC+D'10')
TEMPB2		set	(BFIIC+D'11')
TEMPB1		set	(BFIIC+D'12')	
TEMPB0 		set	(BFIIC+D'13')	;temporary storage
;These definitions are identical with those used by the
;IEEE 754 compliant floating point library[5], AN575.

;**********************************************************************************************
; 32x16 Bit Multiplication Macros
; Max Timing: 2+13+6*26+25+2+6*27+26+7 = 393 clks
; Min Timing: 2+7*6+5+2+6*6+5+6 = 98 clks
; PM: 19+60 = 79 DM: 11

SMUL3216L macro
		MOVLW 	0x8
		MOVWF 	LOOPCOUNT
LOOPSM3216A:
		RRF 	BARGB1,F
		BTFSC	_C
		GOTO 	ALSM3216NA
		DECFSZ 	LOOPCOUNT,F
		GOTO 	LOOPSM3216A
		MOVLW 	0x7
		MOVWF 	LOOPCOUNT
LOOPSM3216B:
		RRF 	BARGB0,F
		BTFSC 	_C
		GOTO 	BLSM3216NA
		DECFSZ 	LOOPCOUNT,F
		GOTO 	LOOPSM3216B
		CLRF 	AARGB0
		CLRF 	AARGB1
		CLRF 	AARGB2
		CLRF 	AARGB3
		RETLW 	0x00
ALOOPSM3216:
		RRF 	BARGB1,F
		BTFSS 	_C
		GOTO 	ALSM3216NA
		MOVF 	TEMPB3,W
		ADDWF 	AARGB3,F
		MOVF 	TEMPB2,W
		BTFSC 	_C
		INCFSZ 	TEMPB2,W
		ADDWF 	AARGB2,F
		MOVF 	TEMPB1,W
		BTFSC 	_C
		INCFSZ 	TEMPB1,W
		ADDWF 	AARGB1,F
		MOVF 	TEMPB0,W
		BTFSC 	_C
		INCFSZ 	TEMPB0,W
		ADDWF 	AARGB0,F
ALSM3216NA:
		RLF 	SIGN,W
		RRF 	AARGB0,F
		RRF 	AARGB1,F
		RRF 	AARGB2,F
		RRF 	AARGB3,F
		RRF 	AARGB4,F
		DECFSZ 	LOOPCOUNT,F
		GOTO 	ALOOPSM3216
		MOVLW 	0x7
		MOVWF 	LOOPCOUNT
BLOOPSM3216:
		RRF 	BARGB0,F
		BTFSS 	_C
		GOTO 	BLSM3216NA
		MOVF 	TEMPB3,W
		ADDWF 	AARGB3,F
		MOVF 	TEMPB2,W
		BTFSC 	_C
		INCFSZ 	TEMPB2,W
		ADDWF 	AARGB2,F
		MOVF 	TEMPB1,W
		BTFSC 	_C
		INCFSZ 	TEMPB1,W
		ADDWF 	AARGB1,F
		MOVF 	TEMPB0,W
		BTFSC 	_C
		INCFSZ 	TEMPB0,W
		ADDWF 	AARGB0,F
BLSM3216NA:
		RLF 	SIGN,W
		RRF 	AARGB0,F
		RRF 	AARGB1,F
		RRF 	AARGB2,F
		RRF 	AARGB3,F
		RRF 	AARGB4,F
		RRF 	AARGB5,F
		DECFSZ 	LOOPCOUNT,F
		GOTO 	BLOOPSM3216
		RLF 	TEMPB0,W
		RRF 	AARGB0,F
		RRF 	AARGB1,F
		RRF 	AARGB2,F
		RRF 	AARGB3,F
		RRF 	AARGB4,F
		RRF 	AARGB5,F
		endm

;**********************************************************************************************
FXM3216S:
		CLRF 	AARGB4 		; clear partial product
		CLRF 	AARGB5
		CLRF 	SIGN
		MOVF 	AARGB0,W
		IORWF 	AARGB1,W
		IORWF 	AARGB2,W
		IORWF 	AARGB3,W
		BTFSC 	_Z
		RETLW 	0x00

		MOVF 	AARGB0,W
		XORWF 	BARGB0,W
		MOVWF 	TEMPB0
		BTFSC 	TEMPB0,MSB
		COMF 	SIGN,F
		BTFSS 	BARGB0,MSB
		GOTO 	M3216SOK
		COMF	BARGB1,F
		COMF 	BARGB0,F
		INCF 	BARGB1,F
		BTFSC 	_Z
		INCF 	BARGB0,F
		COMF 	AARGB3,F
		COMF 	AARGB2,F
		COMF 	AARGB1,F
		COMF 	AARGB0,F
		INCF 	AARGB3,F
		BTFSC 	_Z
		INCF 	AARGB2,F
		BTFSC 	_Z
		INCF 	AARGB1,F
		BTFSC 	_Z
		INCF 	AARGB0,F
		BTFSC 	BARGB0,MSB
		GOTO 	M3216SX
M3216SOK:
		MOVF 	AARGB0,W
		MOVWF 	TEMPB0
		MOVF 	AARGB1,W
		MOVWF 	TEMPB1
		MOVF 	AARGB2,W
		MOVWF 	TEMPB2
		MOVF 	AARGB3,W
		MOVWF 	TEMPB3
		SMUL3216L			;macro
		RETLW 	0x00
M3216SX:
		CLRF 	AARGB4
		CLRF 	AARGB5
		RLF 	SIGN,W
		RRF 	AARGB0,F
		RRF 	AARGB1,F
		RRF 	AARGB2,F
		RRF 	AARGB3,F
		RRF 	AARGB4,F
		RETLW 	0x00
		
		

⌨️ 快捷键说明

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