>Warning EEDATA.ASM 77 : Argument out of range: EECON1 (0088). > Least significant bits used. Your code appears that it will work. Did you try ignoring the warnings and trying to run it in a chip or simulator? The warnings occur because the addresses of these registers are in page 1. You must have a very old version of the assmebler because the new one's warning message is slightly more explanatory, something to the effect of: "Address not in page 0. Ensure page select bits are set." Since you did set the page select bits, the program will work. The best workaround to this is to write instructions that access page 1 registers like this: movwf EECON2^0x80 Xoring the high bit with a 1 will clear it to 0, so the assembler won't have to discard high bits. And if you make a mistake like thinking the EEDATA register is in page 1: movfw EEDATA^0x80 the xor will set the high bit, and the assembler will issue a warning. On your program, it isn't necessary to wait for a read to complete, as it only takes 1 cycle so you can fetch the data from EEDATA immediately after setting the RD bit. The RD bit will never read as 1 since it clears immediately. In the write routine, you can allow interrupts while waiting for the write to complete (if the ISR doesn't read the EEPROM).