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

📄 p18macro.inc

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