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

📄 macro.asm

📁 电话远程控制家电系统单片机开发电话远程控制家电系统单片机开发
💻 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 + -