PIC16F882/883/884/886/887
EEDAT and EEDATH registers will hold this value until
another read or until it is written to by the user.
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.
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.
EXAMPLE 10-3:
FLASH PROGRAM READ
BANKSELEEADR
;
;
MOVLW
MOVWF
MOVLW
MOVWF
MS_PROG_EE_ADDR
EEADRH
LS_PROG_EE_ADDR
EEADR
;MS Byte of Program Address to read
;
;LS Byte of Program Address to read
BANKSELEECON1
;
BSF
BSF
EECON1, EEPGD
EECON1, RD
;Point to PROGRAM memory
;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
BANKSELEEDAT
;
MOVF
MOVWF
MOVF
MOVWF
BCF
EEDAT, W
;W = LS Byte of Program Memory
;
;W = MS Byte of Program EEDAT
;
LOWPMBYTE
EEDATH, W
HIGHPMBYTE
STATUS, RP1
;Bank 0
© 2007 Microchip Technology Inc.
Preliminary
DS41291D-page 115