PIC16F882/883/884/886/887
An example of the complete eight-word write sequence
is shown in Example 10-4. The initial address is loaded
into the EEADRH and EEADR register pair; the eight
words of data are loaded using indirect addressing.
EXAMPLE 10-4:
WRITING TO FLASH PROGRAM MEMORY
; This write routine assumes the following:
;
; 1. A valid starting address (the least significant bits = ‘00’)is loaded in ADDRH:ADDRL
; 2. The 8 bytes of data are loaded, starting at the address in DATADDR
; 3. ADDRH, ADDRL and DATADDR are all located in shared data memory 0x70 - 0x7f
;
BSF
BCF
STATUS,RP1
STATUS,RP0
ADDRH,W
EEADRH
ADDRL,W
EEADR
DATAADDR,W
FSR
INDF,W
EEDATA
FSR,F
INDF,W
EEDATH
;
; Bank 2
; Load initial address
;
;
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
INCF
MOVF
MOVWF
INCF
BSF
BSF
BSF
BCF
BTFSC
GOTO
MOVLW
MOVWF
MOVLW
MOVWF
BSF
;
; Load initial data address
;
; Load first data byte into lower
;
; Next byte
; Load second data byte into upper
;
;
; Bank 3
; Point to program memory
; Enable writes
; Disable interrupts (if using)
; See AN576
LOOP
FSR,F
STATUS,RP0
EECON1,EEPGD
EECON1,WREN
INTCON,GIE
INTCON,GIE
1-2
55h
EECON2
AAh
EECON2
; Start of required write sequence:
; Write 55h
;
; Write AAh
EECON1,WR
; Set WR bit to begin write
; Any instructions here are ignored as processor
; halts to begin write sequence
; processor will stop here and wait for write complete
; after write processor continues with 3rd instruction
; Disable writes
; Enable interrupts (if using)
; Bank 2
; Increment address
; Check if lower two bits of address are ‘00’
; Indicates when four words have been programmed
;
; Exit if more than eight words,
; Continue if less than eight words
NOP
NOP
BCF
BSF
BCF
INCF
MOVF
ANDLW
XORLW
BTFSC
GOTO
EECON1,WREN
INTCON,GIE
STATUS,RP0
EEADR,F
EEADR,W
0x07
0x07
STATUS,Z
LOOP
© 2007 Microchip Technology Inc.
Preliminary
DS41291D-page 119