Quantcast
Channel: MEL PICBASIC Forum
Viewing all articles
Browse latest Browse all 4745

Working with HEF

$
0
0
I am working with a PIC16F1619 that uses High Endurance Flash instead of the conventional EEPROM. I have pored over the data sheet as well as AN1673, a MicroChip Application Note specifically on the PIC16F1XXX processors and the HEF (AN1673 includes a .c and .h file with everything coded in C). Anyways, here's what I got so far:

Code:

Cyls        var    byte
Start:
GOSUB Write_HEF
GOSUB Read_HEF


Write_HEF:
ASM
    BANKSEL PMADRH
    MOVF    0Fh,W
    MOVWF  PMADRH                          ;PMADRH = $0F, 1st HEF Address is 0F80h
    MOVF    80h,W
    MOVWF  PMADRL                          ;PMADRL = $80
    BCF    PMCON1,CFGS
    BSF    PMCON1,WREN
    BSF    PMCON1,LWLO
    MOVIW  _Cyls
    MOVWF  PMDATL
   
ENDASM
    GOSUB UnlockHef
@  BCF    PMCON1,LWLO
    GOSUB UnlockHef
@  BCF    PMCON1,WREN 
RETURN


Read_HEF:
ASM
    BANKSEL PMADRL                          ; Select Bank for PMCON registers
    MOVLW  0x80h                          ;
    MOVWF  PMADRL                          ; Store LSB of address
    MOVLW  0x0F                            ;
    MOVWF  PMADRH                          ; Store MSB of address
    BCF    PMCON1,CFGS                    ; Do not select Configuration Space
    BSF    PMCON1,RD                      ; Initiate read
    NOP
    NOP
    MOVF    PMDATL,W                        ; Get LSB of word
    MOVWF  _Cyls                          ; Store in user location
    MOVF    PMDATH,W                        ; Get MSB of word
    MOVWF  _b0                            ; Store in user location
ENDASM
RETURN


UnlockHEF:
asm
    BANKSEL PMCON2
    MOVLW  55h
    MOVWF  PMCON2
    MOVLW  AAh
    MOVWF  PMCON2
    BSF    PMCON1,WR                      ; set WR bit
    NOP
    NOP
endasm
RETURN

What am I missing?

Viewing all articles
Browse latest Browse all 4745

Trending Articles