📄 p18macro.inc
字号:
movff Reg,PLUSW1
movlw Offset+1
movff Reg+1,PLUSW1
movlw Offset+2
movff Reg+2,PLUSW1
endm
Stk1Inc macro Offset
; Increment byte in stack at Offset
movlw Offset
incf PLUSW1,F,ACCESS
endm
Stk2Inc macro Offset
; Increment 2 bytes in stack at Offset
movlw Offset
incf PLUSW1,F,ACCESS
movlw Offset+1
btfsc STATUS,Z
incf PLUSW1,F,ACCESS
endm
Stk3Inc macro Offset
; Increment 3 bytes in stack at Offset
local jEnd
movlw Offset
incf PLUSW1,F,ACCESS
bnz jEnd
movlw Offset+1
incf PLUSW1,F,ACCESS
bnz jEnd
movlw Offset+2
incf PLUSW1,F,ACCESS
jEnd:
endm
Stk1Dec macro Offset
; Decrement byte in stack at Offset
movlw Offset
decf PLUSW1,F,ACCESS
endm
Stk2Dec macro Offset
; Decrement 2 bytes in stack at Offset
local jEnd
movlw Offset
decf PLUSW1,F,ACCESS
bc jEnd
movlw Offset+1
decf PLUSW1,F,ACCESS
jEnd:
endm
Stk3Dec macro Offset
; Decrement 3 bytes in stack at Offset
local jEnd
movlw Offset
decf PLUSW1,F,ACCESS
bc jEnd
movlw Offset+1
decf PLUSW1,F,ACCESS
bc jEnd
movlw Offset+2
decf PLUSW1,F,ACCESS
jEnd:
endm
Stk1TestForZero macro Offset,jZero
; Test 1 byte at Offset. Branch if zero. Returns 0 in WREG if zero.
movlw Offset
movf PLUSW1,W,ACCESS
bz jZero
endm
Stk2TestForZero macro Offset,jZero
; Test 2 bytes at Offset. Branch if zero. Returns 0 in WREG if zero.
local jContinue
movlw Offset
movf PLUSW1,W,ACCESS
bnz jContinue
movlw Offset+1
movf PLUSW1,W,ACCESS
bz jZero
jContinue
endm
Stk3TestForZero macro Offset,jZero
; Test 3 bytes at Offset. Branch if zero. Returns 0 in WREG if zero.
local jContinue
movlw Offset
movf PLUSW1,W,ACCESS
bnz jContinue
movlw Offset+1
movf PLUSW1,W,ACCESS
bnz jContinue
movlw Offset+2
movf PLUSW1,W,ACCESS
bz jZero
jContinue
endm
Stk1AddToFSR0 macro Offset
; Add 1 byte in stack at Offset to byte at FSR0. Pointer FSR0 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf INDF0,F,ACCESS
endm
Stk2AddToFSR0 macro Offset
; Add 2 bytes in stack at Offset to 2 bytes at FSR0. Pointer FSR0 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf POSTINC0,F,ACCESS
movlw Offset+1
movf PLUSW1,W,ACCESS
addwfc POSTDEC0,F,ACCESS
endm
Stk3AddToFSR0 macro Offset
; Add 3 bytes in stack at Offset to 3 bytes at FSR0. Pointer FSR0 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf POSTINC0,F,ACCESS
movlw Offset+1
movf PLUSW1,W,ACCESS
addwfc POSTINC0,F,ACCESS
movlw Offset+2
movf PLUSW1,W,ACCESS
addwfc POSTDEC0,F,ACCESS
movf POSTDEC0,F,ACCESS
endm
Stk4AddToFSR0 macro Offset
; Add 4 bytes in stack at Offset to 4 bytes at FSR0. Pointer FSR0 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf POSTINC0,F,ACCESS
movlw Offset+1
movf PLUSW1,W,ACCESS
addwfc POSTINC0,F,ACCESS
movlw Offset+2
movf PLUSW1,W,ACCESS
addwfc POSTINC0,F,ACCESS
movlw Offset+3
movf PLUSW1,W,ACCESS
addwfc POSTDEC0,F,ACCESS
movf POSTDEC0,F,ACCESS
movf POSTDEC0,F,ACCESS
endm
Stk1AddToFSR2 macro Offset
; Add 1 byte in stack at Offset to byte at FSR2. Pointer FSR2 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf INDF2,F,ACCESS
endm
Stk2AddToFSR2 macro Offset
; Add 2 bytes in stack at Offset to 2 bytes at FSR2. Pointer FSR2 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf POSTINC2,F,ACCESS
movlw Offset+1
movf PLUSW1,W,ACCESS
addwfc POSTDEC2,F,ACCESS
endm
Stk3AddToFSR2 macro Offset
; Add 3 bytes in stack at Offset to 3 bytes at FSR2. Pointer FSR2 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf POSTINC2,F,ACCESS
movlw Offset+1
movf PLUSW1,W,ACCESS
addwfc POSTINC2,F,ACCESS
movlw Offset+2
movf PLUSW1,W,ACCESS
addwfc POSTDEC2,F,ACCESS
movf POSTDEC2,F,ACCESS
endm
Stk4AddToFSR2 macro Offset
; Add 4 bytes in stack at Offset to 4 bytes at FSR2. Pointer FSR2 unchanged.
movlw Offset
movf PLUSW1,W,ACCESS
addwf POSTINC2,F,ACCESS
movlw Offset+1
movf PLUSW1,W,ACCESS
addwfc POSTINC2,F,ACCESS
movlw Offset+2
movf PLUSW1,W,ACCESS
addwfc POSTINC2,F,ACCESS
movlw Offset+3
movf PLUSW1,W,ACCESS
addwfc POSTDEC2,F,ACCESS
movf POSTDEC2,F,ACCESS
movf POSTDEC2,F,ACCESS
endm
Stk1ShiftLeft macro Offset
; Shift left 1 byte in stack at Offset
bcf STATUS,C
movlw Offset
rlcf PLUSW1,F,ACCESS
endm
Stk2ShiftLeft macro Offset
; Shift left 2 bytes in stack at Offset
bcf STATUS,C
movlw Offset
rlcf PLUSW1,F,ACCESS
movlw Offset+1
rlcf PLUSW1,F,ACCESS
endm
Stk4ShiftLeft macro Offset
; Shift left 4 bytes in stack at Offset
bcf STATUS,C
movlw Offset
rlcf PLUSW1,F,ACCESS
movlw Offset+1
rlcf PLUSW1,F,ACCESS
movlw Offset+2
rlcf PLUSW1,F,ACCESS
movlw Offset+3
rlcf PLUSW1,F,ACCESS
endm
Stk1Negate macro Offset
; Negate 1 byte in stack at Offset
movlw Offset
comf PLUSW1,F,ACCESS
incf PLUSW1,F,ACCESS
endm
Stk2Negate macro Offset
; Negate 2 bytesin stack at Offset
movlw Offset
comf PLUSW1,F,ACCESS
incf PLUSW1,F,ACCESS
movlw Offset+1
btfsc STATUS,Z
decf PLUSW1,F,ACCESS
comf PLUSW1,F,ACCESS
endm
Stk4Negate macro Offset
; Negate 4 bytes in stack at Offset
local jEnd
movlw Offset
comf PLUSW1,F,ACCESS
movlw Offset+1
comf PLUSW1,F,ACCESS
movlw Offset+2
comf PLUSW1,F,ACCESS
movlw Offset+3
comf PLUSW1,F,ACCESS
movlw Offset
incf PLUSW1,F,ACCESS
bnz jEnd
movlw Offset+1
incf PLUSW1,F,ACCESS
bnz jEnd
movlw Offset+2
incf PLUSW1,F,ACCESS
bnz jEnd
movlw Offset+3
incf PLUSW1,F,ACCESS
jEnd:
endm
Stk1NegateFSR2 macro
; Negate 1 byte at FSR2. FSR2 unchanged.
comf INDF2,F,ACCESS
incf INDF2,F,ACCESS
endm
Stk2NegateFSR2 macro
; Negate 2 bytes at FSR2. FSR2 unchanged.
comf INDF2,F,ACCESS
incf POSTINC2,F,ACCESS
btfsc STATUS,Z
decf INDF2,F,ACCESS
comf POSTDEC2,F,ACCESS
endm
;====== These branches are short ==============
jmpWeqZ macro Label ; jmp if W == 0
movf WREG,F,ACCESS
bz Label
endm
jmpWneZ macro Label ; jmp if W != 0
tstfsz WREG,ACCESS
bra Label
endm
jmpFeqZ macro Reg,Acc,Label
movf Reg,F,Acc
bz Label
endm
jmpFneZ macro Reg,Acc,Label
movf Reg,F,Acc
bnz Label
endm
jmpFeqL macro Reg,Acc,bVal,Label
movlw bVal
subwf Reg,W,Acc
bz Label
endm
jmpFneL macro Reg,Acc,bVal,Label
movlw bVal
subwf Reg,W,Acc
bnz Label
endm
jmpFleL macro Reg,Acc,bVal,Label
movlw bVal
cpfsgt Reg,Acc
bra Label
endm
jmpFgeL macro Reg,Acc,bVal,Label
movlw bVal
cpfslt Reg,Acc
bra Label
endm
jmpFeqF macro Reg1,Acc1,Reg2,Acc2,Label
movf Reg1,W,Acc1
subwf Reg2,W,Acc2
bz Label
endm
jmpFneF macro Reg1,Acc1,Reg2,Acc2,Label
movf Reg1,W,Acc1
subwf Reg2,W,Acc2
bnz Label
endm
jmpClr macro Reg,Bit,Acc,Label
btfss Reg,Bit,Acc
bra Label
endm
jmpSet macro Reg,Bit,Acc,Label
btfsc Reg,Bit,Acc
bra Label
endm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -