Datasheet

PIC16F72
DS39597C-page 36 © 2007 Microchip Technology Inc.
7.3 Reading the FLASH Program
Memory
To read a program memory location, the user must
write two bytes of the address to the PMADRL and
PMADRH registers and then set control bit, RD
(PMCON1<0>). Once the read control bit is set, the
program memory FLASH controller will use the second
instruction cycle after to read the data. This causes the
second instruction immediately following the “BSF
PMCON1,RD” instruction to be ignored. The data is
available in the very next cycle in the PMDATL and
PMDATH registers; therefore, it can be read as two
bytes in the following instructions. PMDATL and
PMDATH registers will hold this value until another
read, or until it is written to by the user (during a write
operation).
7.4 Operation During Code Protect
The FLASH program memory control can read any-
where within the program memory, whether or not the
program memory is code protected.
This does not compromise the code, because there is
no way to rewrite a portion of the program memory, or
leave contents of a program memory read in a register
while changing modes.
EXAMPLE 7-1: FLASH PROGRAM READ
TABLE 7-1: REGISTERS ASSOCIATED WITH PROGRAM FLASH
BANKSEL PMADRH ; Select Bank for PMADRH
MOVLW MS_PROG_EE_ADDR ;
MOVWF PMADRH ; MS Byte of Program Address to read
MOVLW LS_PROG_EE_ADDR ;
MOVWF PMADRL ; LS Byte of Program Address to read
BANKSEL PMCON1 ; Select Bank for PMCON1
BSF PMCON1, RD ; EE Read
;
NOP ; Any instructions here are ignored as program
NOP ; memory is read in second cycle after BSF PMCON1,RD
;
; First instruction after BSF PMCON1,RD executes normally
BANKSEL PMDATL ; Select Bank for PMDATL
MOVF PMDATL, W ; W = LS Byte of Program PMDATL
MOVF PMDATH, W ; W = MS Byte of Program PMDATL
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Value on
POR, BOR
Value on
all other
RESETS
10Dh PMADRL Address Register Low Byte xxxx xxxx uuuu uuuu
10Fh PMADRH
Address Register High Byte xxxx xxxx uuuu uuuu
10Ch PMDATL Data Register Low Byte xxxx xxxx uuuu uuuu
10Eh PMDATH Data Register High Byte xxxx xxxx uuuu uuuu
18Ch PMCON1
(1)
RD 1--- ---0 1--- ---0
Legend: x = unknown, u = unchanged, r = reserved, - = unimplemented, read as '0'.
Shaded cells are not used during FLASH access.
Note 1: This bit always reads as a ‘1’.