
;**************************************
;	Flags to initiliaze the pines of the
;	PIC ports A, B , C , D and E
;**************************************
memoria_start	UDATA
PIN_7: 	= B'10000000'	; 1XXXXXXX 
PIN_6: 	= B'01000000'	; X1XXXXXX
PIN_5: 	= B'00100000'	; XX1XXXXX
PIN_4: 	= B'00010000'	; XXX1XXXX
PIN_3: 	= B'00001000'	; XXXX1XXX
PIN_2: 	= B'00000100'	; XXXXX1XX
PIN_1: 	= B'00000010'	; XXXXXX1X
PIN_0: 	= B'00000001'	; XXXXXXX1
OUT: 	= B'00000000'
IN:	= B'11111111'

	

TempValue	res	01	
TempRead	res	05
TempSize	res	01
TempCommand	res	01
TempAdd		res	02
TempComp	res	01
TempData	res	04

;	This is a file that contain useful MACROS
;	for to microcontrollers PIC18F258 and PIC18F458
;

;************************************************
;
;	MACRO SECTION
;
;************************************************


;************************************************
;
;	Macro to configure pins of the ports as
;	inputs and/or outputs
;	
;	Use:
;	
;	initPORTA IN & [PIN_x^PIN_y^....]^OUT & [PIN_x^PIN_y^....]
;	
;************************************************

initPORTA macro	I_O
	clrf	PORTA
	clrf	LATA
	movlw	I_O
	movwf	TRISA
	endm
	
initPORTB macro	I_O
	clrf	PORTB
	clrf	LATB
	movlw	I_O
	movwf	TRISB
	endm
	
initPORTC macro	I_O
	clrf	PORTC
	clrf	LATC
	movlw	I_O
	movwf	TRISC
	endm
	
#ifdef	PIC18F458

initPORTD macro	I_O
	clrf	PORTD
	clrf	LATD
	movlw	I_O
	movwf	TRISD
	endm
	
initPORTE macro	I_O
	clrf	PORTE
	clrf	LATE
	movlw	I_O
	movwf	TRISE
	endm	
	
#endif

;******************************************************
;
;	Macro to save W, STATUS and BSR registers
;	values when intering to ISR
;
;******************************************************

SAVE_STATUS_W_BSR	macro
	movff	W,W_temp
	movff	STATUS,Status_temp
	movff	BSR,BSR_temp
	endm
	
;******************************************************
;
;	Macro to restore W, STATUS and BSR registers
;	values before concluding ISR
;
;******************************************************

RESTORE_STATUS_W_BSR	macro
	movff	W_temp,W
	movff	Status_temp, STATUS
	movff	BSR_temp, BSR
	endm

;******************************************************
;
;	Macros to enable and disable global IRQ
;
;******************************************************

ENABLE_GIE	macro
	local	onINT, NotIPEN

onINT:	
	bsf	INTCON,GIEH
	btfss	RCON,IPEN
	bra	NotIPEN
	bsf	INTCON,GIEL
; Ensure to GIEH and GIEL are disables
	btfss	INTCON,GIEH
	bra	onINT
NotIPEN:	
	btfss	INTCON,GIEH
	bra	onINT
	endm

DISABLE_GIE	macro
	local	stopINT, NotIPEN_2

stopINT:	
	bcf	INTCON,GIEH
	btfss	RCON,IPEN
	bra	NotIPEN_2
	bcf	INTCON,GIEL
; Ensure to GIEH and GIEL are disables
	btfsc	INTCON,GIEL
	bra	stopINT
NotIPEN_2:	
	btfsc	INTCON,GIEH
	bra	stopINT
	endm

;******************************************************
;
;	Macro to read a specified register 
;
;******************************************************

READ	macro 	Add1, Size
		
	movlw	low(Add1)
	movwf	FSR0L
	movlw	high(Add1)
	movwf	FSR0H
	movlw	low(TempRead)
	movwf	FSR1L
	movlw	high(TempRead)
	movwf	FSR1H
	movlw	Size
	movwf	TempSize
	call	READFunc
	endm
	
;******************************************************
;
;	Macro to write in specified register 
;
;******************************************************

WRITE	macro 	AddS, AddD, Size
		
	movlw	low(AddS)
	movwf	FSR0L
	movlw	high(AddS)
	movwf	FSR0H
	movff	AddD,FSR1L
	movff	AddD+1,FSR1H
	movff	Size,TempSize
	call	WRITEFunc
	endm	

;******************************************************
;
;	Macro to enable a bit in specified register 
;
;******************************************************
	
EnableBIT	macro 	Add1, NumBit
		
	movff	Add1,FSR0L
	movff	Add1+1,FSR0H
	call	EnableBitFun 	
	endm	

;******************************************************
;
;	Macro to disable a bit in specified register 
;
;******************************************************
	
DisableBIT	macro 	Add1, NumBit

	movff	Add1,FSR0L
	movff	Add1+1,FSR0H
	call	DisableBitFun 
	endm	