;**********************************************************************
;    Filename:	    macropic.inc                                      *
;    File Version:  1.0                                               *
;    Author:        Alfredo Granados Ly                               *
;    Company:       INICTEL                                           *
;**********************************************************************
;    Files required:                                                  *
;                                                                     *
;**********************************************************************
;    Notes:                                                           *
;                   Aplicaciones Avanzadas con PIC                    *
;**********************************************************************	

;************************************************************** banco x
BANCO	macro	x
	if x == 0
		bcf	STATUS,RP0
		bcf	STATUS,RP1
	endif
	if x == 1
		bsf	STATUS,RP0
		bcf	STATUS,RP1
	endif
	if x == 2
		bcf	STATUS,RP0
		bsf	STATUS,RP1
	endif
	if x == 3
		bsf	STATUS,RP0
		bsf	STATUS,RP1
	endif
	endm

;************************************************************** pagina
PAGINA	macro	x
	if x == 0
		bcf	PCLATH,3
		bcf	PCLATH,4
	endif
	if x == 1
		bsf	PCLATH,3
		bcf	PCLATH,4
	endif
	if x == 2
		bcf	PCLATH,3
		bsf	PCLATH,4
	endif
	if x == 3
		bsf	PCLATH,3
		bsf	PCLATH,4
	endif
	endm
	

;**************************************************************CANAL

CANAL		macro x

	if x==0
		bcf	ADCON0,3
		bcf	ADCON0,4
		bcf	ADCON0,5
	endif

	if x==1
		bsf	ADCON0,3
		bcf	ADCON0,4
		bcf	ADCON0,5
	endif
	if x==2
		bcf	ADCON0,3
		bsf	ADCON0,4
		bcf	ADCON0,5
	endif
	if x==3
		bsf	ADCON0,3
		bsf	ADCON0,4
		bcf	ADCON0,5
	endif
	if x==4
		bcf	ADCON0,3
		bcf	ADCON0,4
		bsf	ADCON0,5
	endif
	if x==5
		bsf	ADCON0,3
		bcf	ADCON0,4
		bsf	ADCON0,5
	endif
	if x==6
		bcf	ADCON0,3
		bsf	ADCON0,4
		bsf	ADCON0,5
	endif
	if x==7
		bsf	ADCON0,3
		bsf	ADCON0,4
		bsf	ADCON0,5
	endif
	endm

;************************************************************** mov
MOV	macro	registro,literal
	movlw	literal
	movwf	registro
	endm

;************************************************************** movr
MOVR	macro	registro1,registro2
	movf	registro2,0
	movwf	registro1
	endm

;************************************ compara y salta si no es igual
CJNE	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0
	btfss	STATUS,Z
	goto	direcc
	endm
;************************************ compara y salta si no es igual
CJNER	macro	registro1,registro2,direcc
	movf	registro2,0
	subwf	registro1,0
	btfss	STATUS,Z
	goto	direcc
	endm
;************************************ compara y salta si es igual
CJE	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0
	btfsc	STATUS,Z
	goto	direcc
	endm
;************************************ compara y salta si es igual
CJER	macro	registro1,registro2,direcc
	movf	registro2,0
	subwf	registro1,0
	btfsc	STATUS,Z
	goto	direcc
	endm


;*************************** decrementa, compara y salta si no es igual
DCJNE	macro	registro,dato,direcc
	decf	registro,1
	movlw	dato
	subwf	registro,0
	btfss	STATUS,Z
	goto	direcc
	endm

;*************************** compara y salta si es menor
CJL	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfss	STATUS,C	; ¿C='1'?
	goto	direcc
	endm

;********************* compara y salta si es menor igual
CJLE	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfss	STATUS,C	; ¿C='1'?
	goto	direcc
	btfsc	STATUS,Z	; ¿Z='0'?
	goto	direcc
	endm

;************************ compara y salta si no es menor
CJNL	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfsc	STATUS,C	; ¿C='0'?
	goto	direcc
	endm

;********************** compara y salta si es mayor o igual
CJGE	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfsc	STATUS,C	; ¿C='0'?
	goto	direcc
	endm

;************************************************* esuno
esuno	MACRO	REGISTRO,BIT
	local	no_es_uno_1
no_es_uno_1	
	btfss	REGISTRO,BIT
	goto	no_es_uno_1
	endm

;************************************************* escero
escero	MACRO	REGISTRO,BIT
	local	no_es_cero_1
no_es_cero_1
	btfsc	REGISTRO,BIT
	goto	no_es_cero_1
	endm

