;*******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