> movlw 0x89 ;yes, EEcon2 address. > movwf 04 ;into FSR. > movlw 0x55 > movwf 00 > movlw 0xAA > movwf 00 > decf 04,1 > bsf 00,1 ;wr=1. > Eccomp: btfsc 00,1 ;writing complete? > goto Eccomp ;no. You have too much time between the writes to EEcon2 and EEcon1. You need to set bit RP0 and use direct addressing to achieve the correct timing [a pain, to be sure, but necessary].