;*************************************************
JZ	MACRO	Direccion
	btfsc	STATUS,Z
	goto	Direccion	
	endm

;*************************************************
JNZ	MACRO	Direccion
	btfss	STATUS,Z
	goto	Direccion
	endm

;*************************************************
JC	MACRO	Direccion
	btfsc	STATUS,C
	goto	Direccion
	endm

;*************************************************
JNC	MACRO	Direccion
	btfss	STATUS,C
	goto	Direccion
	endm

;*************************************************
JBS	MACRO	Reg, Bit, Adr	;saltar si bit esta seteado
	btfsc	Reg, Bit
	goto	Adr	
	endm

;*************************************************
JBC	MACRO	Reg, Bit, Adr	;saltar si bit esta aclarado
	btfss	Reg, Bit
	goto	Adr	
	endm

;*************************************************
SBS	macro Reg, Bit		;obviar si bit esta seteado
	btfss	Reg, Bit
	endm

;*************************************************
SBC	macro Reg, Bit		;obviar si bit esta aclarado
	btfsc	Reg, Bit
	endm

;*************************************************
COMPARA	macro	reg1, constante
		movlw	constante
		xorwf	reg1,W
		endm
;*************************************************
DELAY_MS		macro X
			movwf	7FH		; PUSH de W
			movlw	X
			call		RETms
			movf		7FH,0	; POP de W
			endm
;************************************************
DELAY_S		macro X
			movwf	7FH		; PUSH de W
			movlw	X
			call		RETs
			movf		7FH,0	; POP de W
			endm

;--------------------------------
JMP		MACRO 	ETIQUETA
		movlw	HIGH ETIQUETA
		movwf	PCLATH
		goto	ETIQUETA
		ENDM
;--------------------------------
RUTINA	MACRO	ETIQUETA
		movlw	HIGH ETIQUETA
		movwf	PCLATH
		call	ETIQUETA
		ENDM
;----------------------------------
TABLA	MACRO	ETIQUETA
		movwf	OFFSET
		movlw	HIGH	ETIQUETA
		movwf	PCLATH
		movlw	LOW 	ETIQUETA
		addlw	.1
		addwf	OFFSET,0
		btfsc	STATUS,C
		incf	PCLATH
		movf	OFFSET,0
		call	ETIQUETA
		ENDM
;----------------------------------
PUTC	MACRO	ASCII
		movlw	ASCII
		call	EnviaCarLCD
		ENDM
;---------------------------------
PUTV	MACRO	VAR
		movf	VAR,0
		call	EnviaCarLCD
		ENDM
;---------------------------------
CLS		MACRO	
		movlw	DISP_CLEAR
		call	EnviaCmdLCD
		ENDM
;---------------------------------
ENTER		MACRO
		movlw	DISP_LINEA2
		call	EnviaCmdLCD
		ENDM
;---------------------------------
CURSOR		MACRO	X
		if	X == 1
			movlw	DISP_ON_CURSOR_BLINK
			call	EnviaCmdLCD
		endif
		if	X == 0
			movlw	DISP_ON_NOCURSOR
			call	EnviaCmdLCD
		endif
		ENDM
;-----------------------------------
POSICION			MACRO X
			if	X ==1
				movlw	CURSOR_LEFT
				call	EnviaCmdLCD
			endif
			if	X==0
			movlw	CURSOR_RIGHT
			call	EnviaCmdLCD
			endif
			ENDM
			
;--------------------------------
PRINTF		MACRO	CADENA
		MOV		NumCadena,CADENA
		call	EnviaCadenaLCD
		ENDM
;-------------------------------
GETCH		MACRO	VAR
		call	lee_tecladok
		movwf	VAR
		call	EnviaCarLCD
		ENDM
;-------------------------------
PASS		MACRO	VAR
		call	lee_tecladok
		movwf	VAR
		PUTC	'*'
		ENDM

;-------------------------------

CTECLA		MACRO	VAR,direccion
			call	lee_tecladok
			movwf	tecla
			CJE		tecla,VAR,direccion
			ENDM

;********************** compara y subtina si es mayor o igual
CCGE	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfsc	STATUS,C	; ¿C='0'?
	call	direcc
	endm

;************************************ compara y salta si es igual
CCE	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0
	btfsc	STATUS,Z
	call	direcc
	endm
;-------------------------------

CCTECLA		MACRO	VAR,direccion
			call	lee_tecladok
			movwf	tecla
			CCE		tecla,VAR,direccion
			ENDM