English
Language : 

PIC18F258 Datasheet, PDF (74/384 Pages) Microchip Technology – High Performance, 28/40-Pin Enhanced FLASH Microcontrollers with CAN
PIC18FXX8
EXAMPLE 6-3: WRITING TO FLASH PROGRAM MEMORY
MOVLW D’64
MOVWF COUNTER
MOVLW high (BUFFER_ADDR)
MOVWF FSR0H
MOVLW low (BUFFER_ADDR)
MOVWF FSR0L
MOVLW upper (CODE_ADDR)
MOVWF TBLPTRU
MOVLW high (CODE_ADDR)
MOVWF TBLPTRH
MOVLW low (CODE_ADDR)
MOVWF TBLPTRL
READ_BLOCK
TBLRD*+
MOVF TABLAT, W
MOVWF POSTINC0
DECFSZ COUNTER
BRA
READ_BLOCK
MODIFY_WORD
MOVLW DATA_ADDR_HIGH
MOVWF FSR0H
MOVLW DATA_ADDR_LOW
MOVWF FSR0L
MOVLW NEW_DATA_LOW
MOVWF POSTINC0
MOVLW NEW_DATA_HIGH
MOVWF INDF0
ERASE_BLOCK
MOVLW upper (CODE_ADDR)
MOVWF TBLPTRU
MOVLW high (CODE_ADDR)
MOVWF TBLPTRH
MOVLW low (CODE_ADDR)
MOVWF TBLPTRL
BSF
EECON1,EEPGD
BCF
EECON1,CFGS
BSF
EECON1,WREN
BSF
EECON1,FREE
BCF
INTCON,GIE
MOVLW 55h
Required
MOVWF EECON2
Sequence
MOVLW AAh
MOVWF EECON2
BSF
EECON1,WR
NOP
BSF
INTCON,GIE
TBLRD*-
WRITE_BUFFER_BACK
MOVLW 8
MOVWF COUNTER_HI
MOVLW high (BUFFER_ADDR)
MOVWF FSR0H
MOVLW low (BUFFER_ADDR)
MOVWF FSR0L
PROGRAM_LOOP
MOVLW 8
MOVWF COUNTER
WRITE_WORD_TO_HREGS
MOVFW POSTINC0, W
MOVWF TABLAT
TBLWT+*
DECFSZ COUNTER
BRA
WRITE_WORD_TO_HREGS
; number of bytes in erase block
; point to buffer
; Load TBLPTR with the base
; address of the memory block
; read into TABLAT, and inc
; get data
; store data
; done?
; repeat
; point to buffer
; update buffer word
; load TBLPTR with the base
; address of the memory block
; point to FLASH program memory
; access FLASH program memory
; enable write to memory
; enable Row Erase operation
; disable interrupts
; write 55H
; write AAH
; start erase (CPU stall)
; re-enable interrupts
; dummy read decrement
; number of write buffer groups of 8 bytes
; point to buffer
; number of bytes in holding register
; get low byte of buffer data
; present data to table latch
; write data, perform a short write
; to internal TBLWT holding register.
; loop until buffers are full
DS41159B-page 72
Preliminary
 2002 Microchip Technology Inc.