📄 macro.asm
字号:
Bank0: MACRO
bcf STATUS, RP0
bcf STATUS, RP1
ENDM
Bank1: MACRO
bsf STATUS, RP0
bcf STATUS, RP1
ENDM
Bank2: MACRO
bcf STATUS, RP0
bsf STATUS, RP1
ENDM
Bank3: MACRO
bsf STATUS, RP0
bsf STATUS, RP1
ENDM
; ****************** Macro definitions ********************************
;+++++
; PAGE/BANK0/1/2/3 selects register bank 0/1/2/3.
; Leave set to BANK0 normally.
BANK0 MACRO
BCF STATUS,RP0 ; clear bank select bits
BCF STATUS,RP1
BCF STATUS,IRP ; clear indirect adressing bit
ENDM
BANK1 MACRO
BSF STATUS,RP0 ;
BCF STATUS,RP1 ;
BCF STATUS,IRP ; clear indirect adressing bit
ENDM
BANK2 MACRO
BCF STATUS,RP0 ;
BSF STATUS,RP1
BSF STATUS,IRP ; set bit for indirect adressing
ENDM
BANK3 MACRO
BSF STATUS,RP0 ;
BSF STATUS,RP1
BSF STATUS,IRP ; set bit for indirect adressing
ENDM
; macros for accessing page's directly
PAGE0 MACRO
BCF PCLATH,3
BCF PCLATH,4
ENDM
PAGE1 MACRO
BSF PCLATH,3
BCF PCLATH,4
ENDM
PAGE2 MACRO
BCF PCLATH,3
BSF PCLATH,4
ENDM
PAGE3 MACRO
BSF PCLATH,3
BSF PCLATH,4
ENDM
;+++++
; DISABLE_IRQ disable global irq
DISABLE_IRQ MACRO
LOCAL STOP_INT
STOP_INT BCF INTCON,GIE ; disable global interrupt
BTFSC INTCON,GIE ; check if disabled
GOTO STOP_INT ; nope, try again
ENDM
;+++++
; ENABLE_IRQ enable global irq
ENABLE_IRQ MACRO
BSF INTCON,GIE ; enable global interrupt
ENDM
; ******************* END macro definitions ***************************
;+++++
; INC_BUFFER advance buffer pointers wrap if necessary
;
; If buffer size is power of two, and buffer is aligned
; on an multiple of twice it size, this macro generates
; two instructions, Otherwise it generates six instructions.
; Originator: Eric Smith, eric@brouhaha.com for non-comercial use.
INC_BUFFER MACRO Pointer, Base, Size
LOCAL POWER_OF2, ALIGNED,BIT,VALUE
POWER_OF2 SET !(Size&(Size-1)) ; calculate if power of 2
ALIGNED SET POWER_OF2&&((Base&(Size-1))==0) ; calculate if aligned
IF ALIGNED
VALUE SET Size
BIT SET 0
WHILE VALUE>1
BIT SET BIT+1
VALUE SET VALUE>>1
ENDW
ENDIF
INCF Pointer,F ; increase pointer
IF ALIGNED&&!(Base&(1<<BIT)) ; aligned ?
BCF Pointer,BIT ; yep clear bit
ELSE
MOVF Pointer,W ; nope
XORLW Base+Size
MOVLW Base
BTFSC STATUS,Z
MOVWF Pointer
ENDIF
ENDM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -