English
Language : 

PIC18F44J50-I Datasheet, PDF (110/562 Pages) Microchip Technology – 28/44-Pin, Low-Power, High-Performance USB Microcontrollers
PIC18F46J50 FAMILY
EXAMPLE 7-3: WRITING TO FLASH PROGRAM MEMORY
ERASE_BLOCK
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CODE_ADDR_UPPER
TBLPTRU
CODE_ADDR_HIGH
TBLPTRH
CODE_ADDR_LOW
TBLPTRL
BSF
BSF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
BSF
BSF
MOVLW
MOVWF
EECON1, WREN
EECON1, FREE
INTCON, GIE
0x55
EECON2
0xAA
EECON2
EECON1, WR
INTCON, GIE
D'16'
WRITE_COUNTER
RESTART_BUFFER
FILL_BUFFER
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
D'64'
COUNTER
BUFFER_ADDR_HIGH
FSR0H
BUFFER_ADDR_LOW
FSR0L
...
WRITE_BUFFER
MOVLW D’64’
MOVWF COUNTER
WRITE_BYTE_TO_HREGS
MOVFF POSTINC0, WREG
MOVWF TABLAT
TBLWT+*
PROGRAM_MEMORY
Required
Sequence
DECFSZ COUNTER
BRA
WRITE_BYTE_TO_HREGS
BSF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
BSF
BSF
BCF
EECON1, WREN
INTCON, GIE
0x55
EECON2
0xAA
EECON2
EECON1, WR
INTCON, GIE
EECON1, WREN
; Load TBLPTR with the base address
; of the memory block, minus 1
; enable write to memory
; enable Erase operation
; disable interrupts
; write 0x55
; write 0xAA
; start erase (CPU stall)
; re-enable interrupts
; Need to write 16 blocks of 64 to write
; one erase block of 1024
; point to buffer
; read the new data from I2C, SPI,
; PSP, USART, etc.
; 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
; enable write to memory
; disable interrupts
; write 0xAA
; write 0xAA
; start program (CPU stall)
; re-enable interrupts
; disable write to memory
DECFSZ WRITE_COUNTER
BRA
RESTART_BUFFER
; done with one write cycle
; if not done replacing the erase block
DS39931D-page 110
 2011 Microchip Technology Inc.