;*******Using PIC's internal EEPROM******
; BY: ENG'R ROLAND MICHAEL A. DELA PEŅA *
;****************************************

	LIST            P=16F84
	ERRORLEVEL      -302
	#INCLUDE P16F84.INC

;************************************************************
; REGISTER DEFINITIONS
;************************************************************
	CBLOCK	0CH
		ROLAND		; STORAGE REGISTER
		MICHAEL		; STORAGE REGISTER
		ECE23314	; REGISTER TO BE STORED IN EEPROM
		ENGINEER	; REGISTER TO BE STORED IN EEPROM
	ENDC
;************************************************************************
; THIS PART INITIALIZES THE PORTS AND OTHER PHERIPERALS 
; IN MICROCONTROLLER
;************************************************************************
	ORG 	0000H 		; SET POWER ON RESET VECTOR.
	CLRF 	PORTB
	CLRF	PORTA
	GOTO INIT
INIT
	BSF 	STATUS,RP0	; SET BANK = 1.
        BCF	OPTION_REG,7	; ENABLE BUILT-IN PULL-UP RESISTORS.
       	MOVLW 	B'00000000'	; SET PORTB TO ALL OUTPUT.
        MOVWF   TRISB
	MOVLW	B'00000000'	; SET PORTA TO ALL OUTPUT.
	MOVWF	TRISA		
        BCF 	STATUS,RP0	; SET BANK = 0.
;****************************************************************************
; MAIN ROUTINE 
;****************************************************************************
START
	MOVLW	d'1'
	MOVWF	ENGINEER
	MOVLW	d'2'
	MOVWF	ECE23314

	MOVLW	D'2'			; TEST FOR WRITE
	MOVWF	EEADR
	MOVFW	ENGINEER
	CALL	EEPROMWRITE
	INCF	EEADR
	MOVFW	ECE23314
	CALL	EEPROMWRITE

	MOVLW	D'2'			; TEST FOR READ
	MOVWF	EEADR
	CALL	EEPROMREAD
	MOVWF	ROLAND
	INCF	EEADR
	CALL	EEPROMREAD
	MOVWF	MICHAEL

	; RESERVED FOR PROGRAM LINES
	;
	;
	CLRF	ROLAND			; THIS RESET ALL PARAMETERS
	CLRF	MICHAEL
	CLRF	ECE23314
	CLRF	ENGINEER
	MOVLW	D'2'
	MOVWF	EEADR
	MOVLW	h'FF'
	CALL	EEPROMWRITE
	INCF	EEADR
	MOVLW	h'FF'
	CALL	EEPROMWRITE
	GOTO START
;****************************************************************************
; EEPROM WRITE SUBROUTINE
; WRITES VALUE IN THE W-REGISTER TO EEPROM ADDRESS
; STORED IN EEADR. IT ALSO CLEARS GLOBAL INTERRUPT CONTROL.
;****************************************************************************
EEPROMWRITE
        MOVWF   EEDATA
        BSF     STATUS,RP0
        BCF     INTCON,GIE		;DISABLE INTERUPT
        BSF     EECON1,WREN		;ENABLE WRITE BIT
        MOVLW   055
        MOVWF   EECON2
        MOVLW   0AA
        MOVWF   EECON2
        BSF     EECON1,WR		;SET WR BIT BEGIN WRITE
        BCF     EECON1,WREN		;INHIBITS WRITE TO THE DATA EEPROM

EEPROM_WRITE_DELAY
        BTFSC   EECON1,WR		; IS WRITE FINISHED?
        GOTO    EEPROM_WRITE_DELAY	; NO
        BCF     EECON1,EEIF		; YES
        BCF     STATUS,RP0
        RETURN
;****************************************************************************
; EEPROM READ SUBROUTINE
; THIS ROUTINE RETURNS THE VALUE IN THE MEMORY SPACE
; TO WHICH EEADR POINTS. BOTH THE W-REGISTER AND EEDATA
; CONTAIN THE MEMORY VALUE.
;****************************************************************************
EEPROMREAD	
	BSF	STATUS,5	; SET TO BANK 1
	BSF	EECON1,00	; INITIATES AN EEPROM READ
	BCF	STATUS,5	; SET TO BANK 0
	MOVF	EEDATA,W	; TRANSFER DATA(EEDATA) IN EEPROM TO ACCUMULATOR
	RETURN

	END

    Source: geocities.com/ece23314/prog

               ( geocities.com/ece23314)