#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); } }