list p=16f887

	ERRORLEVEL 0, -302  ; suppress bank selection messages
#include <p16F887.inc>

	CBLOCK	0X21
	SZAMOL0
	SZAMOL1
	DATA_EE_ADDR
	DATA_EE_DATA
	EEPROM_SEGÉD
	COMMON3
	ENDC
BANK0	macro			; Select register BANK 0
	bcf     STATUS,RP0
	bcf     STATUS,RP1
	endm
	
BANK1	macro			; Select register BANK 1
	bsf     STATUS,RP0
	bcf     STATUS,RP1
	endm

BANK2	macro			; Select register BANK 2
	bcf     STATUS,RP0
	bsf     STATUS,RP1
	endm

BANK3	macro			; Select register BANK 3
	bsf     STATUS,RP0
	bsf     STATUS,RP1
	endm
;#################################################################################
LAP0	macro			; Select LAP0
	BCF 	PCLATH,3 	;az 0. lap beállítása
  	BCF 	PCLATH,4 	;az 0. lap beállítása
	endm
LAP1	macro			; Select LAP1
	BSF 	PCLATH,3 	;az 1. lap beállítása
  	BCF 	PCLATH,4 	;az 1. lap beállítása
	endm

	ORG		0				; Reset Vector, LAP 0
	GOTO	init

init

	CLRF	SZAMOL0
	CLRF	SZAMOL1

	CLRF	DATA_EE_ADDR
	CLRF	DATA_EE_DATA
	CLRF	EEPROM_SEGÉD
	CLRF	COMMON3
	

	LAP1
	CALL	EEPROMBA		; EEPROMBA MENTI A PILLANATNYI ÁLLÁST
	LAP0

SEMMI	NOP
	GOTO	SEMMI

;######################################################################################
;######################################################################################
;######################################################################################
;######################################################################################
;######################################################################################
	ORG		0x0800	; LAP1
;###################################################################[EEPROMBA VALÓ]######
;###################################################################[EEPROMBA VALÓ]######
EEPROMBA
	MOVF	SZAMOL0,W			; EEPROM DATA
	MOVWF	DATA_EE_DATA
	MOVLW	0X00				; EEPROM HEXA ADDRESS
	CALL	EEPROM_WRITE

	MOVF	SZAMOL1,W			; EEPROM DATA
	MOVWF	DATA_EE_DATA
	MOVLW	0X01				; EEPROM HEXA ADDRESS
	CALL	EEPROM_WRITE

	

	RETURN
	
;###################################################################[EEPROM ÍRÁS]######
;###################################################################[EEPROM ÍRÁS]######
EEPROM_WRITE
	BANKSEL	EEADR			; DATASHEETBŐL
;	MOVF	DATA_EE_ADDR,W	; 
	MOVWF	EEADR			; Data Memory Address to write
	BANK0
	MOVF	DATA_EE_DATA,W	; 
	BANKSEL	EEDAT
	MOVWF	EEDAT			; Data Memory Value to write
	BANKSEL	EECON1			; 
	BCF		EECON1, EEPGD	; Point to DATA memory
	BSF		EECON1, WREN	; Enable writes
	BCF		INTCON, GIE		; Disable INTs.
	BTFSC	INTCON, GIE		; SEE AN576
	GOTO	$-2
	MOVLW	0X55				; 
	MOVWF	EECON2			; Write 55h
	MOVLW	0XAA			; 
	MOVWF	EECON2			; Write AAh
	BSF		EECON1, WR		; Set WR bit to begin write
	BSF		INTCON, GIE		; Enable INTs.
	SLEEP					; Wait for interrupt to signal write complete
	BCF		EECON1, WREN	; Disable writes
;	BANK0					; BANK0
EEPROM_VERIFY
	BANKSEL	EEDAT			; 
	MOVF	EEDAT, W		; EEDAT not changed from previous write
	BANKSEL	EECON1			; 
	BSF		EECON1, RD		; YES, Read the value written
	BANKSEL	EEDAT			; 
	XORWF	EEDAT, W		;  
	BTFSS	STATUS, Z		; Is data the same
	GOTO	WRITE_ERR		; No, handle error
							; Yes, continue
	BANK0
	BCF		COMMON3,4		; ERROR TÖRLÉSE
	RETURN					; VISSZATÉRÉS
WRITE_ERR
	BTFSC	COMMON3,4		; ELŐTTE ELRONTOTTA AZ ÍRÁST?
	GOTO	EEPROM_FAIL		; 2. RONTÁS -> FAIL
	BSF		COMMON3,4		; 1X HIBÁZHAT
	GOTO	EEPROM_WRITE
EEPROM_FAIL
QWQ
	NOP
	GOTO	QWQ
;######################################################################################

	END
