Solved. I assumed that Reading and ACKnowledging was enough to cause the MSSP to do another read. It turns out that a initiate read ie setting RCEN is required for every read, not just at the start of the random read. It seems obvious now but it did not appear so obvious when reading the manuals and App Notes. So I originally had banksel SSPCON2 ; select SFR bank bsf SSPCON2,RCEN ; initiate I2C read ; This code checks for completion of I2C ; read event btfsc SSPCON2,RCEN ; test read ********************* I sthis right ; bit state goto $-1 ; module bus so wait read_next_byte: ;If code runs to here ok then = first byte appears to be read ok banksel SSPBUF movfw SSPBUF ;read the byte banksel SSPCON2 ; select SFR bank bcf SSPCON2, ACKDT ; set ack bit; state to 0 bsf SSPCON2, ACKEN ; initiate ack ;the following lines are included for debug only banksel PORTD ;display value for debug movwf PORTD goto read_next_byte: changed to this code and now it works. This includes the RCEN setting for each read (and re-arranges the order of the ACK - Read steps but I am not sure if that makes any difference.) read_next_byte: ;If code runs to here ok then = first banksel SSPCON2 ; select SFR bank bsf SSPCON2,RCEN ; initiate I2C read ; This code checks for completion of I2C ; read event btfsc SSPCON2,RCEN ; test read ********************* I sthis right ; bit state goto $-1 ; module bus so wait byte appears to be read ok banksel SSPCON2 ; select SFR bank bcf SSPCON2, ACKDT ; set ack bit; state to 0 bsf SSPCON2, ACKEN ; initiate ack banksel SSPBUF movfw SSPBUF ;read the byte ;the following lines are included for debug only banksel PORTD ;display value for debug movwf PORTD goto read_next_byte: --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .