I'm building a 18F programmer using a 16F628... I could succesfully send commands to a 18F452 and made it run them. These are the commands I used (format is 4 bit ICSP command and 16 bit operand (where applies): 0000 - 0x0EFF (Movlw 0xff) 0000 - 0x6EF5 (Movwf TABLAT) 0010 - 0x0000 (read the TABLAT register) With this simple program I could get a 0xFF response from the device ... I also tried: 0000 - 0x0E3F (Movlw 0x3F) 0000 - 0x6EF8 (Movwf TBLPTRU) 0000 - 0x0EFF (Movlw 0xFF) 0000 - 0x6EF7 (Movwf TBLPTRH) 0000 - 0x0EFE (Movlw 0xFE) 0000 - 0x6EF6 (Movwf TBLPTRL) 1001 - 0x0000 (Executes a TBLRD *+, receives 0x24, that is the DEVICE ID 1) 0010 - 0x0000 (Reads the TABLAT register, again 0x24) I can send a new TBLRD *+ (1001) and read 0x20 for the device ID 2. The problem is reading the program memory.... Every address I made a read, returns 0x00 as the received data (that should be 0xff as the device is blank)... I could not read 0xff anywhere in the program memory .... I have tried many ways to read the program memory: 1- After device reset and entering the programming mode, sent a TBLRD *+ that should read address 0x000000. It reads 0x00; 2- Used a preload sequence of the TBLPTR register, like the previous example, and pointed TBLPTR to many addresses (0x000000, 0x000201). Still reads 0x00... 3- I had tried a BULK erase command too, but can't tell if it was succesfull, because I still read the same values at the same addresses. (I know... I will try soon to program some addresses of the device to see what happen !) Anyone could please give me any idea for what else to do, as I'm running out of it ... TIA Fabio Pereira -- http://www.piclist.com hint: The list server can filter out subtopics (like ads or off topics) for you. See http://www.piclist.com/#topics