here is my code:
as I mentioned the first read is fine but when it goes to the loop for next bytes it's wrong data display on LCD.
setup
bcf STATUS, RP0
clrf PORTB
clrf PORTC
bsf STATUS, RP0 ;bank1
movlw b'00011100'
movwf TRISC ; PORTC <4:3> as input
bcf STATUS, RP0 ;bank0
call INITLCD
clrf SSPCON
movlw b'00101000' ;init I2C with FOsc
movwf SSPCON
bcf PIR1, SSPIF ;init XT flag bit
bsf STATUS, RP0 ;bank1
clrf SSPCON2 ;init SSPCON2
clrf SSPSTAT
bsf SSPSTAT, SMP ;slew disable for 100KHz
bcf SSPSTAT, CKE ;SMBus disabled
movlw h'9'
movwf SSPADD ; 100Khz baud rate
bcf STATUS, RP0 ;bank0
movlw d'16'
movwf data_count
read_mode
bsf STATUS, RP0 ;bank1
bsf SSPCON2, SEN ; send Start
btfss SSPSTAT, S
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
movlw b'10100000'
movwf SSPBUF ;set device address<0>write
bsf STATUS, RP0 ;bank1
btfsc SSPSTAT, BF ; check if buffer is empty
goto $-1
btfsc SSPCON2, ACKSTAT ; check if ACK received
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
movlw d'0'
movwf SSPBUF ; first word address
bsf STATUS, RP0 ;bank1
btfsc SSPSTAT, BF ; check if buffer is empty
goto $-1
btfsc SSPCON2, ACKSTAT ; check if ACK received
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
movlw d'5'
movwf SSPBUF ;second word address page0=0, page1=128
bsf STATUS, RP0 ;bank1
btfsc SSPSTAT, BF ; check if buffer is empty
goto $-1
btfsc SSPCON2, ACKSTAT ; check if ACK received
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
bsf STATUS, RP0 ;bank1
bsf SSPCON2, RSEN ;send Restart
btfss SSPSTAT, S
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
movlw b'10100001'
movwf SSPBUF ;set device address<1>read
bsf STATUS, RP0 ;bank1
btfsc SSPSTAT, BF ; check if buffer is empty
goto $-1
btfsc SSPCON2, ACKSTAT ; check if ACK received
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ; wait XT complete
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
data_read
bsf STATUS, RP0 ;bank1
bsf SSPCON2, RCEN ;I2C receive enabled
btfss SSPSTAT, BF ; check if buffer is full
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
bcf STATUS, RP0
movf SSPBUF, w
call LCDWRITE ;data to LCD
clrf SSPBUF
bsf STATUS, RP0
bcf SSPCON2, ACKDT ;ACK send
bsf SSPCON2, ACKEN ;init Sequel ACK
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
decfsz data_count, f
goto data_read
return
read_end
bsf STATUS, RP0 ;bank1
bsf SSPCON2, ACKDT ;NO acknowlege bit
bsf SSPCON2, ACKEN ;init Sequel ACK
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ;wait till Start completed
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit
bsf SSPCON2, PEN ;send Stop bit
btfss SSPSTAT, P
goto $-1
bcf STATUS, RP0 ;bank0
btfss PIR1, SSPIF ; wait XT complete
goto $-1
bcf PIR1, SSPIF ; clear TXflag bit