📄 p18macro.inc
字号:
; $Id: P18MACRO.INC,v 1.1 2003/12/17 19:32:43 sealep Exp $
;==========================================================================
;
; MACROS
;
;==========================================================================
LIST
StkSetPtrToOffset macro Ptr,Offset
; Set pointer Ptr to argument in stack frame at Offset.
movlw LOW(Offset)
addwf FSR1L,W,ACCESS
movwf Ptr,ACCESS
movlw HIGH(Offset&0xFFFF)
addwfc FSR1H,W,ACCESS
movwf Ptr+1
endm
StkPushPtrToOffset macro Offset
; Push pointer onto stack to point to Offset location in stack.
; Offset defined before push.
movlw LOW(Offset)
addwf FSR1L,W,ACCESS
movwf INDF1,ACCESS
movlw HIGH(Offset&0xFFFF)
addwfc FSR1H,W,ACCESS
movwf PREINC1,ACCESS
movf POSTINC1,F,ACCESS ; increment FSR1
endm
StkAddStackPtr macro N
; Add N to FSR1
movlw LOW(N)
addwf FSR1L,F,ACCESS
movlw HIGH(N&0xFFFF)
addwfc FSR1H,F,ACCESS
endm
Stk1PushFromFSR0 macro
; Get one byte from FSR0 and push on stack. FSR0, WREG unchanged.
movff INDF0,POSTINC1
endm
Stk2PushFromFSR0 macro
; Get two bytes from FSR0 and push on stack. FSR0, WREG unchanged.
movff POSTINC0,POSTINC1
movff POSTDEC0,POSTINC1
endm
Stk3PushFromFSR0 macro
; Get three bytes from FSR0 and push on stack. FSR0, WREG unchanged.
movff POSTINC0,POSTINC1
movff POSTINC0,POSTINC1
movff POSTDEC0,POSTINC1
movf POSTDEC0,F,ACCESS
endm
Stk1PushFromFSR2 macro
; Get one byte from FSR2 and push on stack. FSR2, WREG unchanged.
movff INDF2,POSTINC1
endm
Stk2PushFromFSR2 macro
; Get two bytes from FSR2 and push on stack. FSR2, WREG unchanged.
movff POSTINC2,POSTINC1
movff POSTDEC2,POSTINC1
endm
Stk3PushFromFSR2 macro
; Get three bytes from FSR2 and push on stack. FSR2, WREG unchanged.
movff POSTINC2,POSTINC1
movff POSTINC2,POSTINC1
movff POSTDEC2,POSTINC1
movf POSTDEC2,F,ACCESS
endm
Stk1PushFromReg macro Reg
; Get one byte from Reg and push on stack. WREG unchanged.
movff Reg,POSTINC1
endm
Stk2PushFromReg macro Reg
; Get two bytes from Reg and push on stack. WREG unchanged.
movff Reg,POSTINC1
movff Reg+1,POSTINC1
endm
Stk3PushFromReg macro Reg
; Get three bytes from Reg and push on stack. WREG unchanged.
movff Reg,POSTINC1
movff Reg+1,POSTINC1
movff Reg+2,POSTINC1
endm
Stk1PopToFSR0 macro
; Pop one byte from stack and put it at FSR0 without exposing stack.
; WREG changed, FSR0 unchanged.
movlw 0xFF
movff PLUSW1,INDF0
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk2PopToFSR0 macro
; Pop two bytes from stack and put them at FSR0 without exposing stack.
; WREG changed, FSR0 unchanged.
movlw 0xFE
movff PLUSW1,POSTINC0
movlw 0xFF
movff PLUSW1,POSTDEC0
movf POSTDEC1,F,ACCESS ; decrement FSR1
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk3PopToFSR0 macro
; Pop three bytes from stack and put them at FSR0 without exposing stack.
; WREG changed, FSR0 unchanged.
movlw 0xFD
movff PLUSW1,POSTINC0
movlw 0xFE
movff PLUSW1,POSTINC0
movlw 0xFF
movff PLUSW1,POSTDEC0
movf POSTDEC0,F,ACCESS ; restore FSR0
movf POSTDEC1,F,ACCESS ; decrement FSR1
movf POSTDEC1,F,ACCESS ; decrement FSR1
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk1PopToFSR2 macro
; Pop one byte from stack and put it at FSR2 without exposing stack.
; WREG changed, FSR2 unchanged.
movlw 0xFF
movff PLUSW1,INDF2
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk2PopToFSR2 macro
; Pop two bytes from stack and put them at FSR2 without exposing stack.
; WREG changed, FSR2 unchanged.
movlw 0xFE
movff PLUSW1,POSTINC2
movlw 0xFF
movff PLUSW1,POSTDEC2
movf POSTDEC1,F,ACCESS ; decrement FSR1
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk3PopToFSR2 macro
; Pop three bytes from stack and put them at FSR2 without exposing stack.
; WREG changed, FSR2 unchanged.
movlw 0xFD
movff PLUSW1,POSTINC2
movlw 0xFE
movff PLUSW1,POSTINC2
movlw 0xFF
movff PLUSW1,POSTDEC2
movf POSTDEC2,F,ACCESS ; restore FSR2
movf POSTDEC1,F,ACCESS ; decrement FSR1
movf POSTDEC1,F,ACCESS ; decrement FSR1
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk1PopToReg macro Reg
; Pop one byte from stack and put it at Reg without exposing stack.
; WREG changed.
movlw 0xFF
movff PLUSW1,Ptr
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk2PopToReg macro Reg
; Pop two bytes from stack and put them at Reg without exposing stack.
; WREG changed.
movlw 0xFF
movff PLUSW1,Reg+1
movf POSTDEC1,F,ACCESS ; decrement FSR1
movlw 0xFF
movff PLUSW1,Reg
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk3PopToReg macro Reg
; Pop three bytes from stack and put them at Reg without exposing stack.
; WREG changed.
movlw 0xFF
movff PLUSW1,Reg+2
movf POSTDEC1,F,ACCESS ; decrement FSR1
movlw 0xFF
movff PLUSW1,Reg+1
movf POSTDEC1,F,ACCESS ; decrement FSR1
movlw 0xFF
movff PLUSW1,Reg
movf POSTDEC1,F,ACCESS ; decrement FSR1
endm
Stk1CpyToFSR0 macro Offset
; Copy one byte from stack frame at Offset to FSR0
; WREG changed, FSR0 unchanged.
movlw LOW(Offset)
movff PLUSW1,INDF0
endm
Stk2CpyToFSR0 macro Offset
; Copy two bytes from stack frame at Offset to FSR0
; WREG changed, FSR0 unchanged.
movlw LOW(Offset)
movff PLUSW1,POSTINC0
movlw LOW(Offset+1)
movff PLUSW1,POSTDEC0
endm
Stk1CpyToFSR2 macro Offset
; Copy one byte from stack frame at Offset to FSR2
; WREG changed, FSR2 unchanged.
movlw LOW(Offset)
movff PLUSW1,INDF2
endm
Stk2CpyToFSR2 macro Offset
; Copy two bytes from stack frame at Offset to FSR2
; WREG changed, FSR2 unchanged.
movlw LOW(Offset)
movff PLUSW1,POSTINC2
movlw LOW(Offset+1)
movff PLUSW1,POSTDEC2
endm
Stk4CpyToFSR2 macro Offset
; Copy four bytes from stack frame at Offset to FSR2
; WREG changed, FSR2 unchanged.
movlw LOW(Offset)
movff PLUSW1,POSTINC2
movlw LOW(Offset+1)
movff PLUSW1,POSTINC2
movlw LOW(Offset+2)
movff PLUSW1,POSTINC2
movlw LOW(Offset+3)
movff PLUSW1,POSTDEC2
movf POSTDEC2,F,ACCESS
movf POSTDEC2,F,ACCESS
endm
Stk1CpyToReg macro Offset,Reg
; Copy one byte from stack frame at Offset to Reg
movlw LOW(Offset)
movff PLUSW1,Reg
endm
Stk2CpyToReg macro Offset,Reg
; Copy two bytes from stack frame at Offset to Reg
movlw LOW(Offset)
movff PLUSW1,Reg
movlw LOW(Offset+1)
movff PLUSW1,Reg+1
endm
Stk3CpyToReg macro Offset,Reg
; Copy three bytes from stack frame at Offset to Reg
movlw LOW(Offset)
movff PLUSW1,Reg
movlw LOW(Offset+1)
movff PLUSW1,Reg+1
movlw LOW(Offset+2)
movff PLUSW1,Reg+2
endm
Stk1CpyFromFSR0 macro Offset
; Copy one byte from FSR0 to stack frame at Offset
movlw LOW(Offset)
movff INDF0,PLUSW1
endm
Stk2CpyFromFSR0 macro Offset
; Copy two bytes from FSR0 to stack frame at Offset
movlw Offset
movff POSTINC0,PLUSW1
movlw Offset+1
movff POSTDEC0,PLUSW1
endm
Stk3CpyFromFSR0 macro Offset
; Copy three bytes from FSR0 to stack frame at Offset
movlw Offset
movff POSTINC0,PLUSW1
movlw Offset+1
movff POSTDEC0,PLUSW1
movlw Offset+2
movff POSTDEC0,PLUSW1
endm
Stk4CpyFromFSR0 macro Offset
; Copy four bytes from FSR0 to stack frame at Offset
movlw Offset
movff POSTINC0,PLUSW1
movlw Offset+1
movff POSTINC0,PLUSW1
movlw Offset+2
movff POSTINC0,PLUSW1
movlw Offset+3
movff POSTDEC0,PLUSW1
movf POSTDEC0,F,ACCESS
movf POSTDEC0,F,ACCESS
endm
Stk1CpyFromFSR2 macro Offset
; Copy one byte from FSR2 to stack frame at Offset
movlw LOW(Offset)
movff INDF2,PLUSW1
endm
Stk2CpyFromFSR2 macro Offset
; Copy two bytes from FSR2 to stack frame at Offset
movlw Offset
movff POSTINC2,PLUSW1
movlw Offset+1
movff POSTDEC2,PLUSW1
endm
Stk4CpyFromFSR2 macro Offset
; Copy four bytes from FSR2 to stack frame at Offset
movlw Offset
movff POSTINC2,PLUSW1
movlw Offset+1
movff POSTINC2,PLUSW1
movlw Offset+2
movff POSTINC2,PLUSW1
movlw Offset+3
movff POSTDEC2,PLUSW1
movf POSTDEC2,F,ACCESS
movf POSTDEC2,F,ACCESS
endm
Stk1CpyFromReg macro Reg,Offset
; Copy one byte from Reg to stack frame at Offset
movlw LOW(Offset)
movff Reg,PLUSW1
endm
Stk2CpyFromReg macro Reg,Offset
; Copy two bytes from Reg to stack frame at Offset
movlw Offset
movff Reg,PLUSW1
movlw Offset+1
movff Reg+1,PLUSW1
endm
Stk3CpyFromReg macro Reg,Offset
; Copy three bytes from Reg to stack frame at Offset
movlw Offset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -