PIC16F631/677/685/687/689/690
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 (PIC16F685/PIC16F689/
PIC16F690)
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.
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.
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
;
;
MOVF
MOVWF
MOVF
MS_PROG_EE_ADDR, W
EEADRH
LS_PROG_EE_ADDR, W
EEADR
;MS Byte of Program Address to read
;
MOVWF
;LS Byte of Program Address to read
BANKSELEECON1
;
BSF
BSF
EECON1, EEPGD
EECON1, RD
;Point to PROGRAM memory
;EE Read
;
;
NOP
NOP
;First instruction after BSF EECON1,RD executes normally
;Any instructions here are ignored as program
;memory is read in second cycle after BSF EECON1,RD
BANKSELEEDAT
;
MOVF
EEDAT, W
;W = LS Byte of Program Memory
MOVWF
MOVF
MOVWF
LOWPMBYTE
EEDATH, W
HIGHPMBYTE
;
;W = MS Byte of Program EEDAT
;
BANKSEL0x00
;Bank 0
© 2007 Microchip Technology Inc.
DS41262D-page 123