Microchip Technology AC244045 Data Sheet

Page of 448
PIC16(L)F1825/1829
DS41440C-page 114
 2010-2012 Microchip Technology Inc.
11.4
Modifying Flash Program Memory
When modifying existing data in a program memory
row, and data within that row must be preserved, it must
first be read and saved in a RAM image. Program
memory is modified using the following steps:
1.
Load the starting address of the row to be
modified.
2.
Read the existing data from the row into a RAM
image.
3.
Modify the RAM image to contain the new data
to be written into program memory.
4.
Load the starting address of the row to be
rewritten.
5.
Erase the program memory row.
6.
Load the write latches with data from the RAM
image.
7.
Initiate a programming operation.
8.
Repeat steps 6 and 7 as many times as required
to reprogram the erased row.
11.5
User ID, Device ID and 
Configuration Word Access
Instead of accessing program memory or EEPROM
data memory, the User ID’s, Device ID/Revision ID and
Configuration Words can be accessed when CFGS = 1
in the EECON1 register. This is the region that would
be pointed to by PC<15> = 1, but not all addresses are
accessible. Different access may exist for reads and
writes. Refer to 
When read access is initiated on an address outside the
parameters listed in 
, the EEDATH:EEDATL
register pair is cleared.
TABLE 11-2:
USER ID, DEVICE ID AND CONFIGURATION WORD ACCESS (CFGS = 1)
EXAMPLE 11-3:
CONFIGURATION WORD AND DEVICE ID ACCESS
Address
Function
Read Access
Write Access
8000h-8003h
User IDs
Yes
Yes
8006h
Device ID/Revision ID
Yes
No
8007h-8008h
Configuration Words 1 and 2
Yes
No
* This code block will read 1 word of program memory at the memory address:
*
PROG_ADDR_LO (must be 00h-08h) data will be returned in the variables;
*
PROG_DATA_HI, PROG_DATA_LO
BANKSEL
EEADRL
; Select correct Bank
MOVLW
PROG_ADDR_LO
MOVWF
EEADRL
; Store LSB of address
CLRF
EEADRH
; Clear MSB of address
    
BSF
EECON1,CFGS
; Select Configuration Space 
BCF
INTCON,GIE
; Disable interrupts
BSF
EECON1,RD
; Initiate read
NOP
)
NOP
; Ignored (See 
BSF
INTCON,GIE
; Restore interrupts
MOVF
EEDATL,W
; Get LSB of word
MOVWF
PROG_DATA_LO
; Store in user location
MOVF
EEDATH,W
; Get MSB of word
MOVWF
PROG_DATA_HI
; Store in user location