Datasheet

Table Of Contents
© 2008 Microchip Technology Inc. DS41262E-page 123
PIC16F631/677/685/687/689/690
10.1.4 READING THE FLASH PROGRAM
MEMORY (PIC16F685/PIC16F689/
PIC16F690)
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 ;
MOVF MS_PROG_EE_ADDR, W ;
MOVWF EEADRH ;MS Byte of Program Address to read
MOVF LS_PROG_EE_ADDR, W ;
MOVWF EEADR ;LS Byte of Program Address to read
BANKSEL EECON1 ;
BSF EECON1, EEPGD ;Point to PROGRAM memory
BSF EECON1, RD ;EE Read
;
NOP ;First instruction after BSF EECON1,RD executes normally
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 ;
BANKSEL 0x00 ;Bank 0
Required
Sequence