Microchip Technology Microstick for the 3V PIC24F K-series DM240013-1 DM240013-1 Data Sheet

Product codes
DM240013-1
Page of 260
 2011 Microchip Technology Inc.
DS31037B-page 51
PIC24F16KL402 FAMILY
EXAMPLE 5-2:
ERASING A PROGRAM MEMORY ROW – ‘C’ LANGUAGE CODE 
EXAMPLE 5-3:
LOADING THE WRITE BUFFERS – ASSEMBLY LANGUAGE CODE 
// C example using MPLAB C30
  
  int __attribute__ ((space(auto_psv))) progAddr = &progAddr;
// Global variable located in Pgm Memory
  unsigned int offset;
//Set up pointer to the first memory location to be written
  TBLPAG = __builtin_tblpage(&progAddr);
// Initialize PM Page Boundary SFR
  offset = &progAddr & 0xFFFF;
// Initialize lower word of address
     
  __builtin_tblwtl(offset, 0x0000);
// Set base address of erase block
      
// with dummy latch write
    
  NVMCON = 0x4058;   
// Initialize NVMCON 
  asm("DISI #5");   
// Block all interrupts for next 5 
// instructions       
  __builtin_write_NVM();  
// C30 function to perform unlock 
         
// sequence and set WR
; Set up NVMCON for row programming operations
MOV
#0x4004, W0
;
MOV
W0, NVMCON
; Initialize NVMCON
; Set up a pointer to the first program memory location to be written
; program memory selected, and writes enabled
MOV
#0x0000, W0
MOV
W0, TBLPAG
; Initialize PM Page Boundary SFR
MOV
#0x6000, W0
; An example program memory address
; Perform the TBLWT instructions to write the latches
; 0th_program_word
MOV
#LOW_WORD_0, W2
MOV
#HIGH_BYTE_0, W3
TBLWTL
W2, [W0]
; Write PM low word into program latch
TBLWTH
W3, [W0++]
; Write PM high byte into program latch
; 1st_program_word
MOV
#LOW_WORD_1, W2
MOV
#HIGH_BYTE_1, W3 
TBLWTL
W2, [W0]
; Write PM low word into program latch
TBLWTH
W3, [W0++] 
; Write PM high byte into program latch
;  2nd_program_word
MOV
#LOW_WORD_2, W2
MOV
#HIGH_BYTE_2, W3
TBLWTL
W2,
 
[W0] 
; Write PM low word into program latch
TBLWTH
W3,
 
[W0++]
; Write PM high byte into program latch


; 32nd_program_word
MOV
#LOW_WORD_31, W2
MOV
#HIGH_BYTE_31, W3
TBLWTL
W2,
 
[W0] 
; Write PM low word into program latch
TBLWTH
W3,
 
[W0]
; Write PM high byte into program latch