
#include <16F877A.H>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 20000000)
#use i2c(Master,sda=PIN_C4,scl=PIN_C3)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
 
main()
{
int i;
int16 range[17];
while(1)
 {
  i2c_start();                    //initate start condition
  i2c_write(0xE0);                //device address
  i2c_write(0x00);                //register address
  i2c_write(0x50);                //set units to inches
  i2c_stop();
 
  delay_ms(105);                   //wait for returning ping
 
  i2c_start();                    //initiate a new start condition
  i2c_write(0xE0);                //device address
  i2c_write(0x02);                //address of high byte register
  i2c_start();
  i2c_write(0xE1);                //device address but read
  for (i=0;i<17;i++)
  {
  range[i] = i2c_read(1);         //read first byte and shift left
  range[i] = range[i] << 8;
  if(i<16)
  range[i] += i2c_read(1);           //read second byte and add to 1st
  else
  range[i] += i2c_read(0);
  }
  i2c_stop();
  for (i=0;i<17;i++)
  printf("range in inches = %lu\n\r", range[i]);
  delay_ms(1000);
 }
}



