He estado revisando el datasheet de ese sensor, y he visto un par de cosas que difieren de tu código:
1- el tiempo que tarda en enviarte cada bit es de 0.2ms, debiendo estar el clock 0.1ms a nivel alto, y 0.1ms a nivel bajo. En tu programa los mantienes 1ms
2- la lectura del bit la deberías hacer cuando subes el pulso, puesto que ese es el punto medio y te garantizas que te entregará un bit estable.
Pongo aquí un par de modificaciones a tu soft y ya nos contarás si funciona:
Codigo:
#include <16f876A.h>
#fuses HS,NOWDT,NOPROTECT,PUT
#use delay (clock=20000000)
#use fast_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#build(reset=0x1, interrupt=0x5) // PARA NO BORRAR EL BOOTLOADER
#ORG 0x0F00,0x0FFF {} // PARA NO BORRAR EL BOOTLOADER
#DEFINE SEN_IN PIN_A4 //AMARILLO Vout del sensor
#DEFINE SEN_OUT PIN_B3 //VERDE Vin del sensor
void main(void)
{
int8 i,dist=0;
disable_interrupts(GLOBAL);
output_bit(SEN_OUT,1);
delay_ms(1000);
output_bit(SEN_OUT,0); // Comienza la medicion
delay_ms(70); // Retardo de 70 ms
while(input(SEN_IN)==0); // Esperamos que nos responda
output_bit(SEN_OUT,1);
delay_us(100);
for(i=8;i>0;i--){ //Captura de bits que llegan de mayor a menor peso
output_bit(SEN_OUT,0);
delay_us(100);
if(input(SEN_IN)==1)
bit_set(dist,i-1);
output_bit(SEN_OUT,1);
delay_us(100);
}
delay_us(1400);
output_bit(SEN_OUT,0);
printf("Dis: %u
",dist); //Me muestra por el ordenador la distacia
}