The second SLAVE ADDRESS has a 1 in the LSB bit of that byte to indicate a READ operation. The first SLAVE ADDRESS has a 0 in the LSB bit of that byte to indicate a WRITE operation.
PBP's I2CWRITE and I2CREAD commands require the R/W bit of the Slave address to be 0. PBP will automatically change the R/W bit by itself when it sends the actual bits to the I2C slave device.

From the PBP manual.
"The upper 7 bits of the Control byte contain the control code along with chip select or additional address information, depending on the particular device. The low order bit is an internal flag indicating whether it is a read or write command and should be kept clear."

Thanks for the reply but I don't quite understand. I tried it with no results. Still zero's.
The data sheet shows this format:

SLAVE ADDRESS,COMMAND CODE,SLAVE ADDRESS,[DATA_L,DATA_H]
pbp i2c read from manual
I2CREAD DataPin, ClockPin, Control,{Address,}[Var{,Var...}]{,Label}



The address size sent (byte or word) is determined by the size of the variable that is used. If a byte-sized variable is used for the Address, an 8-bit address is sent. If a word-sized variable is used, a 16-bit address is sent. Be sure to use the proper sized variable for the device you wish to communicate with. Constants should no t be used for the Address as the size can vary dependent on the size of the constant .Also, expressions should not be used as they can cause an improper Address size to be sent





hence
Code:
DEVICE_ID        VAR WORD ; a word var to accept the 16 bit reply
 VCNL4040_addr VAR BYTE
 REG_ADDR        VAR BYTE
 VCNL4040_addr=$C0 ; %0110000 <<1
 REG_ADDR= $0C      ;  a byte var to insure correct size register address data is transmitted for that chip



 I2Cread PORTC.4,PORTC.3,VCNL4040_addr,REG_ADDR,[DEVICE_ID]