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

📄 p18macro.inc

📁 该应用软件可以实现大多数单片机的仿真实验
💻 INC
📖 第 1 页 / 共 2 页
字号:
; $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 + -