📄 p16math.asm
字号:
;************************************************************************
;* Microchip Technology Inc. 2002 *
;* Assembler version: 2.0000 *
;* Filename: *
;* p16math.asm *
;************************************************************************
list p=16F877a
#include P16F877a.inc
#define _C STATUS,0
MATH_VAR UDATA 0X50
AARGB0 RES 1
AARGB1 RES 1
AARGB5 RES 1
BARGB0 RES 1
BARGB1 RES 1
REMB0 RES 1
REMB1 RES 1
TEMP RES 1
LOOPCOUNT RES 1
GLOBAL AARGB0, AARGB1, BARGB0
PROG2 CODE
;---------------- 8 * 8 UNSIGNED MULTIPLY -----------------------
; Max Timing: 3+12+6*8+7 = 70 clks
; Min Timing: 3+7*6+5+3 = 53 clks
; PM: 19 DM: 4
UMUL0808L
CLRF AARGB1
MOVLW 0x08
MOVWF LOOPCOUNT
MOVF AARGB0,W
LOOPUM0808A
RRF BARGB0, F
BTFSC _C
GOTO LUM0808NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM0808A
CLRF AARGB0
RETLW 0x00
LUM0808NAP
BCF _C
GOTO LUM0808NA
LOOPUM0808
RRF BARGB0, F
BTFSC _C
ADDWF AARGB0, F
LUM0808NA RRF AARGB0, F
RRF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPUM0808
return
GLOBAL UMUL0808L
;---------------- 16/8 UNSIGNED DIVIDE ------------------------
; Max Timing: 2+7*12+11+3+7*24+23 = 291 clks
; Min Timing: 2+7*11+10+3+7*17+16 = 227 clks
; PM: 39 DM: 7
UDIV1608L
GLOBAL UDIV1608L
CLRF REMB0
MOVLW 8
MOVWF LOOPCOUNT
LOOPU1608A RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
SUBWF REMB0, F
BTFSC _C
GOTO UOK68A
ADDWF REMB0, F
BCF _C
UOK68A RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1608A
CLRF TEMP
MOVLW 8
MOVWF LOOPCOUNT
LOOPU1608B RLF AARGB1,W
RLF REMB0, F
RLF TEMP, F
MOVF BARGB0,W
SUBWF REMB0, F
CLRF AARGB5
CLRW
BTFSS _C
INCFSZ AARGB5,W
SUBWF TEMP, F
BTFSC _C
GOTO UOK68B
MOVF BARGB0,W
ADDWF REMB0, F
CLRF AARGB5
CLRW
BTFSC _C
INCFSZ AARGB5,W
ADDWF TEMP, F
BCF _C
UOK68B RLF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1608B
return
GLOBAL UDIV1608L
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -