Microchip Technology MCP1631RD-MCC2 Data Sheet

Page of 338
 2006-2012 Microchip Technology Inc.
DS41291G-page 119
PIC16F882/883/884/886/887
10.1.4
READING THE FLASH PROGRAM 
MEMORY
To read a program memory location, the user must
write the Least and Most Significant address bits to the
EEADR and EEADRH registers, set the EEPGD con-
trol bit of the EECON1 register, and then set control bit
RD. Once the read control bit is set, the program mem-
ory Flash controller will use the second instruction
cycle to read the data. This causes the second instruc-
tion immediately following the “BSF EECON1,RD”
instruction to be ignored. The data is available in the
very next cycle, in the EEDAT and EEDATH registers;
therefore, it can be read as two bytes in the following
instructions. 
EEDAT and EEDATH registers will hold this value until
another read or until it is written to by the user.
EXAMPLE 10-3:
FLASH PROGRAM READ 
Note 1: The two instructions following a program
memory read are required to be NOPs.
This prevents the user from executing a
two-cycle instruction on the next
instruction after the RD bit is set.
2: If the WR bit is set when EEPGD = 1, it
will be immediately reset to ‘0’ and no
operation will take place.
BANKSEL EEADR
;
MOVLW
MS_PROG_EE_ADDR
;
MOVWF
EEADRH
;MS Byte of Program Address to read
MOVLW
LS_PROG_EE_ADDR
;
MOVWF
EEADR
;LS Byte of Program Address to read
BANKSEL EECON1
;
BSF
EECON1, EEPGD
;Point to PROGRAM memory
BSF
EECON1, RD
;EE Read
;
    
;First instruction after BSF EECON1,RD executes normally
NOP
NOP
;Any instructions here are ignored as program
;memory is read in second cycle after BSF EECON1,RD
;
BANKSEL EEDAT
;
MOVF
EEDAT, W
;W = LS Byte of Program Memory
MOVWF
LOWPMBYTE
;
MOVF
EEDATH, W
;W = MS Byte of Program EEDAT
MOVWF
HIGHPMBYTE
;
BCF
STATUS, RP1
;Bank 0
R
e
qu
ired
S
eq
uen
ce