Claro , perdona , no lo puse completo .
Lo he editado para completarlo .
no olvides poner la cabecera el pic que usas
#define __dsPIC30F6014__
Ya que cada modelo varia la direccion en que empieza
Codigo:
2kb. 0xF800 -> 30F6011 , 30F6013
4kb. 0xF000 -> 30F6010 , 30F6012 , 30F6014
1kb. 0xFC00
Solo es una manera y se puede obtimizar seguramente , tambien gravar todo un bloque .
Esta inspirado del data sheet que indica como se lee y escrive .
Codigo:
XAMPLE 7-4: DATA EEPROM WORD WRITE
; Point to data memory
MOV #LOW_ADDR_WORD,W0 ; Init pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1,TBLPAG
MOV #LOW(WORD),W2 ; Get data
TBLWTL W2,[ W0] ; Write data
; The NVMADR captures last table access address
; Select data EEPROM for 1 word op
MOV #0x4004,W0
MOV W0,NVMCON
; Operate key to allow write operation
DISI #5 ; Block all interrupts with priority <7 for
; next 5 instructions
MOV #0x55,W0
MOV W0,NVMKEY ; Write the 0x55 key
MOV #0xAA,W1
MOV W1,NVMKEY ; Write the 0xAA key
BSET NVMCON,#WR ; Initiate program sequence
NOP
NOP
; Write cycle will complete in 2mS. CPU is not stalled for the Data Write Cycle