English
Language : 

PIC16F72-E Datasheet, PDF (38/136 Pages) Microchip Technology – 28-Pin, 8-Bit CMOS FLASH Microcontoller with A/D Converter
PIC16F72
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
BANKSEL
MOVLW
MOVWF
MOVLW
MOVWF
BANKSEL
BSF
NOP
NOP
BANKSEL
MOVF
MOVF
PMADRH
MS_PROG_EE_ADDR
PMADRH
LS_PROG_EE_ADDR
PMADRL
PMCON1
PMCON1, RD
PMDATL
PMDATL, W
PMDATH, W
; Select Bank for PMADRH
;
; MS Byte of Program Address to read
;
; LS Byte of Program Address to read
; Select Bank for PMCON1
; EE Read
;
; Any instructions here are ignored as program
; memory is read in second cycle after BSF PMCON1,RD
;
; First instruction after BSF PMCON1,RD executes normally
; Select Bank for PMDATL
; W = LS Byte of Program PMDATL
; W = MS Byte of Program PMDATL
TABLE 7-1: REGISTERS ASSOCIATED WITH PROGRAM FLASH
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
18Ch
PMDATH
PMCON1
—
—(1)
— Data Register High Byte
—
—
—
—
—
xxxx xxxx uuuu uuuu
— 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’.
DS39597C-page 36
© 2007 Microchip Technology Inc.