;*******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
               (
geocities.com/ece23314)