list p=18f452 #include ; ;---- 18F452 RAM LOCATIONS ------ Data_EE_Addr EQU 0X000 Data_EE_Data EQU 0X001 EEPROM_Buffer equ 0x02 ;--------VECTORS------------ org 0x00 bra START ;-------PROGRAM-------------- org 0x20 START rcall INIT ; ;---- Test the WRITE EEPROM Routine ---- ; clrf Data_EE_Addr ; set EEPROM start address at 0x00 movlw '0' ; Load a ASCII code "0" to W movwf Data_EE_Data EE_Write rcall IN_DATA_EEW incf Data_EE_Data,F ; 0x30+ N incf Data_EE_Addr,F ; Point to next EEPROM Address btfss Data_EE_Addr,5 ; Write 32 bytes ? goto EE_Write ; ;---- Test the READ EEPROM Routine ---- ; clrf FSR0H ; Set RAM point to 0x010 movlw 0x10 movwf FSR0L ; clrf Data_EE_Addr EE_Read rcall READ_EEPROM movwf POSTINC0 ; move W --> RAM then point + 1 ; incf Data_EE_Addr,F ; Point to next EEPROM Address btfss Data_EE_Addr,5 ; Read 32 bytes ? goto EE_Read ; LSTOP GOTO LSTOP ; ;------ INTERNAL EEPROM READ ------ ; READ_EEPROM movff Data_EE_Addr,EEADR ; ; bcf INTCON,GIE bcf EECON1,EEPGD bsf EECON1,RD movf EEDATA,W ; bsf INTCON,GIE return ; ;----INTERNAL EEPROM WRITE----- ; IN_DATA_EEW movff Data_EE_Addr,EEADR movff Data_EE_Data,EEDATA ; BCF EECON1,EEPGD BCF EECON1,CFGS ; There are difference with data sheet ; BCF INTCON,GIE BSF EECON1,WREN ; MOVLW 0X55 MOVWF EECON2 MOVLW 0XAA MOVWF EECON2 BSF EECON1,WR ; ; BSF INTCON,GIE LOOP1 BTFSS PIR2, EEIF GOTO LOOP1 ; BCF EECON1,WREN BCF PIR2,EEIF RETURN ;---------INITIAL---------------- INIT BCF PIR2,EEIF BCF PIE2,EEIE RETURN ;-------------------------------- END