PIC18FXX20
7.5
Write Verify
7.8
Using the Data EEPROM
Depending on the application, good programming
practice may dictate that the value written to the mem-
ory should be verified against the original value. This
should be used in applications where excessive writes
can stress bits near the specification limit.
The data EEPROM is a high endurance, byte address-
able array that has been optimized for the storage of
frequently changing information (e.g., program vari-
ables or other data that are updated often). Frequently
changing values will typically be updated more often
than specification D124. If this is not the case, an array
refresh must be performed. For this reason, variables
that change infrequently (such as constants, IDs, cali-
bration, etc.) should be stored in FLASH program
memory.
7.6
Protection Against Spurious Write
There are conditions when the device may not want to
write to the data EEPROM memory. To protect against
spurious EEPROM writes, various mechanisms have
been built-in. On power-up, the WREN bit is cleared.
Also, the Power-up Timer (72 ms duration) prevents
EEPROM write.
The write initiate sequence and the WREN bit together
help prevent an accidental write during brown-out,
power glitch, or software malfunction.
A simple data EEPROM refresh routine is shown in
Example 7-3.
Note: If data EEPROM is only used to store con-
stants and/or data that changes rarely, an
array refresh is likely not required. See
specification D124.
7.7
Operation During Code Protect
Data EEPROM memory has its own code protect
mechanism. External Read and Write operations are
disabled if either of these mechanisms are enabled.
The microcontroller itself can both read and write to the
internal Data EEPROM, regardless of the state of the
code protect configuration bit. Refer to “Special
Features of the CPU” (Section 23.0) for additional
information.
EXAMPLE 7-3:
DATA EEPROM REFRESH ROUTINE
clrf
clrf
bcf
EEADR
; Start at address 0
EEADRH
;
EECON1,CFGS
EECON1,EEPGD
INTCON,GIE
EECON1,WREN
; Set for memory
; Set for Data EEPROM
; Disable interrupts
; Enable writes
; Loop to refresh array
; Read current address
;
bcf
bcf
bsf
Loop
bsf
EECON1,RD
55h
movlw
movwf
movlw
movwf
bsf
EECON2
AAh
; Write 55h
;
EECON2
EECON1,WR
EECON1,WR
$-2
; Write AAh
; Set WR bit to begin write
; Wait for write to complete
btfsc
bra
incfsz EEADR,F
; Increment address
bra
Loop
; Not zero, do it again
; Increment the high address
; Not zero, do it again
incfsz EEADRH, F
bra
Loop
bcf
bsf
EECON1,WREN
INTCON,GIE
; Disable writes
; Enable interrupts
DS39609A-page 82
Advance Information
2003 Microchip Technology Inc.